gitcrawl/internal/cli/args.go
2026-04-28 21:57:34 +01:00

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
}