Skip to content

Commit 40d14f8

Browse files
committed
fix: Allow the root node to define Help()
1 parent db42183 commit 40d14f8

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

build.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ func build(k *Kong, ast any) (app *Application, err error) {
3232
if len(node.Positional) > 0 && len(node.Children) > 0 {
3333
return nil, fmt.Errorf("can't mix positional arguments and branching arguments on %T", ast)
3434
}
35+
if provider, ok := v.Interface().(HelpProvider); ok {
36+
node.Detail = provider.Help()
37+
}
3538
app.Node = node
3639
app.Node.Flags = append(extraFlags, app.Node.Flags...)
3740
app.Tag = newEmptyTag()

help_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -863,3 +863,43 @@ test: error: missing flags: --flag=STRING
863863
assert.Equal(t, expected, w.String())
864864
assert.Equal(t, 80, exitCode)
865865
}
866+
867+
type rootHelpProvider struct {
868+
Flag string `help:"A flag."`
869+
}
870+
871+
func (rootHelpProvider) Help() string {
872+
return `Detailed help provided by the root HelpProvider.`
873+
}
874+
875+
func TestHelpProviderOnRoot(t *testing.T) {
876+
var cli rootHelpProvider
877+
w := bytes.NewBuffer(nil)
878+
exited := false
879+
app := mustNew(t, &cli,
880+
kong.Name("test-app"),
881+
kong.Description("A test app."),
882+
kong.Writers(w, w),
883+
kong.Exit(func(int) {
884+
exited = true
885+
panic(true)
886+
}),
887+
)
888+
panicsTrue(t, func() {
889+
_, err := app.Parse([]string{"--help"})
890+
assert.NoError(t, err)
891+
})
892+
assert.True(t, exited)
893+
expected := `Usage: test-app [flags]
894+
895+
A test app.
896+
897+
Detailed help provided by the root HelpProvider.
898+
899+
Flags:
900+
-h, --help Show context-sensitive help.
901+
--flag=STRING A flag.
902+
`
903+
t.Log(w.String())
904+
assert.Equal(t, expected, w.String())
905+
}

0 commit comments

Comments
 (0)