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

Function parse

docopt.go:70–145  ·  view source on GitHub ↗

parse and return a map of args, output and all errors

(doc string, argv []string, help bool, version string, optionsFirst bool)

Source from the content-addressed store, hash-verified

68
69// parse and return a map of args, output and all errors
70func parse(doc string, argv []string, help bool, version string, optionsFirst bool) (args map[string]interface{}, output string, err error) {
71 if argv == nil && len(os.Args) > 1 {
72 argv = os.Args[1:]
73 }
74
75 usageSections := parseSection("usage:", doc)
76
77 if len(usageSections) == 0 {
78 err = newLanguageError("\"usage:\" (case-insensitive) not found.")
79 return
80 }
81 if len(usageSections) > 1 {
82 err = newLanguageError("More than one \"usage:\" (case-insensitive).")
83 return
84 }
85 usage := usageSections[0]
86
87 options := parseDefaults(doc)
88 formal, err := formalUsage(usage)
89 if err != nil {
90 output = handleError(err, usage)
91 return
92 }
93
94 pat, err := parsePattern(formal, &options)
95 if err != nil {
96 output = handleError(err, usage)
97 return
98 }
99
100 patternArgv, err := parseArgv(newTokenList(argv, errorUser), &options, optionsFirst)
101 if err != nil {
102 output = handleError(err, usage)
103 return
104 }
105 patFlat, err := pat.flat(patternOption)
106 if err != nil {
107 output = handleError(err, usage)
108 return
109 }
110 patternOptions := patFlat.unique()
111
112 patFlat, err = pat.flat(patternOptionSSHORTCUT)
113 if err != nil {
114 output = handleError(err, usage)
115 return
116 }
117 for _, optionsShortcut := range patFlat {
118 docOptions := parseDefaults(doc)
119 optionsShortcut.children = docOptions.unique().diff(patternOptions)
120 }
121
122 if output = extras(help, version, patternArgv, doc); len(output) > 0 {
123 return
124 }
125
126 err = pat.fix()
127 if err != nil {

Callers 1

ParseFunction · 0.85

Calls 15

parseSectionFunction · 0.85
newLanguageErrorFunction · 0.85
parseDefaultsFunction · 0.85
formalUsageFunction · 0.85
handleErrorFunction · 0.85
parsePatternFunction · 0.85
parseArgvFunction · 0.85
newTokenListFunction · 0.85
extrasFunction · 0.85
newUserErrorFunction · 0.85
flatMethod · 0.80
uniqueMethod · 0.80

Tested by

no test coverage detected