Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(335)

Side by Side Diff: README.md

Issue 925003002: pkg/args: Fixed missing comma in text and updated README syntax (Closed) Base URL: https://github.com/dart-lang/args.git@master
Patch Set: version bump Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 Parses raw command-line arguments into a set of options and values. 1 Parses raw command-line arguments into a set of options and values.
2 2
3 This library supports [GNU][] and [POSIX][] style options, and it works 3 This library supports [GNU][] and [POSIX][] style options, and it works
4 in both server-side and client-side apps. 4 in both server-side and client-side apps.
5 5
6 ## Defining options 6 ## Defining options
7 7
8 First create an [ArgParser][]: 8 First create an [ArgParser][]:
9 9
10 var parser = new ArgParser(); 10 var parser = new ArgParser();
11 11
12 Then define a set of options on that parser using [addOption()][addOption] and 12 Then define a set of options on that parser using [addOption()][addOption] and
13 [addFlag()][addFlag]. Here's the minimal way to create an option named "name": 13 [addFlag()][addFlag]. Here's the minimal way to create an option named "name":
14 14
15 parser.addOption('name'); 15 parser.addOption('name');
16 16
17 When an option can only be set or unset (as opposed to taking a string value), 17 When an option can only be set or unset (as opposed to taking a string value),
18 use a flag: 18 use a flag:
19 19
20 parser.addFlag('name'); 20 ```dart
21 parser.addFlag('name');
22 ```
21 23
22 Flag options, by default, accept a 'no-' prefix to negate the option. You can 24 Flag options, by default, accept a 'no-' prefix to negate the option. You can
23 disable the 'no-' prefix using the `negatable` parameter: 25 disable the 'no-' prefix using the `negatable` parameter:
24 26
25 parser.addFlag('name', negatable: false); 27 ```dart
28 parser.addFlag('name', negatable: false);
29 ```
26 30
27 *Note:* From here on out, "option" refers to both regular options and flags. In 31 *Note:* From here on out, "option" refers to both regular options and flags. In
28 cases where the distinction matters, we'll use "non-flag option." 32 cases where the distinction matters, we'll use "non-flag option."
29 33
30 Options can have an optional single-character abbreviation, specified with the 34 Options can have an optional single-character abbreviation, specified with the
31 `abbr` parameter: 35 `abbr` parameter:
32 36
33 parser.addOption('mode', abbr: 'm'); 37 ```dart
34 parser.addFlag('verbose', abbr: 'v'); 38 parser.addOption('mode', abbr: 'm');
39 parser.addFlag('verbose', abbr: 'v');
40 ```
35 41
36 Options can also have a default value, specified with the `defaultsTo` 42 Options can also have a default value, specified with the `defaultsTo`
37 parameter. The default value is used when arguments don't specify the option. 43 parameter. The default value is used when arguments don't specify the option.
38 44
39 parser.addOption('mode', defaultsTo: 'debug'); 45 ```dart
40 parser.addFlag('verbose', defaultsTo: false); 46 parser.addOption('mode', defaultsTo: 'debug');
47 parser.addFlag('verbose', defaultsTo: false);
48 ```
41 49
42 The default value for non-flag options can be any string. For flags, it must 50 The default value for non-flag options can be any string. For flags, it must
43 be a `bool`. 51 be a `bool`.
44 52
45 To validate a non-flag option, you can use the `allowed` parameter to provide an 53 To validate a non-flag option, you can use the `allowed` parameter to provide an
46 allowed set of values. When you do, the parser throws a [FormatException] if the 54 allowed set of values. When you do, the parser throws a [FormatException] if the
47 value for an option is not in the allowed set. Here's an example of specifying 55 value for an option is not in the allowed set. Here's an example of specifying
48 allowed values: 56 allowed values:
49 57
50 parser.addOption('mode', allowed: ['debug', 'release']); 58 ```dart
59 parser.addOption('mode', allowed: ['debug', 'release']);
60 ```
51 61
52 You can use the `callback` parameter to associate a function with an option. 62 You can use the `callback` parameter to associate a function with an option.
53 Later, when parsing occurs, the callback function is invoked with the value of 63 Later, when parsing occurs, the callback function is invoked with the value of
54 the option: 64 the option:
55 65
56 parser.addOption('mode', callback: (mode) => print('Got mode $mode')); 66 ```dart
57 parser.addFlag('verbose', callback: (verbose) { 67 parser.addOption('mode', callback: (mode) => print('Got mode $mode'));
58 if (verbose) print('Verbose'); 68 parser.addFlag('verbose', callback: (verbose) {
59 }); 69 if (verbose) print('Verbose');
70 });
71 ```
60 72
61 The callbacks for all options are called whenever a set of arguments is parsed. 73 The callbacks for all options are called whenever a set of arguments is parsed.
62 If an option isn't provided in the args, its callback is passed the default 74 If an option isn't provided in the args, its callback is passed the default
63 value, or `null` if no default value is set. 75 value, or `null` if no default value is set.
64 76
65 ## Parsing arguments 77 ## Parsing arguments
66 78
67 Once you have an [ArgParser][] set up with some options and flags, you use it by 79 Once you have an [ArgParser][] set up with some options and flags, you use it by
68 calling [ArgParser.parse()][parse] with a set of arguments: 80 calling [ArgParser.parse()][parse] with a set of arguments:
69 81
70 var results = parser.parse(['some', 'command', 'line', 'args']); 82 ```dart
83 var results = parser.parse(['some', 'command', 'line', 'args']);
84 ```
71 85
72 These arguments usually come from the arguments to `main()`. For example: 86 These arguments usually come from the arguments to `main()`. For example:
73 87
74 main(List<String> args) { 88 main(List<String> args) {
75 // ... 89 // ...
76 var results = parser.parse(args); 90 var results = parser.parse(args);
77 } 91 }
78 92
79 However, you can pass in any list of strings. The `parse()` method returns an 93 However, you can pass in any list of strings. The `parse()` method returns an
80 instance of [ArgResults][], a map-like object that contains the values of the 94 instance of [ArgResults][], a map-like object that contains the values of the
81 parsed options. 95 parsed options.
82 96
83 var parser = new ArgParser(); 97 ```dart
84 parser.addOption('mode'); 98 var parser = new ArgParser();
85 parser.addFlag('verbose', defaultsTo: true); 99 parser.addOption('mode');
86 var results = parser.parse(['--mode', 'debug', 'something', 'else']); 100 parser.addFlag('verbose', defaultsTo: true);
101 var results = parser.parse(['--mode', 'debug', 'something', 'else']);
87 102
88 print(results['mode']); // debug 103 print(results['mode']); // debug
89 print(results['verbose']); // true 104 print(results['verbose']); // true
105 ```
90 106
91 By default, the `parse()` method stops as soon as it reaches `--` by itself or 107 By default, the `parse()` method stops as soon as it reaches `--` by itself or
92 anything that the parser doesn't recognize as an option, flag, or option value. 108 anything that the parser doesn't recognize as an option, flag, or option value.
93 If arguments still remain, they go into [ArgResults.rest][rest]. 109 If arguments still remain, they go into [ArgResults.rest][rest].
94 110
95 print(results.rest); // ['something', 'else'] 111 ```dart
112 print(results.rest); // ['something', 'else']
113 ```
96 114
97 To continue to parse options found after non-option arguments, pass 115 To continue to parse options found after non-option arguments, pass
98 `allowTrailingOptions: true` when creating the [ArgParser][]. 116 `allowTrailingOptions: true` when creating the [ArgParser][].
99 117
100 ## Specifying options 118 ## Specifying options
101 119
102 To actually pass in options and flags on the command line, use GNU or POSIX 120 To actually pass in options and flags on the command line, use GNU or POSIX
103 style. Consider this option: 121 style. Consider this option:
104 122
105 parser.addOption('name', abbr: 'n'); 123 ```dart
124 parser.addOption('name', abbr: 'n');
125 ```
106 126
107 You can specify its value on the command line using any of the following: 127 You can specify its value on the command line using any of the following:
108 128
109 --name=somevalue 129 ```
110 --name somevalue 130 --name=somevalue
111 -nsomevalue 131 --name somevalue
112 -n somevalue 132 -nsomevalue
133 -n somevalue
134 ```
113 135
114 Consider this flag: 136 Consider this flag:
115 137
116 parser.addFlag('name', abbr: 'n'); 138 ```dart
139 parser.addFlag('name', abbr: 'n');
140 ```
117 141
118 You can set it to true using one of the following: 142 You can set it to true using one of the following:
119 143
120 --name 144 ```
121 -n 145 --name
146 -n
147 ```
122 148
123 You can set it to false using the following: 149 You can set it to false using the following:
124 150
125 --no-name 151 ```
152 --no-name
153 ```
126 154
127 Multiple flag abbreviations can be collapsed into a single argument. Say you 155 Multiple flag abbreviations can be collapsed into a single argument. Say you
128 define these flags: 156 define these flags:
129 157
130 parser.addFlag('verbose', abbr: 'v') 158 ```dart
131 ..addFlag('french', abbr: 'f') 159 parser.addFlag('verbose', abbr: 'v')
132 ..addFlag('iambic-pentameter', abbr: 'i'); 160 ..addFlag('french', abbr: 'f')
161 ..addFlag('iambic-pentameter', abbr: 'i');
162 ```
133 163
134 You can set all three flags at once: 164 You can set all three flags at once:
135 165
136 -vfi 166 ```
167 -vfi
168 ```
137 169
138 By default, an option has only a single value, with later option values 170 By default, an option has only a single value, with later option values
139 overriding earlier ones; for example: 171 overriding earlier ones; for example:
140 172
141 var parser = new ArgParser(); 173 ```dart
142 parser.addOption('mode'); 174 var parser = new ArgParser();
143 var results = parser.parse(['--mode', 'on', '--mode', 'off']); 175 parser.addOption('mode');
144 print(results['mode']); // prints 'off' 176 var results = parser.parse(['--mode', 'on', '--mode', 'off']);
177 print(results['mode']); // prints 'off'
178 ```
145 179
146 If you need multiple values, set the `allowMultiple` parameter. In that case the 180 If you need multiple values, set the `allowMultiple` parameter. In that case the
147 option can occur multiple times, and the `parse()` method returns a list of 181 option can occur multiple times, and the `parse()` method returns a list of
148 values: 182 values:
149 183
150 var parser = new ArgParser(); 184 ```dart
151 parser.addOption('mode', allowMultiple: true); 185 var parser = new ArgParser();
152 var results = parser.parse(['--mode', 'on', '--mode', 'off']); 186 parser.addOption('mode', allowMultiple: true);
153 print(results['mode']); // prints '[on, off]' 187 var results = parser.parse(['--mode', 'on', '--mode', 'off']);
188 print(results['mode']); // prints '[on, off]'
189 ```
154 190
155 ## Defining commands ## 191 ## Defining commands ##
156 192
157 In addition to *options*, you can also define *commands*. A command is a named 193 In addition to *options*, you can also define *commands*. A command is a named
158 argument that has its own set of options. For example, consider this shell 194 argument that has its own set of options. For example, consider this shell
159 command: 195 command:
160 196
161 $ git commit -a 197 ```
198 $ git commit -a
199 ```
162 200
163 The executable is `git`, the command is `commit`, and the `-a` option is an 201 The executable is `git`, the command is `commit`, and the `-a` option is an
164 option passed to the command. You can add a command using the [addCommand][] 202 option passed to the command. You can add a command using the [addCommand][]
165 method: 203 method:
166 204
167 var parser = new ArgParser(); 205 ```dart
168 var command = parser.addCommand('commit'); 206 var parser = new ArgParser();
207 var command = parser.addCommand('commit');
208 ```
169 209
170 It returns another [ArgParser][], which you can then use to define options 210 It returns another [ArgParser][], which you can then use to define options
171 specific to that command. If you already have an [ArgParser][] for the command's 211 specific to that command. If you already have an [ArgParser][] for the command's
172 options, you can pass it in: 212 options, you can pass it in:
173 213
174 var parser = new ArgParser(); 214 ```dart
175 var command = new ArgParser(); 215 var parser = new ArgParser();
176 parser.addCommand('commit', command); 216 var command = new ArgParser();
217 parser.addCommand('commit', command);
218 ```
177 219
178 The [ArgParser][] for a command can then define options or flags: 220 The [ArgParser][] for a command can then define options or flags:
179 221
180 command.addFlag('all', abbr: 'a'); 222 ```dart
223 command.addFlag('all', abbr: 'a');
224 ```
181 225
182 You can add multiple commands to the same parser so that a user can select one 226 You can add multiple commands to the same parser so that a user can select one
183 from a range of possible commands. When parsing an argument list, you can then 227 from a range of possible commands. When parsing an argument list, you can then
184 determine which command was entered and what options were provided for it. 228 determine which command was entered and what options were provided for it.
185 229
186 var results = parser.parse(['commit', '-a']); 230 ```dart
187 print(results.command.name); // "commit" 231 var results = parser.parse(['commit', '-a']);
188 print(results.command['all']); // true 232 print(results.command.name); // "commit"
233 print(results.command['all']); // true
234 ```
189 235
190 Options for a command must appear after the command in the argument list. For 236 Options for a command must appear after the command in the argument list. For
191 example, given the above parser, `"git -a commit"` is *not* valid. The parser 237 example, given the above parser, `"git -a commit"` is *not* valid. The parser
192 tries to find the right-most command that accepts an option. For example: 238 tries to find the right-most command that accepts an option. For example:
193 239
194 var parser = new ArgParser(); 240 ```dart
195 parser.addFlag('all', abbr: 'a'); 241 var parser = new ArgParser();
196 var command = parser.addCommand('commit'); 242 parser.addFlag('all', abbr: 'a');
197 command.addFlag('all', abbr: 'a'); 243 var command = parser.addCommand('commit');
244 command.addFlag('all', abbr: 'a');
198 245
199 var results = parser.parse(['commit', '-a']); 246 var results = parser.parse(['commit', '-a']);
200 print(results.command['all']); // true 247 print(results.command['all']); // true
248 ```
201 249
202 Here, both the top-level parser and the `"commit"` command can accept a `"-a"` 250 Here, both the top-level parser and the `"commit"` command can accept a `"-a"`
203 (which is probably a bad command line interface, admittedly). In that case, when 251 (which is probably a bad command line interface, admittedly). In that case, when
204 `"-a"` appears after `"commit"`, it is applied to that command. If it appears to 252 `"-a"` appears after `"commit"`, it is applied to that command. If it appears to
205 the left of `"commit"`, it is given to the top-level parser. 253 the left of `"commit"`, it is given to the top-level parser.
206 254
207 ## Dispatching Commands 255 ## Dispatching Commands
208 256
209 If you're writing a command-based application, you can use the [CommandRunner][] 257 If you're writing a command-based application, you can use the [CommandRunner][]
210 and [Command][] classes to help structure it. [CommandRunner][] has built-in 258 and [Command][] classes to help structure it. [CommandRunner][] has built-in
211 support for dispatching to [Command][]s based on command-line arguments, as well 259 support for dispatching to [Command][]s based on command-line arguments, as well
212 as handling `--help` flags and invalid arguments. For example: 260 as handling `--help` flags and invalid arguments. For example:
213 261
214 var runner = new CommandRunner("git", "Distributed version control.") 262 ```dart
215 ..addCommand(new CommitCommand()) 263 var runner = new CommandRunner("git", "Distributed version control.")
216 ..addCommand(new StashCommand()) 264 ..addCommand(new CommitCommand())
217 ..run(['commit', '-a']); // Calls [CommitCommand.run()] 265 ..addCommand(new StashCommand())
266 ..run(['commit', '-a']); // Calls [CommitCommand.run()]
267 ```
218 268
219 Custom commands are defined by extending the [Command][] class. For example: 269 Custom commands are defined by extending the [Command][] class. For example:
220 270
221 class CommitCommand extends Command { 271 ```dart
222 // The [name] and [description] properties must be defined by every 272 class CommitCommand extends Command {
223 // subclass. 273 // The [name] and [description] properties must be defined by every
224 final name = "commit"; 274 // subclass.
225 final description = "Record changes to the repository."; 275 final name = "commit";
276 final description = "Record changes to the repository.";
226 277
227 CommitCommand() { 278 CommitCommand() {
228 // [argParser] is automatically created by the parent class. 279 // [argParser] is automatically created by the parent class.
229 argParser.addFlag('all', abbr: 'a'); 280 argParser.addFlag('all', abbr: 'a');
230 } 281 }
231 282
232 // [run] may also return a Future. 283 // [run] may also return a Future.
233 void run() { 284 void run() {
234 // [options] is set before [run()] is called and contains the options 285 // [options] is set before [run()] is called and contains the options
235 // passed to this command. 286 // passed to this command.
236 print(options['all']); 287 print(options['all']);
237 } 288 }
238 } 289 }
290 ```
239 291
240 Commands can also have subcommands, which are added with [addSubcommand][]. A 292 Commands can also have subcommands, which are added with [addSubcommand][]. A
241 command with subcommands can't run its own code, so [run][] doesn't need to be 293 command with subcommands can't run its own code, so [run][] doesn't need to be
242 implemented. For example: 294 implemented. For example:
243 295
244 class StashCommand extends Command { 296 ```dart
245 final String name = "stash"; 297 class StashCommand extends Command {
246 final String description = "Stash changes in the working directory."; 298 final String name = "stash";
299 final String description = "Stash changes in the working directory.";
247 300
248 StashCommand() { 301 StashCommand() {
249 addSubcommand(new StashSaveCommand()); 302 addSubcommand(new StashSaveCommand());
250 addSubcommand(new StashListCommand()); 303 addSubcommand(new StashListCommand());
251 } 304 }
252 } 305 }
306 ```
253 307
254 [CommandRunner][] automatically adds a `help` command that displays usage 308 [CommandRunner][] automatically adds a `help` command that displays usage
255 information for commands, as well as support for the `--help` flag for all 309 information for commands, as well as support for the `--help` flag for all
256 commands. If it encounters an error parsing the arguments or processing a 310 commands. If it encounters an error parsing the arguments or processing a
257 command, it throws a [UsageError][]; your `main()` method should catch these and 311 command, it throws a [UsageError][]; your `main()` method should catch these and
258 print them appropriately. For example: 312 print them appropriately. For example:
259 313
260 runner.run(arguments).catchError((error) { 314 ```dart
261 if (error is! UsageError) throw error; 315 runner.run(arguments).catchError((error) {
262 print(error); 316 if (error is! UsageError) throw error;
263 exit(64); // Exit code 64 indicates a usage error. 317 print(error);
264 }); 318 exit(64); // Exit code 64 indicates a usage error.
319 });
320 ```
265 321
266 ## Displaying usage 322 ## Displaying usage
267 323
268 You can automatically generate nice help text, suitable for use as the output of 324 You can automatically generate nice help text, suitable for use as the output of
269 `--help`. To display good usage information, you should provide some help text 325 `--help`. To display good usage information, you should provide some help text
270 when you create your options. 326 when you create your options.
271 327
272 To define help text for an entire option, use the `help:` parameter: 328 To define help text for an entire option, use the `help:` parameter:
273 329
274 parser.addOption('mode', help: 'The compiler configuration', 330 ```dart
275 allowed: ['debug', 'release']); 331 parser.addOption('mode', help: 'The compiler configuration',
276 parser.addFlag('verbose', help: 'Show additional diagnostic info'); 332 allowed: ['debug', 'release']);
333 parser.addFlag('verbose', help: 'Show additional diagnostic info');
334 ```
277 335
278 For non-flag options, you can also provide a help string for the parameter: 336 For non-flag options, you can also provide a help string for the parameter:
279 337
280 parser.addOption('out', help: 'The output path', valueHelp: 'path', 338 ```dart
281 allowed: ['debug', 'release']); 339 parser.addOption('out', help: 'The output path', valueHelp: 'path',
340 allowed: ['debug', 'release']);
341 ```
282 342
283 For non-flag options, you can also provide detailed help for each expected value 343 For non-flag options, you can also provide detailed help for each expected value
284 by using the `allowedHelp:` parameter: 344 by using the `allowedHelp:` parameter:
285 345
286 parser.addOption('arch', help: 'The architecture to compile for', 346 ```dart
287 allowedHelp: { 347 parser.addOption('arch', help: 'The architecture to compile for',
288 'ia32': 'Intel x86', 348 allowedHelp: {
289 'arm': 'ARM Holding 32-bit chip' 349 'ia32': 'Intel x86',
290 }); 350 'arm': 'ARM Holding 32-bit chip'
351 });
352 ```
291 353
292 To display the help, use the [getUsage()][getUsage] method: 354 To display the help, use the [getUsage()][getUsage] method:
293 355
294 print(parser.getUsage()); 356 ```dart
357 print(parser.getUsage());
358 ```
295 359
296 The resulting string looks something like this: 360 The resulting string looks something like this:
297 361
298 --mode The compiler configuration 362 ```
299 [debug, release] 363 --mode The compiler configuration
364 [debug, release]
300 365
301 --out=<path> The output path 366 --out=<path> The output path
302 --[no-]verbose Show additional diagnostic info 367 --[no-]verbose Show additional diagnostic info
303 --arch The architecture to compile for 368 --arch The architecture to compile for
304 [arm] ARM Holding 32-bit chip 369 [arm] ARM Holding 32-bit chip
305 [ia32] Intel x86 370 [ia32] Intel x86
371 ```
306 372
307 [posix]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html #tag_12_02 373 [posix]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html #tag_12_02
308 [gnu]: http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfa ces 374 [gnu]: http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfa ces
309 [ArgParser]: http://www.dartdocs.org/documentation/args/latest/index.html#args/a rgs.ArgParser 375 [ArgParser]: http://www.dartdocs.org/documentation/args/latest/index.html#args/a rgs.ArgParser
310 [ArgResults]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ args.ArgResults 376 [ArgResults]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ args.ArgResults
311 [CommandRunner]: http://www.dartdocs.org/documentation/args/latest/index.html#ar gs/args.CommandRunner 377 [CommandRunner]: http://www.dartdocs.org/documentation/args/latest/index.html#ar gs/args.CommandRunner
312 [Command]: http://www.dartdocs.org/documentation/args/latest/index.html#args/arg s.Command 378 [Command]: http://www.dartdocs.org/documentation/args/latest/index.html#args/arg s.Command
313 [UsageError]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ args.UsageError 379 [UsageError]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ args.UsageError
314 [addOption]: http://www.dartdocs.org/documentation/args/latest/index.html#args/a rgs.ArgParser@id_addOption 380 [addOption]: http://www.dartdocs.org/documentation/args/latest/index.html#args/a rgs.ArgParser@id_addOption
315 [addFlag]: http://www.dartdocs.org/documentation/args/latest/index.html#args/arg s.ArgParser@id_addFlag 381 [addFlag]: http://www.dartdocs.org/documentation/args/latest/index.html#args/arg s.ArgParser@id_addFlag
316 [parse]: http://www.dartdocs.org/documentation/args/latest/index.html#args/args. ArgParser@id_parse 382 [parse]: http://www.dartdocs.org/documentation/args/latest/index.html#args/args. ArgParser@id_parse
317 [rest]: http://www.dartdocs.org/documentation/args/latest/index.html#args/args.A rgResults@id_rest 383 [rest]: http://www.dartdocs.org/documentation/args/latest/index.html#args/args.A rgResults@id_rest
318 [addCommand]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ args.ArgParser@id_addCommand 384 [addCommand]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ args.ArgParser@id_addCommand
319 [getUsage]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ar gs.ArgParser@id_getUsage 385 [getUsage]: http://www.dartdocs.org/documentation/args/latest/index.html#args/ar gs.ArgParser@id_getUsage
320 [addSubcommand]: http://www.dartdocs.org/documentation/args/latest/index.html#ar gs/args.Command@id_addSubcommand 386 [addSubcommand]: http://www.dartdocs.org/documentation/args/latest/index.html#ar gs/args.Command@id_addSubcommand
321 [run]: http://www.dartdocs.org/documentation/args/latest/index.html#args/args.Co mmand@id_run 387 [run]: http://www.dartdocs.org/documentation/args/latest/index.html#args/args.Co mmand@id_run
OLDNEW
« no previous file with comments | « no previous file | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698