diff --git a/CHANGELOG.md b/CHANGELOG.md index 7eac77d..b2f4c3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## 1.5.3 -* Improve performance for large numbers of args. +* Improve arg parsing performance for large numbers of args. +* No longer automatically add a 'help' option to commands that don't validate + their arguments (fix #123). ## 1.5.2 diff --git a/lib/command_runner.dart b/lib/command_runner.dart index c314abe..0fbf697 100644 --- a/lib/command_runner.dart +++ b/lib/command_runner.dart @@ -177,7 +177,7 @@ class CommandRunner { commands = command._subcommands; commandString += ' ${argResults.name}'; - if (argResults['help']) { + if (argResults.options.contains('help') && argResults['help']) { command.printUsage(); return null; } @@ -364,8 +364,10 @@ abstract class Command { List get aliases => const []; Command() { - argParser.addFlag('help', - abbr: 'h', negatable: false, help: 'Print this usage information.'); + if (!argParser.allowsAnything) { + argParser.addFlag('help', + abbr: 'h', negatable: false, help: 'Print this usage information.'); + } } /// Runs this command. diff --git a/test/allow_anything_test.dart b/test/allow_anything_test.dart index efaf093..29038a7 100644 --- a/test/allow_anything_test.dart +++ b/test/allow_anything_test.dart @@ -3,8 +3,11 @@ // BSD-style license that can be found in the LICENSE file. import 'package:args/args.dart'; +import 'package:args/command_runner.dart'; import 'package:test/test.dart'; +import 'test_utils.dart'; + void main() { group('new ArgParser.allowAnything()', () { ArgParser parser; @@ -51,5 +54,13 @@ void main() { expect(results.command.arguments, equals(['--foo', '-abc', '--', 'bar'])); expect(results.command.name, equals('command')); }); + + test('works as a subcommand in a CommandRunner', () async { + var commandRunner = CommandRunner('command', 'Description of command'); + var command = AllowAnythingCommand(); + commandRunner..addCommand(command); + + await commandRunner.run([command.name, '--foo', '--bar', '-b', 'qux']); + }); }); } diff --git a/test/test_utils.dart b/test/test_utils.dart index 0aa566f..8c6373f 100644 --- a/test/test_utils.dart +++ b/test/test_utils.dart @@ -207,6 +207,24 @@ class AsyncCommand extends Command { Future run() => Future.value().then((_) => hasRun = true); } +class AllowAnythingCommand extends Command { + var hasRun = false; + + @override + final name = 'allowAnything'; + + @override + final description = 'A command using allowAnything.'; + + @override + final argParser = ArgParser.allowAnything(); + + @override + void run() { + hasRun = true; + } +} + void throwsIllegalArg(function, {String reason}) { expect(function, throwsArgumentError, reason: reason); }