@@ -131,6 +131,7 @@ func (v DefaultCommandFlagsValidator) ValidateParsedFlags(flags *flag.FlagSet) e
131131
132132func collectUnknownFlags (flags * flag.FlagSet , args []string ) []string {
133133 var unknownFlags []string
134+ alreadySeenUnknownFLags := make (map [string ]int )
134135
135136 for i := 0 ; i < len (args ); i ++ {
136137 currentArgument := args [i ]
@@ -148,30 +149,15 @@ func collectUnknownFlags(flags *flag.FlagSet, args []string) []string {
148149
149150 isFlagKnown := flags .Lookup (flagName )
150151 if isFlagKnown != nil {
151- nextIndex := i + 1
152- if nextIndex < len (args ) {
153- isBoolean := isBoolFlag (isFlagKnown )
154- if ! isBoolean {
155- nextArgument := args [nextIndex ]
156- nextHasPrefixDash := strings .HasPrefix (nextArgument , "-" )
157- if ! nextHasPrefixDash {
158- i = nextIndex
159- }
160- }
152+ isBoolean := isBoolFlag (isFlagKnown )
153+ if ! isBoolean {
154+ i = tryToGetNext (args , i )
161155 }
162156 continue
163157 }
164158
165- unknownFlags = append (unknownFlags , currentFlag )
166-
167- nextIndex := i + 1
168- if nextIndex < len (args ) {
169- nextArgument := args [nextIndex ]
170- nextHasPrefixDash := strings .HasPrefix (nextArgument , "-" )
171- if ! nextHasPrefixDash {
172- i = nextIndex
173- }
174- }
159+ appendOnlyWhenCountIsOne (alreadySeenUnknownFLags , currentFlag , & unknownFlags )
160+ i = tryToGetNext (args , i )
175161 }
176162
177163 return unknownFlags
@@ -187,3 +173,22 @@ func isBoolFlag(flag *flag.Flag) bool {
187173
188174 return boolFlag .IsBoolFlag ()
189175}
176+
177+ func tryToGetNext (args []string , currentIndex int ) int {
178+ nextIndex := currentIndex + 1
179+ if nextIndex < len (args ) {
180+ nextArgument := args [nextIndex ]
181+ nextHasPrefixDash := strings .HasPrefix (nextArgument , "-" )
182+ if ! nextHasPrefixDash {
183+ return nextIndex
184+ }
185+ }
186+ return currentIndex
187+ }
188+
189+ func appendOnlyWhenCountIsOne (alreadySeenUnknownFLags map [string ]int , currentFlag string , unknownFlags * []string ) {
190+ alreadySeenUnknownFLags [currentFlag ]++
191+ if alreadySeenUnknownFLags [currentFlag ] == 1 {
192+ * unknownFlags = append (* unknownFlags , currentFlag )
193+ }
194+ }
0 commit comments