From c3483be48baefb33ee6f1ccec45261a14be760f1 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 26 Feb 2024 12:29:21 -0600 Subject: [PATCH 1/4] chore: add usage to # cli arg failures --- cli/clibase/cmd.go | 15 +++++++++++++-- cli/errors.go | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/cli/clibase/cmd.go b/cli/clibase/cmd.go index 1830d75059460..f04f1df3daa7c 100644 --- a/cli/clibase/cmd.go +++ b/cli/clibase/cmd.go @@ -562,6 +562,16 @@ func Chain(ms ...MiddlewareFunc) MiddlewareFunc { return chain(reversed...) } +func UsageErrorPrefix(next HandlerFunc) HandlerFunc { + return func(i *Invocation) error { + err := next(i) + if err != nil { + return fmt.Errorf("Usage: %s\n%w", i.Command.FullUsage(), err) + } + return nil + } +} + func RequireNArgs(want int) MiddlewareFunc { return RequireRangeArgs(want, want) } @@ -574,7 +584,8 @@ func RequireRangeArgs(start, end int) MiddlewareFunc { panic("start must be >= 0") } return func(next HandlerFunc) HandlerFunc { - return func(i *Invocation) error { + // UsageErrorPrefix will add the command usage before the error message. + return UsageErrorPrefix(func(i *Invocation) error { got := len(i.Args) switch { case start == end && got != start: @@ -614,7 +625,7 @@ func RequireRangeArgs(start, end int) MiddlewareFunc { default: return next(i) } - } + }) } } diff --git a/cli/errors.go b/cli/errors.go index ee12ca036af24..cbcf4f2224199 100644 --- a/cli/errors.go +++ b/cli/errors.go @@ -45,7 +45,8 @@ func (RootCmd) errorExample() *clibase.Cmd { apiError.(*codersdk.Error).Helper = "Have you tried turning it off and on again?" //nolint:errorlint,forcetypeassert - apiErrorNoHelper := apiError.(*codersdk.Error) + cpy := *apiError.(*codersdk.Error) + apiErrorNoHelper := &cpy apiErrorNoHelper.Helper = "" // Some flags @@ -94,7 +95,6 @@ func (RootCmd) errorExample() *clibase.Cmd { ) }, }, - { Use: "validation", Options: clibase.OptionSet{ @@ -114,6 +114,16 @@ func (RootCmd) errorExample() *clibase.Cmd { return nil }, }, + { + Use: "arg-required ", + Middleware: clibase.Chain( + clibase.RequireNArgs(1), + ), + Handler: func(i *clibase.Invocation) error { + _, _ = fmt.Fprint(i.Stdout, "Try running this without an argument\n") + return nil + }, + }, }, } From 43025913e17c6475a3fbe1f5dbc5d6ab4d567d32 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 26 Feb 2024 12:32:23 -0600 Subject: [PATCH 2/4] prefix error --- cli/clibase/cmd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/clibase/cmd.go b/cli/clibase/cmd.go index f04f1df3daa7c..903c098fc41f6 100644 --- a/cli/clibase/cmd.go +++ b/cli/clibase/cmd.go @@ -566,7 +566,7 @@ func UsageErrorPrefix(next HandlerFunc) HandlerFunc { return func(i *Invocation) error { err := next(i) if err != nil { - return fmt.Errorf("Usage: %s\n%w", i.Command.FullUsage(), err) + return fmt.Errorf("Usage: %s\nError: %w", i.Command.FullUsage(), err) } return nil } From 18fbeb7d54928bb6f0da52243ea0ae279baf66ad Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Tue, 27 Feb 2024 09:20:41 -0600 Subject: [PATCH 3/4] UsageErrorPrefix -> ShowUsageOnError --- cli/clibase/cmd.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/clibase/cmd.go b/cli/clibase/cmd.go index 903c098fc41f6..0ff9a8a889447 100644 --- a/cli/clibase/cmd.go +++ b/cli/clibase/cmd.go @@ -562,7 +562,7 @@ func Chain(ms ...MiddlewareFunc) MiddlewareFunc { return chain(reversed...) } -func UsageErrorPrefix(next HandlerFunc) HandlerFunc { +func ShowUsageOnError(next HandlerFunc) HandlerFunc { return func(i *Invocation) error { err := next(i) if err != nil { @@ -584,8 +584,8 @@ func RequireRangeArgs(start, end int) MiddlewareFunc { panic("start must be >= 0") } return func(next HandlerFunc) HandlerFunc { - // UsageErrorPrefix will add the command usage before the error message. - return UsageErrorPrefix(func(i *Invocation) error { + // ShowUsageOnError will add the command usage before the error message. + return ShowUsageOnError(func(i *Invocation) error { got := len(i.Args) switch { case start == end && got != start: From 8c2c07720ae1c139611cdfa7e16957b98977e74f Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Wed, 28 Feb 2024 11:34:40 -0600 Subject: [PATCH 4/4] xerrors over fmt --- cli/clibase/cmd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/clibase/cmd.go b/cli/clibase/cmd.go index 0ff9a8a889447..d1d03b45fd2b7 100644 --- a/cli/clibase/cmd.go +++ b/cli/clibase/cmd.go @@ -566,7 +566,7 @@ func ShowUsageOnError(next HandlerFunc) HandlerFunc { return func(i *Invocation) error { err := next(i) if err != nil { - return fmt.Errorf("Usage: %s\nError: %w", i.Command.FullUsage(), err) + return xerrors.Errorf("Usage: %s\nError: %w", i.Command.FullUsage(), err) } return nil }