MCPcopy
hub / github.com/mislav/hub / Parse

Method Parse

utils/args_parser.go:41–134  ·  view source on GitHub ↗
(args []string)

Source from the content-addressed store, hash-verified

39}
40
41func (p *ArgsParser) Parse(args []string) ([]string, error) {
42 var flagName string
43 var flagValue string
44 var hasFlagValue bool
45 var i int
46 var arg string
47
48 p.HasTerminated = false
49 for _, f := range p.flagMap {
50 f.reset()
51 }
52 if len(p.PositionalIndices) > 0 {
53 p.PositionalIndices = []int{}
54 }
55
56 positional := []string{}
57 var parseError error
58 logError := func(f string, p ...interface{}) {
59 if parseError == nil {
60 parseError = fmt.Errorf(f, p...)
61 }
62 }
63
64 acknowledgeFlag := func() bool {
65 canonicalFlagName := flagName
66 if n, found := p.flagAliases[flagName]; found {
67 canonicalFlagName = n
68 }
69 f := p.flagMap[canonicalFlagName]
70 if f == nil {
71 if len(flagName) == 2 {
72 logError("unknown shorthand flag: '%s' in %s", flagName[1:], arg)
73 } else {
74 logError("unknown flag: '%s'", flagName)
75 }
76 return true
77 }
78 if f.expectsValue {
79 if !hasFlagValue {
80 i++
81 if i < len(args) {
82 flagValue = args[i]
83 } else {
84 logError("no value given for '%s'", flagName)
85 return true
86 }
87 }
88 } else if hasFlagValue && len(flagName) <= 2 {
89 flagValue = ""
90 }
91 f.addValue(flagValue)
92 return f.expectsValue
93 }
94
95 for i = 0; i < len(args); i++ {
96 arg = args[i]
97
98 if p.HasTerminated || len(arg) == 0 || arg == "-" {

Callers 15

TestArgsParserFunction · 0.95
TestArgsParser_BlankArgsFunction · 0.95
TestArgsParser_ValuesFunction · 0.95
TestArgsParser_BoolFunction · 0.95
TestArgsParser_BoolValueFunction · 0.95
TestArgsParser_ShorthandFunction · 0.95
TestArgsParser_DashesFunction · 0.95
TestArgsParser_IntFunction · 0.95

Calls 3

resetMethod · 0.80
addValueMethod · 0.80
ErrorfMethod · 0.65

Tested by 13

TestArgsParserFunction · 0.76
TestArgsParser_BlankArgsFunction · 0.76
TestArgsParser_ValuesFunction · 0.76
TestArgsParser_BoolFunction · 0.76
TestArgsParser_BoolValueFunction · 0.76
TestArgsParser_ShorthandFunction · 0.76
TestArgsParser_DashesFunction · 0.76
TestArgsParser_IntFunction · 0.76