46 lines
939 B
Go
46 lines
939 B
Go
package cli
|
|
|
|
func normalizeCommandArgs(args []string, stringFlags map[string]bool) []string {
|
|
var flags []string
|
|
var positionals []string
|
|
for index := 0; index < len(args); index++ {
|
|
arg := args[index]
|
|
name, ok := flagName(arg)
|
|
if !ok {
|
|
positionals = append(positionals, arg)
|
|
continue
|
|
}
|
|
flags = append(flags, arg)
|
|
for i := 0; i < len(name); i++ {
|
|
if name[i] == '=' {
|
|
name = name[:i]
|
|
break
|
|
}
|
|
}
|
|
if stringFlags[name] && !hasInlineValue(arg) && index+1 < len(args) {
|
|
index++
|
|
flags = append(flags, args[index])
|
|
}
|
|
}
|
|
return append(flags, positionals...)
|
|
}
|
|
|
|
func flagName(arg string) (string, bool) {
|
|
if len(arg) >= 3 && arg[:2] == "--" {
|
|
return arg[2:], true
|
|
}
|
|
if len(arg) >= 2 && arg[0] == '-' && arg[1] != '-' {
|
|
return arg[1:], true
|
|
}
|
|
return "", false
|
|
}
|
|
|
|
func hasInlineValue(arg string) bool {
|
|
for i := 0; i < len(arg); i++ {
|
|
if arg[i] == '=' {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|