From 46da8536b6cd46a930b585bdb834ec21bf212153 Mon Sep 17 00:00:00 2001 From: moznion Date: Wed, 25 Jul 2018 08:37:00 +0900 Subject: [PATCH] Add some options to format subcommand (#18360) * Add `--dry-run` option to `flutter format` sub command * Add `--set-exit-if-changed` option to `format` sub command * Add `--machine` option to `format` sub command * Make variable names to be not shorthand: cmd -> command Fix https://github.com/flutter/flutter/pull/18360#discussion_r199656120 --- .../lib/src/commands/format.dart | 41 ++++++++++++++++++- .../test/commands/format_test.dart | 37 +++++++++++++++++ 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/format.dart b/packages/flutter_tools/lib/src/commands/format.dart index 1b93169111..546f267c07 100644 --- a/packages/flutter_tools/lib/src/commands/format.dart +++ b/packages/flutter_tools/lib/src/commands/format.dart @@ -10,6 +10,26 @@ import '../dart/sdk.dart'; import '../runner/flutter_command.dart'; class FormatCommand extends FlutterCommand { + FormatCommand() { + argParser.addFlag('dry-run', + abbr: 'n', + help: 'Show which files would be modified but make no changes.', + defaultsTo: false, + negatable: false, + ); + argParser.addFlag('set-exit-if-changed', + help: 'Return exit code 1 if there are any formatting changes.', + defaultsTo: false, + negatable: false, + ); + argParser.addFlag('machine', + abbr: 'm', + help: 'Produce machine-readable JSON output.', + defaultsTo: false, + negatable: false, + ); + } + @override final String name = 'format'; @@ -36,8 +56,25 @@ class FormatCommand extends FlutterCommand { } final String dartfmt = sdkBinaryName('dartfmt'); - final List cmd = [dartfmt, '-w']..addAll(argResults.rest); - final int result = await runCommandAndStreamOutput(cmd); + final List command = [dartfmt]; + + if (argResults['dry-run']) { + command.add('-n'); + } + if (argResults['machine']) { + command.add('-m'); + } + if (!argResults['dry-run'] && !argResults['machine']) { + command.add('-w'); + } + + if (argResults['set-exit-if-changed']) { + command.add('--set-exit-if-changed'); + } + + command..addAll(argResults.rest); + + final int result = await runCommandAndStreamOutput(command); if (result != 0) throwToolExit('Formatting failed: $result', exitCode: result); } diff --git a/packages/flutter_tools/test/commands/format_test.dart b/packages/flutter_tools/test/commands/format_test.dart index f3afccecb8..e822ad1ee3 100644 --- a/packages/flutter_tools/test/commands/format_test.dart +++ b/packages/flutter_tools/test/commands/format_test.dart @@ -38,5 +38,42 @@ void main() { final String formatted = srcFile.readAsStringSync(); expect(formatted, original); }); + + testUsingContext('dry-run', () async { + final String projectPath = await createProject(temp); + + final File srcFile = fs.file( + fs.path.join(projectPath, 'lib', 'main.dart')); + final String nonFormatted = srcFile.readAsStringSync().replaceFirst( + 'main()', 'main( )'); + srcFile.writeAsStringSync(nonFormatted); + + final FormatCommand command = new FormatCommand(); + final CommandRunner runner = createTestCommandRunner(command); + await runner.run(['format', '--dry-run', srcFile.path]); + + final String shouldNotFormatted = srcFile.readAsStringSync(); + expect(shouldNotFormatted, nonFormatted); + }); + + testUsingContext('dry-run with set-exit-if-changed', () async { + final String projectPath = await createProject(temp); + + final File srcFile = fs.file( + fs.path.join(projectPath, 'lib', 'main.dart')); + final String nonFormatted = srcFile.readAsStringSync().replaceFirst( + 'main()', 'main( )'); + srcFile.writeAsStringSync(nonFormatted); + + final FormatCommand command = new FormatCommand(); + final CommandRunner runner = createTestCommandRunner(command); + + expect(runner.run([ + 'format', '--dry-run', '--set-exit-if-changed', srcFile.path + ]), throwsException); + + final String shouldNotFormatted = srcFile.readAsStringSync(); + expect(shouldNotFormatted, nonFormatted); + }); }); }