diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bad983b..c51cdf6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,8 @@ dot shorthand. * Require `analyzer: '>=8.2.0 <10.0.0'`. -* Require `sdk: ^3.9.0` +* Require `args: ^2.5.0`. +* Require `sdk: ^3.9.0`. ### Bug fixes diff --git a/lib/src/cli/format_command.dart b/lib/src/cli/format_command.dart index 9e926295..5d511511 100644 --- a/lib/src/cli/format_command.dart +++ b/lib/src/cli/format_command.dart @@ -178,33 +178,20 @@ final class FormatCommand extends Command { Future run() async { var argResults = this.argResults!; - if (argResults['version'] as bool) { + if (argResults.flag('version')) { print(dartStyleVersion); return 0; } - var show = const { - 'all': Show.all, - 'changed': Show.changed, - 'none': Show.none, - }[argResults['show']]!; - - var output = const { - 'write': Output.write, - 'show': Output.show, - 'none': Output.none, - 'json': Output.json, - }[argResults['output']]!; - - var summary = Summary.none; - switch (argResults['summary'] as String) { - case 'line': - summary = Summary.line(); - break; - case 'profile': - summary = Summary.profile(); - break; - } + var show = Show.values.byName(argResults.option('show')!); + + var output = Output.values.byName(argResults.option('output')!); + + var summary = switch (argResults.option('summary')) { + 'line' => Summary.line(), + 'profile' => Summary.profile(), + _ => Summary.none, + }; // If the user is sending code through stdin, default the output to stdout. if (!argResults.wasParsed('output') && argResults.rest.isEmpty) { @@ -224,7 +211,7 @@ final class FormatCommand extends Command { } // Can't use --verbose with anything but --help. - if (argResults['verbose'] as bool && !(argResults['help'] as bool)) { + if (argResults.flag('verbose') && !argResults.flag('help')) { usageException('Can only use --verbose with --help.'); } @@ -234,7 +221,7 @@ final class FormatCommand extends Command { } Version? languageVersion; - if (argResults['language-version'] case String version) { + if (argResults.option('language-version') case String version) { var versionPattern = RegExp(r'^([0-9]+)\.([0-9]+)$'); if (version == 'latest') { languageVersion = DartFormatter.latestLanguageVersion; @@ -255,9 +242,9 @@ final class FormatCommand extends Command { // Allow the old option name if the new one wasn't passed. String? pageWidthString; if (argResults.wasParsed('page-width')) { - pageWidthString = argResults['page-width'] as String; + pageWidthString = argResults.option('page-width')!; } else if (argResults.wasParsed('line-length')) { - pageWidthString = argResults['line-length'] as String; + pageWidthString = argResults.option('line-length')!; } int? pageWidth; @@ -276,7 +263,7 @@ final class FormatCommand extends Command { if (argResults.wasParsed('trailing-commas')) { // We check the values explicitly here instead of using `allowedValues` // from [ArgParser] because this provides a better error message. - trailingCommas = switch (argResults['trailing-commas']) { + trailingCommas = switch (argResults.option('trailing-commas')) { 'automate' => TrailingCommas.automate, 'preserve' => TrailingCommas.preserve, var mode => usageException( @@ -286,10 +273,10 @@ final class FormatCommand extends Command { } var indent = - int.tryParse(argResults['indent'] as String) ?? + int.tryParse(argResults.option('indent')!) ?? usageException( '--indent must be an integer, was ' - '"${argResults['indent']}".', + '"${argResults.option('indent')}".', ); if (indent < 0) { @@ -306,10 +293,10 @@ final class FormatCommand extends Command { usageException(exception.message); } - var followLinks = argResults['follow-links'] as bool; - var setExitIfChanged = argResults['set-exit-if-changed'] as bool; + var followLinks = argResults.flag('follow-links'); + var setExitIfChanged = argResults.flag('set-exit-if-changed'); - var experimentFlags = argResults['enable-experiment'] as List; + var experimentFlags = argResults.multiOption('enable-experiment'); // If stdin isn't connected to a pipe, then the user is not passing // anything to stdin, so let them know they made a mistake. @@ -324,7 +311,7 @@ final class FormatCommand extends Command { if (argResults.wasParsed('stdin-name') && argResults.rest.isNotEmpty) { usageException('Cannot pass --stdin-name when not reading from stdin.'); } - var stdinName = argResults['stdin-name'] as String?; + var stdinName = argResults.option('stdin-name'); var options = FormatterOptions( languageVersion: languageVersion, @@ -352,7 +339,7 @@ final class FormatCommand extends Command { } List? _parseSelection(ArgResults argResults, String optionName) { - var option = argResults[optionName] as String?; + var option = argResults.option(optionName); if (option == null) return null; // Can only preserve a selection when parsing from stdin. @@ -375,7 +362,7 @@ final class FormatCommand extends Command { } on FormatException catch (_) { throw FormatException( '--$optionName must be a colon-separated pair of integers, was ' - '"${argResults[optionName]}".', + '"$option".', ); } } diff --git a/pubspec.yaml b/pubspec.yaml index 180c73dc..1180ab67 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: analyzer: '>=8.2.0 <10.0.0' - args: ^2.0.0 + args: ^2.5.0 collection: ^1.19.0 package_config: ^2.1.0 path: ^1.9.0