[flutter_tools] forward flutter format to dart format and deprecate (#57829)

diff --git a/packages/flutter_tools/lib/src/commands/format.dart b/packages/flutter_tools/lib/src/commands/format.dart
index 7d6e4f4..0bdbe44 100644
--- a/packages/flutter_tools/lib/src/commands/format.dart
+++ b/packages/flutter_tools/lib/src/commands/format.dart
@@ -4,36 +4,18 @@
 
 import 'dart:async';
 
+import 'package:args/args.dart';
+
+import '../artifacts.dart';
 import '../base/common.dart';
 import '../base/process.dart';
-import '../dart/sdk.dart';
+import '../globals.dart' as globals;
 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,
-    );
-    argParser.addOption('line-length',
-      abbr: 'l',
-      help: 'Wrap lines longer than this length. Defaults to 80 characters.',
-      defaultsTo: '80',
-    );
-  }
+  @override
+  ArgParser get argParser => _argParser;
+  final ArgParser _argParser = ArgParser.allowAnything();
 
   @override
   final String name = 'format';
@@ -48,34 +30,25 @@
   String get invocation => '${runner.executableName} $name <one or more paths>';
 
   @override
-  Future<FlutterCommandResult> runCommand() async {
-    if (argResults.rest.isEmpty) {
-      throwToolExit(
-        'No files specified to be formatted.\n'
-        '\n'
-        'To format all files in the current directory tree:\n'
-        '${runner.executableName} $name .\n'
-        '\n'
-        '$usage'
-      );
-    }
+  bool get shouldUpdateCache => false;
 
-    final String dartfmt = sdkBinaryName('dartfmt');
+  @override
+  Future<FlutterCommandResult> runCommand() async {
+    final String dartBinary = globals.artifacts.getArtifactPath(Artifact.engineDartBinary);
+    globals.printError(
+      '"flutter format" is deprecated and will be removed in a'
+      ' future release, use "dart format" instead.'
+    );
     final List<String> command = <String>[
-      dartfmt,
-      if (boolArg('dry-run')) '-n',
-      if (boolArg('machine')) '-m',
-      if (argResults['line-length'] != null) '-l ${argResults['line-length']}',
-      if (!boolArg('dry-run') && !boolArg('machine')) '-w',
-      if (boolArg('set-exit-if-changed')) '--set-exit-if-changed',
+      dartBinary,
+      'format',
       ...argResults.rest,
     ];
 
     final int result = await processUtils.stream(command);
     if (result != 0) {
-      throwToolExit('Formatting failed: $result', exitCode: result);
+      throwToolExit('', exitCode: result);
     }
-
     return FlutterCommandResult.success();
   }
 }
diff --git a/packages/flutter_tools/test/commands.shard/permeable/format_test.dart b/packages/flutter_tools/test/commands.shard/permeable/format_test.dart
deleted file mode 100644
index b591275..0000000
--- a/packages/flutter_tools/test/commands.shard/permeable/format_test.dart
+++ /dev/null
@@ -1,104 +0,0 @@
-// 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/command_runner.dart';
-import 'package:flutter_tools/src/base/file_system.dart';
-import 'package:flutter_tools/src/cache.dart';
-import 'package:flutter_tools/src/commands/format.dart';
-import 'package:flutter_tools/src/globals.dart' as globals;
-
-import '../../src/common.dart';
-import '../../src/context.dart';
-
-void main() {
-  group('format', () {
-    Directory tempDir;
-
-    setUp(() {
-      Cache.disableLocking();
-      tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_format_test.');
-    });
-
-    tearDown(() {
-      tryToDelete(tempDir);
-    });
-
-    testUsingContext('a file', () async {
-      final String projectPath = await createProject(tempDir);
-
-      final File srcFile = globals.fs.file(globals.fs.path.join(projectPath, 'lib', 'main.dart'));
-      final String original = srcFile.readAsStringSync();
-      srcFile.writeAsStringSync(original.replaceFirst('main()', 'main(  )'));
-
-      final FormatCommand command = FormatCommand();
-      final CommandRunner<void> runner = createTestCommandRunner(command);
-      await runner.run(<String>['format', srcFile.path]);
-
-      final String formatted = srcFile.readAsStringSync();
-      expect(formatted, original);
-    });
-
-    testUsingContext('dry-run', () async {
-      final String projectPath = await createProject(tempDir);
-
-      final File srcFile = globals.fs.file(
-          globals.fs.path.join(projectPath, 'lib', 'main.dart'));
-      final String nonFormatted = srcFile.readAsStringSync().replaceFirst(
-          'main()', 'main(  )');
-      srcFile.writeAsStringSync(nonFormatted);
-
-      final FormatCommand command = FormatCommand();
-      final CommandRunner<void> runner = createTestCommandRunner(command);
-      await runner.run(<String>['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(tempDir);
-
-      final File srcFile = globals.fs.file(
-          globals.fs.path.join(projectPath, 'lib', 'main.dart'));
-      final String nonFormatted = srcFile.readAsStringSync().replaceFirst(
-          'main()', 'main(  )');
-      srcFile.writeAsStringSync(nonFormatted);
-
-      final FormatCommand command = FormatCommand();
-      final CommandRunner<void> runner = createTestCommandRunner(command);
-
-      expect(runner.run(<String>[
-        'format', '--dry-run', '--set-exit-if-changed', srcFile.path,
-      ]), throwsException);
-
-      final String shouldNotFormatted = srcFile.readAsStringSync();
-      expect(shouldNotFormatted, nonFormatted);
-    });
-
-    testUsingContext('line-length', () async {
-      const int lineLengthShort = 50;
-      const int lineLengthLong = 120;
-      final String projectPath = await createProject(tempDir);
-
-      final File srcFile = globals.fs.file(
-          globals.fs.path.join(projectPath, 'lib', 'main.dart'));
-      final String nonFormatted = srcFile.readAsStringSync();
-      srcFile.writeAsStringSync(
-          nonFormatted.replaceFirst('main()',
-              'main(anArgument1, anArgument2, anArgument3, anArgument4, anArgument5)'));
-
-      final String nonFormattedWithLongLine = srcFile.readAsStringSync();
-      final FormatCommand command = FormatCommand();
-      final CommandRunner<void> runner = createTestCommandRunner(command);
-
-      await runner.run(<String>['format', '--line-length', '$lineLengthLong', srcFile.path]);
-      final String notFormatted = srcFile.readAsStringSync();
-      expect(nonFormattedWithLongLine, notFormatted);
-
-      await runner.run(<String>['format', '--line-length', '$lineLengthShort', srcFile.path]);
-      final String shouldFormatted = srcFile.readAsStringSync();
-      expect(nonFormattedWithLongLine, isNot(shouldFormatted));
-    });
-  });
-}
diff --git a/packages/flutter_tools/test/general.shard/commands/format_test.dart b/packages/flutter_tools/test/general.shard/commands/format_test.dart
new file mode 100644
index 0000000..37e0ad3
--- /dev/null
+++ b/packages/flutter_tools/test/general.shard/commands/format_test.dart
@@ -0,0 +1,38 @@
+// 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/command_runner.dart';
+import 'package:file/memory.dart';
+import 'package:flutter_tools/src/artifacts.dart';
+import 'package:flutter_tools/src/base/file_system.dart';
+import 'package:flutter_tools/src/commands/format.dart';
+import 'package:flutter_tools/src/globals.dart' as globals;
+
+import '../../src/common.dart';
+import '../../src/context.dart';
+
+void main() {
+  testUsingContext('flutter format forward all arguments to dart format and '
+    'prints deprecation warning', () async {
+    final CommandRunner<void> runner = CommandRunner<void>('flutter', 'test')
+      ..addCommand(FormatCommand());
+    await runner.run(<String>['format', 'a', 'b', 'c']);
+
+    expect(testLogger.errorText, contains('"flutter format" is deprecated'));
+    expect((globals.processManager as FakeProcessManager).hasRemainingExpectations, false);
+  }, overrides: <Type, Generator>{
+    FileSystem: () => MemoryFileSystem.test(),
+    ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
+      FakeCommand(
+        command: <String>[
+          globals.artifacts.getArtifactPath(Artifact.engineDartBinary),
+          'format',
+          'a',
+          'b',
+          'c',
+        ],
+      )
+    ])
+  });
+}