Support required combined with xor groups.

Fixes #112.
This commit is contained in:
Alec Thomas
2021-06-21 19:25:05 +09:30
parent 54558f65e8
commit c494f8b8f3
3 changed files with 37 additions and 2 deletions
+16 -1
View File
@@ -743,17 +743,32 @@ func (c *Context) PrintUsage(summary bool) error {
}
func checkMissingFlags(flags []*Flag) error {
xorGroup := map[string][]string{}
missing := []string{}
for _, flag := range flags {
if !flag.Required || flag.Set {
continue
}
missing = append(missing, flag.Summary())
if len(flag.Xor) > 0 {
for _, xor := range flag.Xor {
xorGroup[xor] = append(xorGroup[xor], flag.Summary())
}
} else {
missing = append(missing, flag.Summary())
}
}
for _, flags := range xorGroup {
if len(flags) > 1 {
missing = append(missing, strings.Join(flags, " or "))
}
}
if len(missing) == 0 {
return nil
}
sort.Strings(missing)
return fmt.Errorf("missing flags: %s", strings.Join(missing, ", "))
}