MCPcopy Create free account
hub / github.com/docopt/docopt.go / parseArgv

Function parseArgv

docopt.go:196–234  ·  view source on GitHub ↗
(tokens *tokenList, options *patternList, optionsFirst bool)

Source from the content-addressed store, hash-verified

194}
195
196func parseArgv(tokens *tokenList, options *patternList, optionsFirst bool) (patternList, error) {
197 /*
198 Parse command-line argument vector.
199
200 If options_first:
201 argv ::= [ long | shorts ]* [ argument ]* [ '--' [ argument ]* ] ;
202 else:
203 argv ::= [ long | shorts | argument ]* [ '--' [ argument ]* ] ;
204 */
205 parsed := patternList{}
206 for tokens.current() != nil {
207 if tokens.current().eq("--") {
208 for _, v := range tokens.tokens {
209 parsed = append(parsed, newArgument("", v))
210 }
211 return parsed, nil
212 } else if tokens.current().hasPrefix("--") {
213 pl, err := parseLong(tokens, options)
214 if err != nil {
215 return nil, err
216 }
217 parsed = append(parsed, pl...)
218 } else if tokens.current().hasPrefix("-") && !tokens.current().eq("-") {
219 ps, err := parseShorts(tokens, options)
220 if err != nil {
221 return nil, err
222 }
223 parsed = append(parsed, ps...)
224 } else if optionsFirst {
225 for _, v := range tokens.tokens {
226 parsed = append(parsed, newArgument("", v))
227 }
228 return parsed, nil
229 } else {
230 parsed = append(parsed, newArgument("", tokens.move().String()))
231 }
232 }
233 return parsed, nil
234}
235
236func parseOption(optionDescription string) *pattern {
237 optionDescription = strings.TrimSpace(optionDescription)

Callers 2

parseFunction · 0.85
TestParseArgvFunction · 0.85

Calls 8

newArgumentFunction · 0.85
parseLongFunction · 0.85
parseShortsFunction · 0.85
currentMethod · 0.80
hasPrefixMethod · 0.80
moveMethod · 0.80
eqMethod · 0.45
StringMethod · 0.45

Tested by 1

TestParseArgvFunction · 0.68