summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Allbee <[email protected]>2020-01-23 21:08:18 -0800
committerDylan Allbee <[email protected]>2020-01-25 11:53:34 -0800
commit338e831a8474c442b2c5e75eefed7b602276faa8 (patch)
tree3928166c5324c4ba73043d80168b7540a5927453
parente9c71eb4fa701960bd054d4034d155717aef8373 (diff)
Print global options in help for subcommands
fixes #101
-rw-r--r--example_test.go3
-rw-r--r--usage.go26
2 files changed, 25 insertions, 4 deletions
diff --git a/example_test.go b/example_test.go
index be3cd12..4e6372f 100644
--- a/example_test.go
+++ b/example_test.go
@@ -235,7 +235,8 @@ func Example_helpTextForSubcommand() {
// Positional arguments:
// ITEM item to fetch
//
- // Options:
+ // Global options:
+ // --verbose
// --help, -h display this help and exit
}
diff --git a/usage.go b/usage.go
index 7ee68da..816c4be 100644
--- a/usage.go
+++ b/usage.go
@@ -144,9 +144,29 @@ func (p *Parser) writeHelpForCommand(w io.Writer, cmd *command) {
}
// write the list of options
- fmt.Fprint(w, "\nOptions:\n")
- for _, spec := range options {
- p.printOption(w, spec)
+ if len(options) > 0 || cmd.parent == nil {
+ fmt.Fprint(w, "\nOptions:\n")
+ for _, spec := range options {
+ p.printOption(w, spec)
+ }
+ }
+
+ // obtain a flattened list of options from all ancestors
+ var globals []*spec
+ ancestor := cmd.parent
+ for ancestor != nil {
+ for _, spec := range ancestor.specs {
+ globals = append(globals, spec)
+ }
+ ancestor = ancestor.parent
+ }
+
+ // write the list of global options
+ if len(globals) > 0 {
+ fmt.Fprint(w, "\nGlobal options:\n")
+ for _, spec := range globals {
+ p.printOption(w, spec)
+ }
}
// write the list of built in options