2025-10-15 10:12:44 +03:00

59 lines
1.5 KiB
Go

package tsoptions
import (
"strings"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/collections"
)
var (
CompilerNameMap = GetNameMapFromList(OptionsDeclarations)
BuildNameMap = GetNameMapFromList(BuildOpts)
WatchNameMap = GetNameMapFromList(optionsForWatch)
)
func GetNameMapFromList(optDecls []*CommandLineOption) *NameMap {
optionsNames := collections.NewOrderedMapWithSizeHint[string, *CommandLineOption](len(optDecls))
shortOptionNames := map[string]string{}
for _, option := range optDecls {
optionsNames.Set(strings.ToLower(option.Name), option)
if option.ShortName != "" {
shortOptionNames[option.ShortName] = option.Name
}
}
return &NameMap{
optionsNames: optionsNames,
shortOptionNames: shortOptionNames,
}
}
type NameMap struct {
optionsNames *collections.OrderedMap[string, *CommandLineOption]
shortOptionNames map[string]string
}
func (nm *NameMap) Get(name string) *CommandLineOption {
return nm.optionsNames.GetOrZero(strings.ToLower(name))
}
func (nm *NameMap) GetFromShort(shortName string) *CommandLineOption {
// returns option only if shortName is a valid short option
name, ok := nm.shortOptionNames[shortName]
if !ok {
return nil
}
return nm.Get(name)
}
func (nm *NameMap) GetOptionDeclarationFromName(optionName string, allowShort bool) *CommandLineOption {
optionName = strings.ToLower(optionName)
// Try to translate short option names to their full equivalents.
if allowShort {
short := nm.shortOptionNames[optionName]
if short != "" {
optionName = short
}
}
return nm.Get(optionName)
}