OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library args.src.arg_parser; | 5 library args.src.arg_parser; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'arg_results.dart'; | 9 import 'arg_results.dart'; |
10 import 'option.dart'; | 10 import 'option.dart'; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
70 void addFlag(String name, {String abbr, String help, bool defaultsTo: false, | 70 void addFlag(String name, {String abbr, String help, bool defaultsTo: false, |
71 bool negatable: true, void callback(bool value), bool hide: false}) { | 71 bool negatable: true, void callback(bool value), bool hide: false}) { |
72 _addOption(name, abbr, help, null, null, null, defaultsTo, callback, | 72 _addOption(name, abbr, help, null, null, null, defaultsTo, callback, |
73 OptionType.FLAG, negatable: negatable, hide: hide); | 73 OptionType.FLAG, negatable: negatable, hide: hide); |
74 } | 74 } |
75 | 75 |
76 /// Defines a value-taking option. Throws an [ArgumentError] if: | 76 /// Defines a value-taking option. Throws an [ArgumentError] if: |
77 /// | 77 /// |
78 /// * There is already an option with name [name]. | 78 /// * There is already an option with name [name]. |
79 /// * There is already an option using abbreviation [abbr]. | 79 /// * There is already an option using abbreviation [abbr]. |
80 /// * [splitCommas] is passed but [allowMultiple] is `false`. | |
80 void addOption(String name, {String abbr, String help, String valueHelp, | 81 void addOption(String name, {String abbr, String help, String valueHelp, |
81 List<String> allowed, Map<String, String> allowedHelp, String defaultsTo, | 82 List<String> allowed, Map<String, String> allowedHelp, String defaultsTo, |
82 void callback(value), bool allowMultiple: false, bool hide: false}) { | 83 void callback(value), bool allowMultiple: false, bool splitCommas, |
84 bool hide: false}) { | |
85 if (!allowMultiple && splitCommas != null) { | |
86 throw new ArgumentError( | |
87 'splitCommas may not be set if allowMultiple is false.'); | |
Sean Eagan
2015/03/04 22:28:03
Why not? Seems like it would be reasonable that s
nweiz
2015/03/04 22:39:55
Why would you want to forbid the latter? That prov
| |
88 } | |
89 | |
83 _addOption(name, abbr, help, valueHelp, allowed, allowedHelp, defaultsTo, | 90 _addOption(name, abbr, help, valueHelp, allowed, allowedHelp, defaultsTo, |
84 callback, allowMultiple ? OptionType.MULTIPLE : OptionType.SINGLE, | 91 callback, allowMultiple ? OptionType.MULTIPLE : OptionType.SINGLE, |
85 hide: hide); | 92 splitCommas: splitCommas, hide: hide); |
86 } | 93 } |
87 | 94 |
88 void _addOption(String name, String abbr, String help, String valueHelp, | 95 void _addOption(String name, String abbr, String help, String valueHelp, |
89 List<String> allowed, Map<String, String> allowedHelp, defaultsTo, | 96 List<String> allowed, Map<String, String> allowedHelp, defaultsTo, |
90 void callback(value), OptionType type, | 97 void callback(value), OptionType type, |
91 {bool negatable: false, bool hide: false}) { | 98 {bool negatable: false, bool splitCommas, bool hide: false}) { |
92 // Make sure the name isn't in use. | 99 // Make sure the name isn't in use. |
93 if (_options.containsKey(name)) { | 100 if (_options.containsKey(name)) { |
94 throw new ArgumentError('Duplicate option "$name".'); | 101 throw new ArgumentError('Duplicate option "$name".'); |
95 } | 102 } |
96 | 103 |
97 // Make sure the abbreviation isn't too long or in use. | 104 // Make sure the abbreviation isn't too long or in use. |
98 if (abbr != null) { | 105 if (abbr != null) { |
99 var existing = findByAbbreviation(abbr); | 106 var existing = findByAbbreviation(abbr); |
100 if (existing != null) { | 107 if (existing != null) { |
101 throw new ArgumentError( | 108 throw new ArgumentError( |
102 'Abbreviation "$abbr" is already used by "${existing.name}".'); | 109 'Abbreviation "$abbr" is already used by "${existing.name}".'); |
103 } | 110 } |
104 } | 111 } |
105 | 112 |
106 _options[name] = newOption(name, abbr, help, valueHelp, allowed, | 113 _options[name] = newOption(name, abbr, help, valueHelp, allowed, |
107 allowedHelp, defaultsTo, callback, type, | 114 allowedHelp, defaultsTo, callback, type, |
108 negatable: negatable, hide: hide); | 115 negatable: negatable, splitCommas: splitCommas, hide: hide); |
109 } | 116 } |
110 | 117 |
111 /// Parses [args], a list of command-line arguments, matches them against the | 118 /// Parses [args], a list of command-line arguments, matches them against the |
112 /// flags and options defined by this parser, and returns the result. | 119 /// flags and options defined by this parser, and returns the result. |
113 ArgResults parse(List<String> args) => | 120 ArgResults parse(List<String> args) => |
114 new Parser(null, this, args.toList(), null, null).parse(); | 121 new Parser(null, this, args.toList(), null, null).parse(); |
115 | 122 |
116 /// Generates a string displaying usage information for the defined options. | 123 /// Generates a string displaying usage information for the defined options. |
117 /// | 124 /// |
118 /// This is basically the help text shown on the command line. | 125 /// This is basically the help text shown on the command line. |
(...skipping 14 matching lines...) Expand all Loading... | |
133 return options[option].defaultValue; | 140 return options[option].defaultValue; |
134 } | 141 } |
135 | 142 |
136 /// Finds the option whose abbreviation is [abbr], or `null` if no option has | 143 /// Finds the option whose abbreviation is [abbr], or `null` if no option has |
137 /// that abbreviation. | 144 /// that abbreviation. |
138 Option findByAbbreviation(String abbr) { | 145 Option findByAbbreviation(String abbr) { |
139 return options.values.firstWhere((option) => option.abbreviation == abbr, | 146 return options.values.firstWhere((option) => option.abbreviation == abbr, |
140 orElse: () => null); | 147 orElse: () => null); |
141 } | 148 } |
142 } | 149 } |
OLD | NEW |