-
Notifications
You must be signed in to change notification settings - Fork 0
/
flagname.go
47 lines (40 loc) · 1.07 KB
/
flagname.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package clix
import "strings"
type FlagName struct {
Name string
Aliases []string
EnvVars []string
FilePath string
}
// NewFlagName returns *FlagName.
func NewFlagName(prefix FlagPrefix, group, name string) *FlagName {
return NewFlagNameAlias(prefix, group, name, ShortFlagName(name))
}
// ShortFlagName makes a short flag name.
//
// e.g.
// "target-id" => "ti
// "LONG_NAME" => "LN"
func ShortFlagName(name string) string {
m := strings.FieldsFunc(name, func(r rune) bool { return r == '_' || r == '-' })
a := make([]rune, len(m))
for i, v := range m {
a[i] = []rune(v)[0]
}
return string(a)
}
// NewFlagNameAlias returns *FlagName.
func NewFlagNameAlias(prefix FlagPrefix, group, name, alias string) *FlagName {
if len(group) > 0 {
name = group + "-" + name
alias = group + "-" + alias
}
uf := strings.ReplaceAll(strings.ToUpper(name), "-", "_")
ua := strings.ReplaceAll(strings.ToUpper(alias), "-", "_")
return &FlagName{
Name: name,
Aliases: []string{alias},
EnvVars: prefix.EnvVars(uf, ua),
FilePath: prefix.FilePath(uf, ua),
}
}