Skip to content

Commit f275e4c

Browse files
authored
Merge pull request #15 from tucksaun/fix/empty-command-name
fix: command.Names should not contain empty strings when command has no name
2 parents 38332ef + 214a887 commit f275e4c

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

command.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,12 @@ func (c *Command) FullName() string {
9292

9393
func (c *Command) PreferredName() string {
9494
name := c.FullName()
95-
if len(c.Names()) > 1 {
96-
// first alias is what we prefer
97-
name = c.Names()[1]
98-
}
9995
if name == "" && len(c.Aliases) > 0 {
10096
names := []string{}
10197
for _, a := range c.Aliases {
102-
names = append(names, a.String())
98+
if name := a.String(); name != "" {
99+
names = append(names, a.String())
100+
}
103101
}
104102
return strings.Join(names, ", ")
105103
}
@@ -170,12 +168,19 @@ func (c *Command) Names() []string {
170168
if c.Category != "" {
171169
name = c.Category + ":" + name
172170
}
173-
names := []string{name}
171+
names := []string{}
172+
if name != "" {
173+
names = append(names, name)
174+
}
174175
for _, a := range c.Aliases {
175-
if !a.Hidden {
176+
if a.Hidden {
177+
continue
178+
}
179+
if name := a.String(); name != "" {
176180
names = append(names, a.String())
177181
}
178182
}
183+
179184
return names
180185
}
181186

command_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"errors"
2424
"flag"
2525
"io"
26+
"reflect"
2627
"strings"
2728
"testing"
2829

@@ -146,3 +147,23 @@ func TestFuzzyCommandNames(t *testing.T) {
146147
t.Fatalf("expected no matches, got %v", c)
147148
}
148149
}
150+
151+
func TestCommandWithNoNames(t *testing.T) {
152+
c := Command{
153+
Aliases: []*Alias{
154+
{},
155+
{Name: "foo"},
156+
{Name: "bar"},
157+
},
158+
}
159+
160+
if got, expected := c.Names(), []string{"foo", "bar"}; len(got) != 2 {
161+
t.Fatalf("expected two names, got %v", len(got))
162+
} else if !reflect.DeepEqual(got, expected) {
163+
t.Fatalf("expected %v, got %v", expected, got)
164+
}
165+
166+
if name := c.PreferredName(); name != "foo, bar" {
167+
t.Fatalf(`expected "foo, bar", got "%v"`, name)
168+
}
169+
}

0 commit comments

Comments
 (0)