From b00f0ff5fdea22847417b1477cd99fb4c800041b Mon Sep 17 00:00:00 2001 From: Jaime Wren Date: Mon, 3 Feb 2020 17:51:36 +0000 Subject: [PATCH] =?UTF-8?q?For=20'dartdev=20format'=20and=20'dartdev=20for?= =?UTF-8?q?mat=20--help',=20return=20the=20output=20from=20dartfmt=20--hel?= =?UTF-8?q?p,=20instead=20of=20the=20default=20output=20from=20FormatComma?= =?UTF-8?q?nd.printUsage().=20This=20is=20follow=20up=20on=C2=A0https://da?= =?UTF-8?q?rt-review.googlesource.com/c/sdk/+/133042?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I497e983a2302fbb010256a4961b6121294a9de82 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134106 Commit-Queue: Jaime Wren Reviewed-by: Devon Carew --- pkg/dartdev/lib/dartdev.dart | 4 ++++ pkg/dartdev/lib/src/commands/format.dart | 24 ++++++++++++++++------ pkg/dartdev/lib/src/core.dart | 9 ++++++++ pkg/dartdev/test/commands/flag_test.dart | 1 + pkg/dartdev/test/commands/format_test.dart | 20 ++++++++++++++---- 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart index e07346431dd..fb708b30a60 100644 --- a/pkg/dartdev/lib/dartdev.dart +++ b/pkg/dartdev/lib/dartdev.dart @@ -31,6 +31,10 @@ class DartdevRunner extends CommandRunner { final Ansi ansi = Ansi(Ansi.terminalSupportsAnsi); log = isVerbose ? Logger.verbose(ansi: ansi) : Logger.standard(ansi: ansi); + // TODO(jwren) override this super call so that the arguments on each + // command aren't enforced. Example: + // dart .../dartdev.dart format -w /path/to/file.dart + // fails becuase '-w' isn't known by the FormatCommand class. return await super.runCommand(results); } } diff --git a/pkg/dartdev/lib/src/commands/format.dart b/pkg/dartdev/lib/src/commands/format.dart index 32f02062411..1188b5f51b7 100644 --- a/pkg/dartdev/lib/src/commands/format.dart +++ b/pkg/dartdev/lib/src/commands/format.dart @@ -9,19 +9,31 @@ import '../sdk.dart'; class FormatCommand extends DartdevCommand { FormatCommand({bool verbose = false}) - : super('format', 'Format one or more Dart files.') { - // TODO(jwren) add all options and flags - } + : super('format', 'Format one or more Dart files.'); @override FutureOr run() async { - // TODO(jwren) implement verbose in dart_style - // dartfmt doesn't have '-v' or '--verbose', so remove from the argument list - var args = List.from(argResults.arguments) + // TODO(jwren) The verbose flag was added to dartfmt in version 1.3.4 with + // https://github.com/dart-lang/dart_style/pull/887, this version is rolled + // into the dart sdk build, we can remove the removal of '-v' and + // '--verbose': + List args = List.from(argResults.arguments) ..remove('-v') ..remove('--verbose'); + + if (args.isEmpty) { + args.add('--help'); + } + var process = await startProcess(sdk.dartfmt, args); routeToStdout(process); return process.exitCode; } + + @override + void printUsage() { + var processResult = runSync(sdk.dartfmt, ['--help']); + String result = processResult.stdout; + print(result); + } } diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart index 8e0e3d85cb2..9640904ec90 100644 --- a/pkg/dartdev/lib/src/core.dart +++ b/pkg/dartdev/lib/src/core.dart @@ -33,6 +33,15 @@ Future startProcess( return Process.start(executable, arguments, workingDirectory: cwd); } +ProcessResult runSync( + String executable, + List arguments, { + String cwd, +}) { + log.trace('$executable ${arguments.join(' ')}'); + return Process.runSync(executable, arguments, workingDirectory: cwd); +} + void routeToStdout( Process process, { bool logToTrace = false, diff --git a/pkg/dartdev/test/commands/flag_test.dart b/pkg/dartdev/test/commands/flag_test.dart index 809f3e98f34..190173b8672 100644 --- a/pkg/dartdev/test/commands/flag_test.dart +++ b/pkg/dartdev/test/commands/flag_test.dart @@ -22,6 +22,7 @@ void help() { var result = p.runSync('--help'); expect(result.exitCode, 0); + expect(result.stderr, isEmpty); expect(result.stdout, contains(DartdevRunner.dartdevDescription)); expect(result.stdout, contains('Usage: dartdev [arguments]')); expect(result.stdout, contains('Global options:')); diff --git a/pkg/dartdev/test/commands/format_test.dart b/pkg/dartdev/test/commands/format_test.dart index ce18d50f966..3f318a97dae 100644 --- a/pkg/dartdev/test/commands/format_test.dart +++ b/pkg/dartdev/test/commands/format_test.dart @@ -15,13 +15,25 @@ void format() { tearDown(() => p?.dispose()); + test('implicit --help', () { + p = project(); + var result = p.runSync('format'); + expect(result.exitCode, 0); + expect(result.stderr, isEmpty); + expect(result.stdout, contains('Idiomatically formats Dart source code.')); + expect(result.stdout, + contains('dartfmt [options...] [files or directories...]')); + expect(result.stdout, contains('dartfmt -w .')); + }); + test('--help', () { p = project(); var result = p.runSync('format', ['--help']); expect(result.exitCode, 0); - expect(result.stdout, contains('Format one or more Dart files.')); - expect(result.stdout, contains('Usage: dartdev format [arguments]')); - expect( - result.stdout, contains('Run "dartdev help" to see global options.')); + expect(result.stderr, isEmpty); + expect(result.stdout, contains('Idiomatically formats Dart source code.')); + expect(result.stdout, + contains('dartfmt [options...] [files or directories...]')); + expect(result.stdout, contains('dartfmt -w .')); }); }