Better error reporting for short flags.

This commit is contained in:
Alec Thomas
2018-06-20 22:45:34 +10:00
parent 4edc701d63
commit 36506509f1
2 changed files with 8 additions and 9 deletions
+2 -2
View File
@@ -25,8 +25,8 @@ var cli struct {
func main() {
cmd := kong.Parse(&cli, kong.Description("A shell-like example app."), kong.HelpOptions(kong.CompactHelp()))
switch cmd {
case "rm":
fmt.Println(cli.Rm.Paths, cli.Rm.Force)
case "rm <paths>":
fmt.Println(cli.Rm.Paths, cli.Rm.Force, cli.Rm.Recursive)
case "ls":
}
+6 -7
View File
@@ -258,12 +258,12 @@ func (c *Context) trace(node *Node) (err error) { // nolint: gocyclo
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.parseFlag(flags, "--"+token.Value); err != nil {
return err
}
case ShortFlagToken:
if err := c.matchFlags(flags, func(f *Flag) bool { return string(f.Short) == token.Value }); err != nil {
if err := c.parseFlag(flags, "-"+token.Value); err != nil {
return err
}
@@ -404,14 +404,13 @@ func (c *Context) Apply() (string, error) {
return strings.Join(path, " "), nil
}
func (c *Context) matchFlags(flags []*Flag, matcher func(f *Flag) bool) (err error) {
func (c *Context) parseFlag(flags []*Flag, match string) (err error) {
defer catch(&err)
token := c.scan.Peek()
for _, flag := range flags {
// Found a matching flag.
if !matcher(flag) {
if "-"+string(flag.Short) != match && "--"+flag.Name != match {
continue
}
// Found a matching flag.
c.scan.Pop()
err := flag.Parse(c.scan, c.getValue(flag.Value))
if err != nil {
@@ -420,7 +419,7 @@ func (c *Context) matchFlags(flags []*Flag, matcher func(f *Flag) bool) (err err
c.Path = append(c.Path, &Path{Flag: flag})
return nil
}
return fmt.Errorf("unknown flag --%s", token.Value)
return fmt.Errorf("unknown flag %s", match)
}
func checkMissingFlags(flags []*Flag) error {