Merge pull request #1360 from urfave/schollz-master
show only subcommand flags with bash completion (#1186)
This commit is contained in:
commit
372ee0a551
13
help.go
13
help.go
@ -163,19 +163,26 @@ func DefaultCompleteWithFlags(cmd *Command) func(c *Context) {
|
|||||||
return func(c *Context) {
|
return func(c *Context) {
|
||||||
if len(os.Args) > 2 {
|
if len(os.Args) > 2 {
|
||||||
lastArg := os.Args[len(os.Args)-2]
|
lastArg := os.Args[len(os.Args)-2]
|
||||||
|
|
||||||
if strings.HasPrefix(lastArg, "-") {
|
if strings.HasPrefix(lastArg, "-") {
|
||||||
printFlagSuggestions(lastArg, c.App.Flags, c.App.Writer)
|
|
||||||
if cmd != nil {
|
if cmd != nil {
|
||||||
printFlagSuggestions(lastArg, cmd.Flags, c.App.Writer)
|
printFlagSuggestions(lastArg, cmd.Flags, c.App.Writer)
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printFlagSuggestions(lastArg, c.App.Flags, c.App.Writer)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if cmd != nil {
|
if cmd != nil {
|
||||||
printCommandSuggestions(cmd.Subcommands, c.App.Writer)
|
printCommandSuggestions(cmd.Subcommands, c.App.Writer)
|
||||||
} else {
|
return
|
||||||
printCommandSuggestions(c.App.Commands, c.App.Writer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printCommandSuggestions(c.App.Commands, c.App.Writer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
83
help_test.go
83
help_test.go
@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@ -1037,3 +1038,85 @@ func TestHideHelpCommand_WithSubcommands(t *testing.T) {
|
|||||||
t.Errorf("Run returned unexpected error: %v", err)
|
t.Errorf("Run returned unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDefaultCompleteWithFlags(t *testing.T) {
|
||||||
|
origArgv := os.Args
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
os.Args = origArgv
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, tc := range []struct {
|
||||||
|
name string
|
||||||
|
c *Context
|
||||||
|
cmd *Command
|
||||||
|
argv []string
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "empty",
|
||||||
|
c: &Context{App: &App{}},
|
||||||
|
cmd: &Command{},
|
||||||
|
argv: []string{"prog", "cmd"},
|
||||||
|
expected: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "typical-flag-suggestion",
|
||||||
|
c: &Context{App: &App{
|
||||||
|
Name: "cmd",
|
||||||
|
Flags: []Flag{
|
||||||
|
&BoolFlag{Name: "happiness"},
|
||||||
|
&Int64Flag{Name: "everybody-jump-on"},
|
||||||
|
},
|
||||||
|
Commands: []*Command{
|
||||||
|
{Name: "putz"},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
cmd: &Command{
|
||||||
|
Flags: []Flag{
|
||||||
|
&BoolFlag{Name: "excitement"},
|
||||||
|
&StringFlag{Name: "hat-shape"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
argv: []string{"cmd", "--e", "--generate-bash-completion"},
|
||||||
|
expected: "--excitement\n",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "typical-command-suggestion",
|
||||||
|
c: &Context{App: &App{
|
||||||
|
Name: "cmd",
|
||||||
|
Flags: []Flag{
|
||||||
|
&BoolFlag{Name: "happiness"},
|
||||||
|
&Int64Flag{Name: "everybody-jump-on"},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
cmd: &Command{
|
||||||
|
Name: "putz",
|
||||||
|
Subcommands: []*Command{
|
||||||
|
{Name: "futz"},
|
||||||
|
},
|
||||||
|
Flags: []Flag{
|
||||||
|
&BoolFlag{Name: "excitement"},
|
||||||
|
&StringFlag{Name: "hat-shape"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
argv: []string{"cmd", "--generate-bash-completion"},
|
||||||
|
expected: "futz\n",
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
t.Run(tc.name, func(ct *testing.T) {
|
||||||
|
writer := &bytes.Buffer{}
|
||||||
|
tc.c.App.Writer = writer
|
||||||
|
|
||||||
|
os.Args = tc.argv
|
||||||
|
f := DefaultCompleteWithFlags(tc.cmd)
|
||||||
|
f(tc.c)
|
||||||
|
|
||||||
|
written := writer.String()
|
||||||
|
|
||||||
|
if written != tc.expected {
|
||||||
|
ct.Errorf("written help does not match expected %q != %q", written, tc.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user