Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add info about optional flags to usage #416

Merged
merged 2 commits into from
Feb 27, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 26 additions & 26 deletions help_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func TestHelpOptionalArgs(t *testing.T) {
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app [<one> [<two>]]
expected := `Usage: test-app [<one> [<two>]] [optional flags]

Arguments:
[<one>] One optional arg.
Expand Down Expand Up @@ -105,7 +105,7 @@ func TestHelp(t *testing.T) {
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app --required <command>
expected := `Usage: test-app --required <command> [optional flags]

A test app.

Expand All @@ -120,13 +120,13 @@ Flags:
-s, --[no-]sort Is sortable or not.

Commands:
one --required
one --required [optional flags]
A subcommand.

two <three> --required --required-two --required-three
two <three> --required --required-two --required-three [optional flags]
Sub-sub-arg.

two four --required --required-two
two four --required --required-two [optional flags]
Sub-sub-command.

Run "test-app <command> --help" for more information on a command.
Expand All @@ -144,7 +144,7 @@ Run "test-app <command> --help" for more information on a command.
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app two <three> --required --required-two --required-three
expected := `Usage: test-app two <three> --required --required-two --required-three [optional flags]

Sub-sub-arg.

Expand Down Expand Up @@ -215,18 +215,18 @@ func TestFlagsLast(t *testing.T) {
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app --required <command>
expected := `Usage: test-app --required <command> [optional flags]

A test app.

Commands:
one --required
one --required [optional flags]
A subcommand.

two <three> --required --required-two --required-three
two <three> --required --required-two --required-three [optional flags]
Sub-sub-arg.

two four --required --required-two
two four --required --required-two [optional flags]
Sub-sub-command.

Flags:
Expand All @@ -253,7 +253,7 @@ Run "test-app <command> --help" for more information on a command.
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app two <three> --required --required-two --required-three
expected := `Usage: test-app two <three> --required --required-two --required-three [optional flags]

Sub-sub-arg.

Expand Down Expand Up @@ -320,7 +320,7 @@ func TestHelpTree(t *testing.T) {
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app <command>
expected := `Usage: test-app <command> [optional flags]

A test app.

Expand Down Expand Up @@ -353,7 +353,7 @@ Run "test-app <command> --help" for more information on a command.
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app one (un,uno) <command>
expected := `Usage: test-app one (un,uno) <command> [optional flags]

subcommand one

Expand Down Expand Up @@ -414,7 +414,7 @@ func TestHelpCompactNoExpand(t *testing.T) {
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app <command>
expected := `Usage: test-app <command> [optional flags]

A test app.

Expand Down Expand Up @@ -443,7 +443,7 @@ Run "test-app <command> --help" for more information on a command.
assert.NoError(t, err)
})
assert.True(t, exited)
expected := `Usage: test-app one (un,uno) <command>
expected := `Usage: test-app one (un,uno) <command> [optional flags]

subcommand one

Expand Down Expand Up @@ -607,7 +607,7 @@ func TestAutoGroup(t *testing.T) {
}),
)
_, _ = app.Parse([]string{"--help", "two"})
assert.Equal(t, `Usage: test two
assert.Equal(t, `Usage: test two [optional flags]

A non grouped subcommand.

Expand Down Expand Up @@ -691,7 +691,7 @@ func TestHelpGrouping(t *testing.T) {
assert.True(t, exited)
assert.NoError(t, err)
})
expected := `Usage: test-app <command>
expected := `Usage: test-app <command> [optional flags]

A test app.

Expand All @@ -710,26 +710,26 @@ Group B
--grouped-b-string=STRING A string flag grouped in B.

Commands:
two
two [optional flags]
A non grouped subcommand.

Group title taken from the kong.ExplicitGroups option
A group header

one thing <arg>
one thing <arg> [optional flags]
subcommand thing

one <other>
one <other> [optional flags]
subcommand other

three
three [optional flags]
Another subcommand grouped in A.

Group B
one <stuff>
one <stuff> [optional flags]
subcommand stuff

four
four [optional flags]
Another subcommand grouped in B.

Run "test-app <command> --help" for more information on a command.
Expand All @@ -747,7 +747,7 @@ Run "test-app <command> --help" for more information on a command.
assert.NoError(t, err)
assert.True(t, exited)
})
expected := `Usage: test-app two
expected := `Usage: test-app two [optional flags]

A non grouped subcommand.

Expand Down Expand Up @@ -796,7 +796,7 @@ func TestUsageOnError(t *testing.T) {
_, err := p.Parse([]string{})
p.FatalIfErrorf(err)

expected := `Usage: test --flag=STRING
expected := `Usage: test --flag=STRING [optional flags]

Some description.

Expand Down Expand Up @@ -824,7 +824,7 @@ func TestShortUsageOnError(t *testing.T) {
assert.Error(t, err)
p.FatalIfErrorf(err)

expected := `Usage: test --flag=STRING
expected := `Usage: test --flag=STRING [optional flags]
Run "test --help" for more information.

test: error: missing flags: --flag=STRING
Expand Down
2 changes: 1 addition & 1 deletion helpwrap1.19_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func TestCustomWrap(t *testing.T) {

_, err := app.Parse([]string{"--help"})
assert.NoError(t, err)
expected := `Usage: test-app
expected := `Usage: test-app [optional flags]

A test app.

Expand Down
2 changes: 1 addition & 1 deletion kong_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1548,7 +1548,7 @@ func TestPassthroughCmdOnlyArgs(t *testing.T) {
} `cmd:"" passthrough:""`
}
_, err := kong.New(&cli)
assert.EqualError(t, err, "<anonymous struct>.Command: passthrough command command [<args> ...] must not have subcommands or flags")
assert.EqualError(t, err, "<anonymous struct>.Command: passthrough command command [<args> ...] [optional flags] must not have subcommands or flags")
}

func TestPassthroughCmdOnlyStringArgs(t *testing.T) {
Expand Down
10 changes: 10 additions & 0 deletions model.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,16 @@ func (n *Node) Summary() string {
} else if len(n.Children) > 0 {
summary += " <command>"
}
allFlags := n.Flags
if n.Parent != nil {
allFlags = append(allFlags, n.Parent.Flags...)
}
for _, flag := range allFlags {
if !flag.Required {
summary += " [optional flags]"
dploeger marked this conversation as resolved.
Show resolved Hide resolved
break
}
}
return summary
}

Expand Down