File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
91119func filterArgs (args []string ) []string {
You can’t perform that action at this time.
0 commit comments