Commit e20ec2be authored by Dan Rubel's avatar Dan Rubel Committed by GitHub

implement flutter format (#5606)

Implement flutter format, fixes https://github.com/flutter/flutter/issues/5338
parent 0fbe3ce9
......@@ -21,6 +21,7 @@ import 'src/commands/daemon.dart';
import 'src/commands/devices.dart';
import 'src/commands/doctor.dart';
import 'src/commands/drive.dart';
import 'src/commands/format.dart';
import 'src/commands/install.dart';
import 'src/commands/listen.dart';
import 'src/commands/logs.dart';
......@@ -66,6 +67,7 @@ Future<Null> main(List<String> args) async {
..addCommand(new DevicesCommand())
..addCommand(new DoctorCommand())
..addCommand(new DriveCommand())
..addCommand(new FormatCommand())
..addCommand(new InstallCommand())
..addCommand(new ListenCommand())
..addCommand(new LogsCommand())
......
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:path/path.dart' as path;
import '../base/process.dart';
import '../cache.dart';
import '../globals.dart';
import '../runner/flutter_command.dart';
class FormatCommand extends FlutterCommand {
@override
final String name = 'format';
@override
List<String> get aliases => const <String>['dartfmt'];
@override
final String description = 'Format one or more dart files.';
@override
bool get requiresProjectRoot => false;
@override
String get invocation => "${runner.executableName} $name <one or more paths>";
@override
Future<int> runInProject() async {
if (argResults.rest.isEmpty) {
printStatus('No files specified to be formatted.');
printStatus('');
printStatus('To format all files in the current directory tree:');
printStatus('${runner.executableName} $name .');
printStatus('');
printStatus(usage);
return 1;
}
String dartfmt = path.join(
Cache.flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', 'dartfmt');
List<String> cmd = <String>[dartfmt, '-w']..addAll(argResults.rest);
return runCommandAndStreamOutput(cmd);
}
}
......@@ -26,6 +26,7 @@ import 'devfs_test.dart' as devfs_test;
import 'device_test.dart' as device_test;
// import 'devices_test.dart' as devices_test;
import 'drive_test.dart' as drive_test;
import 'format_test.dart' as format_test;
import 'install_test.dart' as install_test;
import 'listen_test.dart' as listen_test;
import 'logs_test.dart' as logs_test;
......@@ -59,6 +60,7 @@ void main() {
device_test.main();
// devices_test.main(); // https://github.com/flutter/flutter/issues/4480
drive_test.main();
format_test.main();
install_test.main();
listen_test.main();
logs_test.main();
......
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'dart:io';
import 'package:args/command_runner.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/commands/create.dart';
import 'package:flutter_tools/src/commands/format.dart';
import 'package:path/path.dart' as path;
import 'package:test/test.dart';
import 'src/common.dart';
import 'src/context.dart';
void main() {
group('format', () {
Directory temp;
setUp(() {
Cache.disableLocking();
temp = Directory.systemTemp.createTempSync('flutter_tools');
});
tearDown(() {
temp.deleteSync(recursive: true);
});
Future<Null> createProject() async {
CreateCommand command = new CreateCommand();
CommandRunner runner = createTestCommandRunner(command);
int code = await runner.run(<String>['create', '--no-pub', temp.path]);
expect(code, 0);
}
testUsingContext('a file', () async {
await createProject();
File srcFile = new File(path.join(temp.path, 'lib', 'main.dart'));
String original = srcFile.readAsStringSync();
srcFile.writeAsStringSync(original.replaceFirst('main()', 'main( )'));
FormatCommand command = new FormatCommand();
CommandRunner runner = createTestCommandRunner(command);
int code = await runner.run(<String>['format', srcFile.path]);
expect(code, 0);
String formatted = srcFile.readAsStringSync();
expect(formatted, original);
});
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment