summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hromic <[email protected]>2024-06-30 23:36:55 +0100
committerHugo Hromic <[email protected]>2024-07-06 11:52:47 +0100
commit3673177bf97072ef223db831b659d2d66cc54a58 (patch)
tree842f03d99193caad180c8c4b83c41cfaf9b9e3b4
parent3de7278c4f091f643033f3ebc8fe670c6e7ff7dd (diff)
Move writing program version from usage to help writer
* Writing the version on usage text is unexpected and confusing
-rw-r--r--usage.go27
-rw-r--r--usage_test.go6
2 files changed, 8 insertions, 25 deletions
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 <command> [<args>]"
+ expectedUsage := "Usage: example <command> [<args>]"
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