Skip to content

Commit e0915f2

Browse files
committed
Add default help handler
1 parent ac9f5b9 commit e0915f2

File tree

6 files changed

+423
-2
lines changed

6 files changed

+423
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[![Go Reference](https://pkg.go.dev/badge/github.com/coder/serpent.svg)](https://pkg.go.dev/github.com/coder/serpent)
44

5-
`serpent` is a CLI configuration framework based on [cobra](https://github.com/spf13/cobra) and used by [coder/coder](https://github.com/coder/coder).
5+
`serpent` is a Go CLI configuration framework based on [cobra](https://github.com/spf13/cobra) and used by [coder/coder](https://github.com/coder/coder).
66
It's designed for large-scale CLIs with dozens of commands and hundreds
77
of options. If you're building a small, self-contained tool, go with
88
cobra.

cmd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ func (inv *Invocation) run(state *runState) error {
421421

422422
if inv.Command.Handler == nil || errors.Is(state.flagParseErr, pflag.ErrHelp) {
423423
if inv.Command.HelpHandler == nil {
424-
return xerrors.Errorf("no handler or help for command %s", inv.Command.FullName())
424+
return defaultHelpFn()(inv)
425425
}
426426
return inv.Command.HelpHandler(inv)
427427
}

go.mod

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,35 @@ go 1.21.4
55
require (
66
cdr.dev/slog v1.6.2-0.20240126064726-20367d4aede6
77
github.com/coder/coder/v2 v2.8.3
8+
github.com/coder/pretty v0.0.0-20230908205945-e89ba86370e0
89
github.com/hashicorp/go-multierror v1.1.1
910
github.com/mitchellh/go-wordwrap v1.0.1
11+
github.com/muesli/termenv v0.15.2
1012
github.com/pion/udp v0.1.4
1113
github.com/spf13/pflag v1.0.5
1214
github.com/stretchr/testify v1.8.4
15+
golang.org/x/crypto v0.19.0
1316
golang.org/x/exp v0.0.0-20240213143201-ec583247a57a
1417
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028
1518
gopkg.in/yaml.v3 v3.0.1
1619
)
1720

1821
require (
22+
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
1923
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
2024
github.com/hashicorp/errwrap v1.1.0 // indirect
2125
github.com/kr/pretty v0.3.1 // indirect
26+
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
27+
github.com/mattn/go-isatty v0.0.20 // indirect
28+
github.com/mattn/go-runewidth v0.0.15 // indirect
2229
github.com/pion/transport/v2 v2.0.0 // indirect
2330
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
31+
github.com/rivo/uniseg v0.4.4 // indirect
2432
github.com/rogpeppe/go-internal v1.10.0 // indirect
2533
go.opentelemetry.io/otel v1.19.0 // indirect
2634
go.opentelemetry.io/otel/trace v1.19.0 // indirect
2735
golang.org/x/net v0.21.0 // indirect
36+
golang.org/x/sys v0.17.0 // indirect
2837
golang.org/x/term v0.17.0 // indirect
2938
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
3039
)

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ github.com/charmbracelet/lipgloss v0.8.0 h1:IS00fk4XAHcf8uZKc3eHeMUTCxUH6NkaTrdy
1414
github.com/charmbracelet/lipgloss v0.8.0/go.mod h1:p4eYUZZJ/0oXTuCQKFF8mqyKCz0ja6y+7DniDDw5KKU=
1515
github.com/coder/coder/v2 v2.8.3 h1:DpdiCfKhyKd6hwJKOeHf6rdYd2+petdI76qDCl9CsCs=
1616
github.com/coder/coder/v2 v2.8.3/go.mod h1:sH8OtYWiRq/dDYt/65T8tX1IXFOUDT81RtgMrJWf6HU=
17+
github.com/coder/pretty v0.0.0-20230908205945-e89ba86370e0 h1:3A0ES21Ke+FxEM8CXx9n47SZOKOpgSE1bbJzlE4qPVs=
18+
github.com/coder/pretty v0.0.0-20230908205945-e89ba86370e0/go.mod h1:5UuS2Ts+nTToAMeOjNlnHFkPahrtDkmpydBen/3wgZc=
1719
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
1820
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1921
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -62,6 +64,7 @@ github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsK
6264
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
6365
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
6466
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
67+
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
6568
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
6669
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
6770
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
@@ -88,6 +91,8 @@ go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1
8891
go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo=
8992
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
9093
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
94+
golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
95+
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
9196
golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE=
9297
golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
9398
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
@@ -106,6 +111,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
106111
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
107112
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
108113
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
114+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
109115
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
110116
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
111117
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=

0 commit comments

Comments
 (0)