mirror of
https://github.com/spf13/cobra
synced 2024-11-24 14:47:12 +00:00
Command: Added new method getClashingFlagnames
This commit is contained in:
parent
f25a3c6e0b
commit
da49908486
1 changed files with 35 additions and 0 deletions
35
command.go
35
command.go
|
@ -1641,6 +1641,41 @@ func (c *Command) LocalFlags() *flag.FlagSet {
|
|||
return c.lflags
|
||||
}
|
||||
|
||||
// getClashingFlagnames returns all flags which names are used more than once
|
||||
func (c *Command) getClashingFlagnames() []*flag.Flag {
|
||||
allFlags := make(map[string]*flag.Flag, 0)
|
||||
clashingFlagsSet := make(map[*flag.Flag]interface{}, 0)
|
||||
|
||||
checkFlagFunc := func(f *flag.Flag) {
|
||||
savedFlag, exists := allFlags[f.Name]
|
||||
if !exists {
|
||||
allFlags[f.Name] = f
|
||||
} else if savedFlag != f /* Different flag or not */ {
|
||||
clashingFlagsSet[f] = nil
|
||||
clashingFlagsSet[savedFlag] = nil
|
||||
}
|
||||
}
|
||||
|
||||
c.VisitParents(func(parent *Command) {
|
||||
if parent.pflags != nil {
|
||||
parent.pflags.VisitAll(checkFlagFunc)
|
||||
}
|
||||
})
|
||||
|
||||
if c.pflags != nil {
|
||||
c.pflags.VisitAll(checkFlagFunc)
|
||||
}
|
||||
|
||||
// Possibility that we Visit some of the flags which we already visited in c.pflags
|
||||
c.LocalFlags().VisitAll(checkFlagFunc)
|
||||
|
||||
clashingFlags := make([]*flag.Flag, 0, len(clashingFlagsSet))
|
||||
for flag := range clashingFlagsSet {
|
||||
clashingFlags = append(clashingFlags, flag)
|
||||
}
|
||||
return clashingFlags
|
||||
}
|
||||
|
||||
// InheritedFlags returns all flags which were inherited from parent commands.
|
||||
func (c *Command) InheritedFlags() *flag.FlagSet {
|
||||
c.mergePersistentFlags()
|
||||
|
|
Loading…
Reference in a new issue