Fix short flags.
This commit is contained in:
+9
-9
@@ -215,7 +215,9 @@ func (c *Context) trace(node *Node) (err error) { // nolint: gocyclo
|
|||||||
case strings.HasPrefix(token.Value, "-"):
|
case strings.HasPrefix(token.Value, "-"):
|
||||||
c.scan.Pop()
|
c.scan.Pop()
|
||||||
// Note: tokens must be pushed in reverse order.
|
// 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)
|
c.scan.PushTyped(token.Value[1:2], ShortFlagToken)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -226,20 +228,18 @@ func (c *Context) trace(node *Node) (err error) { // nolint: gocyclo
|
|||||||
case ShortFlagTailToken:
|
case ShortFlagTailToken:
|
||||||
c.scan.Pop()
|
c.scan.Pop()
|
||||||
// Note: tokens must be pushed in reverse order.
|
// 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)
|
c.scan.PushTyped(token.Value[0:1], ShortFlagToken)
|
||||||
|
|
||||||
case FlagToken:
|
case FlagToken:
|
||||||
if err := c.matchFlags(flags, func(f *Flag) bool {
|
if err := c.matchFlags(flags, func(f *Flag) bool { return f.Name == token.Value }); err != nil {
|
||||||
return f.Name == token.Value
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
case ShortFlagToken:
|
case ShortFlagToken:
|
||||||
if err := c.matchFlags(flags, func(f *Flag) bool {
|
if err := c.matchFlags(flags, func(f *Flag) bool { return string(f.Short) == token.Value }); err != nil {
|
||||||
return string(f.Name) == token.Value
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +326,7 @@ func (c *Context) matchFlags(flags []*Flag, matcher func(f *Flag) bool) (err err
|
|||||||
token := c.scan.Peek()
|
token := c.scan.Peek()
|
||||||
for _, flag := range flags {
|
for _, flag := range flags {
|
||||||
// Found a matching flag.
|
// Found a matching flag.
|
||||||
if flag.Name == token.Value {
|
if matcher(flag) {
|
||||||
c.scan.Pop()
|
c.scan.Pop()
|
||||||
value, err := flag.Parse(c.scan)
|
value, err := flag.Parse(c.scan)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user