Fix HideHelp

main
Dokiy 2 years ago
parent c8147a4845
commit 1a1b9cd563

@ -275,7 +275,9 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) {
cCtx := NewContext(a, set, &Context{Context: ctx}) cCtx := NewContext(a, set, &Context{Context: ctx})
if nerr != nil { if nerr != nil {
_, _ = fmt.Fprintln(a.Writer, nerr) _, _ = fmt.Fprintln(a.Writer, nerr)
_ = ShowAppHelp(cCtx) if !a.HideHelp {
_ = ShowAppHelp(cCtx)
}
return nerr return nerr
} }
cCtx.shellComplete = shellComplete cCtx.shellComplete = shellComplete
@ -296,7 +298,9 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) {
fmt.Fprintf(a.Writer, suggestion) fmt.Fprintf(a.Writer, suggestion)
} }
} }
_ = ShowAppHelp(cCtx) if !a.HideHelp {
_ = ShowAppHelp(cCtx)
}
return err return err
} }

@ -1873,31 +1873,67 @@ func TestApp_Run_CommandSubcommandHelpName(t *testing.T) {
} }
func TestApp_Run_Help(t *testing.T) { func TestApp_Run_Help(t *testing.T) {
var helpArguments = [][]string{{"boom", "--help"}, {"boom", "-h"}, {"boom", "help"}} var tests = []struct {
helpArguments []string
for _, args := range helpArguments { hideHelp bool
t.Run(fmt.Sprintf("checking with arguments %v", args), func(t *testing.T) { wantContains string
wantErr error
}{
{
helpArguments: []string{"boom", "--help"},
hideHelp: false,
wantContains: "boom - make an explosive entrance",
},
{
helpArguments: []string{"boom", "-h"},
hideHelp: false,
wantContains: "boom - make an explosive entrance",
},
{
helpArguments: []string{"boom", "help"},
hideHelp: false,
wantContains: "boom - make an explosive entrance",
},
{
helpArguments: []string{"boom", "--help"},
hideHelp: true,
wantErr: fmt.Errorf("flag: help requested"),
},
{
helpArguments: []string{"boom", "-h"},
hideHelp: true,
wantErr: fmt.Errorf("flag: help requested"),
},
{
helpArguments: []string{"boom", "help"},
hideHelp: true,
wantContains: "boom I say!",
},
}
for _, tt := range tests {
t.Run(fmt.Sprintf("checking with arguments %v", tt.helpArguments), func(t *testing.T) {
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
app := &App{ app := &App{
Name: "boom", Name: "boom",
Usage: "make an explosive entrance", Usage: "make an explosive entrance",
Writer: buf, Writer: buf,
HideHelp: tt.hideHelp,
Action: func(c *Context) error { Action: func(c *Context) error {
buf.WriteString("boom I say!") buf.WriteString("boom I say!")
return nil return nil
}, },
} }
err := app.Run(args) err := app.Run(tt.helpArguments)
if err != nil { if err != nil && err.Error() != tt.wantErr.Error() {
t.Error(err) t.Errorf("want err: %s, did note %s\n", tt.wantErr, err)
} }
output := buf.String() output := buf.String()
if !strings.Contains(output, "boom - make an explosive entrance") { if !strings.Contains(output, tt.wantContains) {
t.Errorf("want help to contain %q, did not: \n%q", "boom - make an explosive entrance", output) t.Errorf("want help to contain %q, did not: \n%q", "boom - make an explosive entrance", output)
} }
}) })

@ -125,7 +125,9 @@ func (c *Command) Run(ctx *Context) (err error) {
fmt.Fprintf(cCtx.App.Writer, suggestion) fmt.Fprintf(cCtx.App.Writer, suggestion)
} }
} }
_ = ShowCommandHelp(cCtx, c.Name) if !c.HideHelp {
_ = ShowCommandHelp(cCtx, c.Name)
}
return err return err
} }
@ -135,7 +137,9 @@ func (c *Command) Run(ctx *Context) (err error) {
cerr := cCtx.checkRequiredFlags(c.Flags) cerr := cCtx.checkRequiredFlags(c.Flags)
if cerr != nil { if cerr != nil {
_ = ShowCommandHelp(cCtx, c.Name) if !c.HideHelp {
_ = ShowCommandHelp(cCtx, c.Name)
}
return cerr return cerr
} }

@ -124,7 +124,7 @@ func ExampleApp_Suggest() {
app := &App{ app := &App{
Name: "greet", Name: "greet",
Suggest: true, Suggest: true,
HideHelp: true, HideHelp: false,
HideHelpCommand: true, HideHelpCommand: true,
CustomAppHelpTemplate: "(this space intentionally left blank)\n", CustomAppHelpTemplate: "(this space intentionally left blank)\n",
Flags: []Flag{ Flags: []Flag{
@ -149,7 +149,6 @@ func ExampleApp_Suggest_command() {
app := &App{ app := &App{
Name: "greet", Name: "greet",
Suggest: true, Suggest: true,
HideHelp: true,
HideHelpCommand: true, HideHelpCommand: true,
CustomAppHelpTemplate: "(this space intentionally left blank)\n", CustomAppHelpTemplate: "(this space intentionally left blank)\n",
Flags: []Flag{ Flags: []Flag{
@ -162,6 +161,7 @@ func ExampleApp_Suggest_command() {
Commands: []*Command{ Commands: []*Command{
{ {
Name: "neighbors", Name: "neighbors",
HideHelp: false,
CustomHelpTemplate: "(this space intentionally left blank)\n", CustomHelpTemplate: "(this space intentionally left blank)\n",
Flags: []Flag{ Flags: []Flag{
&BoolFlag{Name: "smiling"}, &BoolFlag{Name: "smiling"},

Loading…
Cancel
Save