Preserve reporting flag occurrence order
This commit is contained in:
@@ -80,7 +80,7 @@ func (session *Session) Parse(argv []string) commandmeta.Result {
|
||||
localFlags := make([]commandmeta.Flag, 0, len(selectedNode.Flags)+len(selectedNode.CoreFlags))
|
||||
localFlags = append(localFlags, selectedNode.Flags...)
|
||||
localFlags = append(localFlags, selectedNode.CoreFlags...)
|
||||
interpreted, spellings, interpretationFailure := interpretFlagTokens(remaining, localFlags, session.flagAliases)
|
||||
interpreted, spellings, occurrences, interpretationFailure := interpretFlagTokens(remaining, localFlags, session.flagAliases)
|
||||
for _, flag := range localFlags {
|
||||
if value := selected.Flags().Lookup(flag.Name); value != nil {
|
||||
value.Value.(*rawValue).queueSpellings(spellings[flag.Name])
|
||||
@@ -90,14 +90,17 @@ func (session *Session) Parse(argv []string) commandmeta.Result {
|
||||
helpFlag.Value.(*rawValue).queueSpellings(spellings["help"])
|
||||
}
|
||||
if err := selected.ParseFlags(interpreted); err != nil {
|
||||
result.FlagOccurrences = occurrences
|
||||
return failure(result, err.Error())
|
||||
}
|
||||
// Parse the completed prefix first so an earlier backend failure keeps its
|
||||
// precedence over a missing value discovered while interpreting aliases.
|
||||
if interpretationFailure != nil {
|
||||
result.FlagOccurrences = occurrences
|
||||
result.Failure = interpretationFailure
|
||||
return result
|
||||
}
|
||||
result.FlagOccurrences = occurrences
|
||||
operands := selected.Flags().Args()
|
||||
|
||||
result.Operands = append([]string(nil), operands...)
|
||||
@@ -113,6 +116,15 @@ func (session *Session) Parse(argv []string) commandmeta.Result {
|
||||
if helpFlag := selected.Flags().Lookup("help"); helpFlag != nil {
|
||||
helpRequested, err := helpFlag.Value.(*rawValue).lastBool()
|
||||
if err != nil {
|
||||
for index, occurrence := range result.FlagOccurrences {
|
||||
if occurrence.Name != "help" {
|
||||
continue
|
||||
}
|
||||
if _, parseErr := strconv.ParseBool(occurrence.RawValue); parseErr != nil {
|
||||
result.FlagOccurrences = result.FlagOccurrences[:index+1]
|
||||
break
|
||||
}
|
||||
}
|
||||
return failure(result, err.Error())
|
||||
}
|
||||
result.HelpRequested = helpRequested
|
||||
|
||||
Reference in New Issue
Block a user