// Copyright 2014 The Flutter 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 'package:args/args.dart'; import '../artifacts.dart'; import '../base/common.dart'; import '../globals.dart' as globals; import '../runner/flutter_command.dart'; class FormatCommand extends FlutterCommand { FormatCommand({required this.verboseHelp}); @override ArgParser argParser = ArgParser.allowAnything(); final bool verboseHelp; @override final String name = 'format'; @override List<String> get aliases => const <String>['dartfmt']; @override final String description = 'Format one or more Dart files.'; @override String get category => FlutterCommandCategory.project; @override String get invocation => '${runner?.executableName} $name <one or more paths>'; @override Future<FlutterCommandResult> runCommand() async { final String dartBinary = globals.artifacts!.getHostArtifact(HostArtifact.engineDartBinary).path; final List<String> command = <String>[ dartBinary, 'format', ]; final List<String> rest = argResults?.rest ?? <String>[]; if (rest.isEmpty) { globals.printError( 'No files specified to be formatted.' ); command.add('-h'); } else { command.addAll(<String>[ for (String arg in rest) if (arg == '--dry-run' || arg == '-n') '--output=none' else arg, ]); } final int result = await globals.processUtils.stream(command); if (result != 0) { throwToolExit('Formatting failed: $result', exitCode: result); } return FlutterCommandResult.success(); } }