Making prefix matching opt in.

This commit is contained in:
spf13 2014-10-07 16:15:19 -04:00
parent c2c23ac0bd
commit b1e90a7943
3 changed files with 20 additions and 1 deletions

View file

@ -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)

View file

@ -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) {

View file

@ -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)
} }