From 9cc18722972481cac2e2a89e996a4edc41f72b5e Mon Sep 17 00:00:00 2001 From: Alec Thomas Date: Wed, 6 Jun 2018 19:07:01 +1000 Subject: [PATCH] Fix short flags. --- context.go | 18 +++++++++--------- kong_test.go | 12 ++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/context.go b/context.go index b23cef8..e809b86 100644 --- a/context.go +++ b/context.go @@ -215,7 +215,9 @@ func (c *Context) trace(node *Node) (err error) { // nolint: gocyclo case strings.HasPrefix(token.Value, "-"): c.scan.Pop() // Note: tokens must be pushed in reverse order. - c.scan.PushTyped(token.Value[2:], ShortFlagTailToken) + if tail := token.Value[2:]; tail != "" { + c.scan.PushTyped(tail, ShortFlagTailToken) + } c.scan.PushTyped(token.Value[1:2], ShortFlagToken) default: @@ -226,20 +228,18 @@ func (c *Context) trace(node *Node) (err error) { // nolint: gocyclo case ShortFlagTailToken: c.scan.Pop() // Note: tokens must be pushed in reverse order. - c.scan.PushTyped(token.Value[1:], ShortFlagTailToken) + if tail := token.Value[1:]; tail != "" { + c.scan.PushTyped(tail, ShortFlagTailToken) + } c.scan.PushTyped(token.Value[0:1], ShortFlagToken) case FlagToken: - if err := c.matchFlags(flags, func(f *Flag) bool { - return f.Name == token.Value - }); err != nil { + if err := c.matchFlags(flags, func(f *Flag) bool { return f.Name == token.Value }); err != nil { return err } case ShortFlagToken: - if err := c.matchFlags(flags, func(f *Flag) bool { - return string(f.Name) == token.Value - }); err != nil { + if err := c.matchFlags(flags, func(f *Flag) bool { return string(f.Short) == token.Value }); err != nil { return err } @@ -326,7 +326,7 @@ func (c *Context) matchFlags(flags []*Flag, matcher func(f *Flag) bool) (err err token := c.scan.Peek() for _, flag := range flags { // Found a matching flag. - if flag.Name == token.Value { + if matcher(flag) { c.scan.Pop() value, err := flag.Parse(c.scan) if err != nil { diff --git a/kong_test.go b/kong_test.go index 0c0badf..460bbd0 100644 --- a/kong_test.go +++ b/kong_test.go @@ -344,3 +344,15 @@ func TestHooks(t *testing.T) { }) } } + +func TestShort(t *testing.T) { + var cli struct { + Bool bool `short:"b"` + String string `short:"s"` + } + app := mustNew(t, &cli) + _, err := app.Parse([]string{"-b", "-shello"}) + require.NoError(t, err) + require.True(t, cli.Bool) + require.Equal(t, "hello", cli.String) +}