diff --git a/usage.go b/usage.go index 66a5be9..b84aa10 100644 --- a/usage.go +++ b/usage.go @@ -48,39 +48,17 @@ func (p *Parser) WriteUsageForSubcommand(w io.Writer, subcommand ...string) erro } var positionals, longOptions, shortOptions []*spec - var hasVersionOption bool for _, spec := range cmd.specs { switch { case spec.positional: positionals = append(positionals, spec) case spec.long != "": longOptions = append(longOptions, spec) - if spec.long == "version" { - hasVersionOption = true - } case spec.short != "": shortOptions = append(shortOptions, spec) } } - // make a list of ancestor commands so that we print with full context - // also determine if any ancestor has a version option spec - var ancestors []string - ancestor := cmd - for ancestor != nil { - for _, spec := range ancestor.specs { - if spec.long == "version" { - hasVersionOption = true - } - } - ancestors = append(ancestors, ancestor.name) - ancestor = ancestor.parent - } - - if !hasVersionOption && p.version != "" { - fmt.Fprintln(w, p.version) - } - // print the beginning of the usage string fmt.Fprintf(w, "Usage: %s", p.cmd.name) for _, s := range subcommand { @@ -254,6 +232,11 @@ func (p *Parser) WriteHelpForSubcommand(w io.Writer, subcommand ...string) error if p.description != "" { fmt.Fprintln(w, p.description) } + + if !hasVersionOption && p.version != "" { + fmt.Fprintln(w, p.version) + } + p.WriteUsageForSubcommand(w, subcommand...) // write the list of positionals diff --git a/usage_test.go b/usage_test.go index a958abb..fc8aaff 100644 --- a/usage_test.go +++ b/usage_test.go @@ -237,7 +237,7 @@ func (versioned) Version() string { } func TestUsageWithVersion(t *testing.T) { - expectedUsage := "example 3.2.1\nUsage: example" + expectedUsage := "Usage: example" expectedHelp := ` example 3.2.1 @@ -322,7 +322,7 @@ type subcommand struct { } func TestUsageWithVersionAndSubcommand(t *testing.T) { - expectedUsage := "example 3.2.1\nUsage: example []" + expectedUsage := "Usage: example []" expectedHelp := ` example 3.2.1 @@ -353,7 +353,7 @@ Commands: p.WriteUsage(&usage) assert.Equal(t, expectedUsage, strings.TrimSpace(usage.String())) - expectedUsage = "example 3.2.1\nUsage: example cmd [--number NUMBER]" + expectedUsage = "Usage: example cmd [--number NUMBER]" expectedHelp = ` example 3.2.1