Fix parsing: re-allow underscore in long names. (#141)
diff --git a/lib/src/parser.dart b/lib/src/parser.dart
index 8dafef9..cb15288 100644
--- a/lib/src/parser.dart
+++ b/lib/src/parser.dart
@@ -237,7 +237,7 @@
var index = current.indexOf('=');
var name = index == -1 ? current.substring(2) : current.substring(2, index);
for (var i = 0; i != name.length; ++i) {
- if (!_isLetterOrDigitOrHyphen(name.codeUnitAt(i))) return false;
+ if (!_isLetterDigitHyphenOrUnderscore(name.codeUnitAt(i))) return false;
}
var value = index == -1 ? null : current.substring(index + 1);
if (value != null && (value.contains('\n') || value.contains('\r'))) {
@@ -338,5 +338,9 @@
// Digits.
(codeUnit >= 48 && codeUnit <= 57);
-bool _isLetterOrDigitOrHyphen(int codeUnit) =>
- _isLetterOrDigit(codeUnit) || codeUnit == 45;
+bool _isLetterDigitHyphenOrUnderscore(int codeUnit) =>
+ _isLetterOrDigit(codeUnit) ||
+ // Hyphen.
+ codeUnit == 45 ||
+ // Underscore.
+ codeUnit == 95;
diff --git a/test/parse_test.dart b/test/parse_test.dart
index 9c87487..9639567 100644
--- a/test/parse_test.dart
+++ b/test/parse_test.dart
@@ -61,6 +61,15 @@
expect(results['verbose'], isTrue);
expect(results['Verbose'], isFalse);
});
+
+ test('match letters, numbers, hyphens and underscores', () {
+ var parser = ArgParser();
+ var allCharacters =
+ 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789';
+ parser.addFlag(allCharacters);
+ var results = parser.parse(['--$allCharacters']);
+ expect(results[allCharacters], isTrue);
+ });
});
group('flags negated with "no-"', () {