Skip to content

Commit 0cd2584

Browse files
committed
support unknown flag
1 parent 14b44d1 commit 0cd2584

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

flag.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,35 @@ func (f *FlagLoader) Load(s interface{}) error {
8585
args = f.Args
8686
}
8787

88-
return flagSet.Parse(args)
88+
// support unknown flag
89+
var newArgs []string
90+
type BoolFlag interface {
91+
IsBoolFlag() bool
92+
}
93+
for i := 0; i < len(args); i++ {
94+
if strings.HasPrefix(args[i], "-") {
95+
flagName := strings.TrimLeft(args[i], "-")
96+
if flagName == "help" || flagName == "h" {
97+
newArgs = append(newArgs, args[i])
98+
continue
99+
}
100+
cmdlineFlag := f.flagSet.Lookup(flagName)
101+
if cmdlineFlag != nil {
102+
newArgs = append(newArgs, args[i])
103+
if bf, ok := cmdlineFlag.Value.(BoolFlag); ok && bf.IsBoolFlag() {
104+
continue
105+
}
106+
i++
107+
if i < len(args) {
108+
newArgs = append(newArgs, args[i])
109+
}
110+
}
111+
}
112+
}
113+
114+
fmt.Println(newArgs)
115+
116+
return flagSet.Parse(newArgs)
89117
}
90118

91119
func filterArgs(args []string) []string {

0 commit comments

Comments
 (0)