mirror of
https://github.com/spf13/cobra
synced 2024-11-24 14:47:12 +00:00
Making prefix matching opt in.
This commit is contained in:
parent
c2c23ac0bd
commit
b1e90a7943
3 changed files with 20 additions and 1 deletions
4
cobra.go
4
cobra.go
|
@ -27,6 +27,10 @@ import (
|
||||||
|
|
||||||
var initializers []func()
|
var initializers []func()
|
||||||
|
|
||||||
|
// automatic prefix matching can be a dangerous thing to automatically enable in CLI tools.
|
||||||
|
// Set this to true to enable it
|
||||||
|
var EnablePrefixMatching bool = false
|
||||||
|
|
||||||
func OnInitialize(y ...func()) {
|
func OnInitialize(y ...func()) {
|
||||||
for _, x := range y {
|
for _, x := range y {
|
||||||
initializers = append(initializers, x)
|
initializers = append(initializers, x)
|
||||||
|
|
|
@ -209,6 +209,7 @@ func TestCommandAlias(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPrefixMatching(t *testing.T) {
|
func TestPrefixMatching(t *testing.T) {
|
||||||
|
EnablePrefixMatching = true
|
||||||
noRRSetupTest("ech times one two")
|
noRRSetupTest("ech times one two")
|
||||||
|
|
||||||
if te != nil || tp != nil {
|
if te != nil || tp != nil {
|
||||||
|
@ -220,9 +221,22 @@ func TestPrefixMatching(t *testing.T) {
|
||||||
if strings.Join(tt, " ") != "one two" {
|
if strings.Join(tt, " ") != "one two" {
|
||||||
t.Error("Command didn't parse correctly")
|
t.Error("Command didn't parse correctly")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EnablePrefixMatching = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNoPrefixMatching(t *testing.T) {
|
||||||
|
EnablePrefixMatching = false
|
||||||
|
|
||||||
|
noRRSetupTest("ech times one two")
|
||||||
|
|
||||||
|
if !(tt == nil && te == nil && tp == nil) {
|
||||||
|
t.Error("Wrong command called")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAliasPrefixMatching(t *testing.T) {
|
func TestAliasPrefixMatching(t *testing.T) {
|
||||||
|
EnablePrefixMatching = true
|
||||||
noRRSetupTest("sa times one two")
|
noRRSetupTest("sa times one two")
|
||||||
|
|
||||||
if te != nil || tp != nil {
|
if te != nil || tp != nil {
|
||||||
|
@ -234,6 +248,7 @@ func TestAliasPrefixMatching(t *testing.T) {
|
||||||
if strings.Join(tt, " ") != "one two" {
|
if strings.Join(tt, " ") != "one two" {
|
||||||
t.Error("Command didn't parse correctly")
|
t.Error("Command didn't parse correctly")
|
||||||
}
|
}
|
||||||
|
EnablePrefixMatching = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestChildSameName(t *testing.T) {
|
func TestChildSameName(t *testing.T) {
|
||||||
|
|
|
@ -290,7 +290,7 @@ func (c *Command) Find(arrs []string) (*Command, []string, error) {
|
||||||
for _, cmd := range c.commands {
|
for _, cmd := range c.commands {
|
||||||
if cmd.Name() == argsWOflags[0] || cmd.HasAlias(argsWOflags[0]) { // exact name or alias match
|
if cmd.Name() == argsWOflags[0] || cmd.HasAlias(argsWOflags[0]) { // exact name or alias match
|
||||||
return innerfind(cmd, argsMinusX(args, argsWOflags[0]))
|
return innerfind(cmd, argsMinusX(args, argsWOflags[0]))
|
||||||
} else {
|
} else if EnablePrefixMatching {
|
||||||
if strings.HasPrefix(cmd.Name(), argsWOflags[0]) { // prefix match
|
if strings.HasPrefix(cmd.Name(), argsWOflags[0]) { // prefix match
|
||||||
matches = append(matches, cmd)
|
matches = append(matches, cmd)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue