MCPcopy
hub / github.com/spf13/cobra / Traverse

Method Traverse

command.go:821–860  ·  view source on GitHub ↗

Traverse the command tree to find the command, and parse args for each parent.

(args []string)

Source from the content-addressed store, hash-verified

819// Traverse the command tree to find the command, and parse args for
820// each parent.
821func (c *Command) Traverse(args []string) (*Command, []string, error) {
822 flags := []string{}
823 inFlag := false
824
825 for i, arg := range args {
826 switch {
827 // A long flag with a space separated value
828 case strings.HasPrefix(arg, "--") && !strings.Contains(arg, "="):
829 // TODO: this isn't quite right, we should really check ahead for 'true' or 'false'
830 inFlag = !hasNoOptDefVal(arg[2:], c.Flags())
831 flags = append(flags, arg)
832 continue
833 // A short flag with a space separated value
834 case strings.HasPrefix(arg, "-") && !strings.Contains(arg, "=") && len(arg) == 2 && !shortHasNoOptDefVal(arg[1:], c.Flags()):
835 inFlag = true
836 flags = append(flags, arg)
837 continue
838 // The value for a flag
839 case inFlag:
840 inFlag = false
841 flags = append(flags, arg)
842 continue
843 // A flag without a value, or with an `=` separated value
844 case isFlagArg(arg):
845 flags = append(flags, arg)
846 continue
847 }
848
849 cmd := c.findNext(arg)
850 if cmd == nil {
851 return c, args, nil
852 }
853
854 if err := c.ParseFlags(flags); err != nil {
855 return nil, args, err
856 }
857 return cmd.Traverse(args[i+1:])
858 }
859 return c, args, nil
860}
861
862// SuggestionsFor provides suggestions for the typedName.
863func (c *Command) SuggestionsFor(typedName string) []string {

Callers 7

ExecuteCMethod · 0.95
getCompletionsMethod · 0.80

Calls 6

FlagsMethod · 0.95
findNextMethod · 0.95
ParseFlagsMethod · 0.95
hasNoOptDefValFunction · 0.85
shortHasNoOptDefValFunction · 0.85
isFlagArgFunction · 0.85