-
Notifications
You must be signed in to change notification settings - Fork 9.7k
[flutter_plugin_tools] If clang-format does not run, fall back to other executables in PATH
#6853
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,8 @@ | ||
| ## 13.1 | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oops. (Since this isn't in packages/ it doesn't get the metadata checks.)
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does script/tool still need to be versioned like this?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I publish it periodically so that flutter/packages can use the latest updates, so it does need versioning. Once the repo merge is done it won't. |
||
| ## 0.13.2 | ||
|
|
||
| * Falls back to other executables in PATH when `clang-format` does not run. | ||
|
|
||
| ## 0.13.1 | ||
|
|
||
| * Updates `version-check` to recognize Pigeon's platform test structure. | ||
| * Pins `package:git` dependency to `2.0.x` until `dart >=2.18.0` becomes our | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -104,8 +104,8 @@ class FormatCommand extends PackageCommand { | |
| print('These files are not formatted correctly (see diff below):'); | ||
| LineSplitter.split(stdout).map((String line) => ' $line').forEach(print); | ||
|
|
||
| print('\nTo fix run "pub global activate flutter_plugin_tools && ' | ||
| 'pub global run flutter_plugin_tools format" or copy-paste ' | ||
| print('\nTo fix run "dart pub global activate flutter_plugin_tools && ' | ||
| 'dart pub global run flutter_plugin_tools format" or copy-paste ' | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks, I thought I'd fixed this everywhere, but apparently only in CI scripts. |
||
| 'this command into your terminal:'); | ||
|
|
||
| final io.ProcessResult diff = await processRunner.run( | ||
|
|
@@ -128,16 +128,11 @@ class FormatCommand extends PackageCommand { | |
| final Iterable<String> clangFiles = _getPathsWithExtensions( | ||
| files, <String>{'.h', '.m', '.mm', '.cc', '.cpp'}); | ||
| if (clangFiles.isNotEmpty) { | ||
| final String clangFormat = getStringArg('clang-format'); | ||
| if (!await _hasDependency(clangFormat)) { | ||
| printError('Unable to run "clang-format". Make sure that it is in your ' | ||
| 'path, or provide a full path with --clang-format.'); | ||
| throw ToolExit(_exitDependencyMissing); | ||
| } | ||
| final String clangFormat = await _findValidClangFormat(); | ||
|
|
||
| print('Formatting .cc, .cpp, .h, .m, and .mm files...'); | ||
| final int exitCode = await _runBatched( | ||
| getStringArg('clang-format'), <String>['-i', '--style=file'], | ||
| clangFormat, <String>['-i', '--style=file'], | ||
| files: clangFiles); | ||
| if (exitCode != 0) { | ||
| printError( | ||
|
|
@@ -147,6 +142,26 @@ class FormatCommand extends PackageCommand { | |
| } | ||
| } | ||
|
|
||
| Future<String> _findValidClangFormat() async { | ||
| final String clangFormatArg = getStringArg('clang-format'); | ||
| if (await _hasDependency(clangFormatArg)) { | ||
| return clangFormatArg; | ||
| } | ||
|
|
||
| // There is a known issue where "chromium/depot_tools/clang-format" | ||
| // fails with "Problem while looking for clang-format in Chromium source tree". | ||
| // Loop through all "clang-format"s in PATH until a working one is found, | ||
| // for example "/usr/local/bin/clang-format" or a "brew" installed version. | ||
| for (final String clangFormatPath in await _whichAll('clang-format')) { | ||
| if (await _hasDependency(clangFormatPath)) { | ||
| return clangFormatPath; | ||
| } | ||
| } | ||
| printError('Unable to run "clang-format". Make sure that it is in your ' | ||
| 'path, or provide a full path with --clang-format.'); | ||
| throw ToolExit(_exitDependencyMissing); | ||
| } | ||
|
|
||
| Future<void> _formatJava( | ||
| Iterable<String> files, String googleFormatterPath) async { | ||
| final Iterable<String> javaFiles = | ||
|
|
@@ -279,6 +294,26 @@ class FormatCommand extends PackageCommand { | |
| return true; | ||
| } | ||
|
|
||
| /// Returns all instances of [command] executable found on user path. | ||
| Future<List<String>> _whichAll(String command) async { | ||
| try { | ||
| final io.ProcessResult result = | ||
| await processRunner.run('which', <String>['-a', command]); | ||
|
|
||
| if (result.exitCode != 0) { | ||
| return <String>[]; | ||
| } | ||
|
|
||
| final String stdout = result.stdout.trim() as String; | ||
| if (stdout.isEmpty) { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't the |
||
| return <String>[]; | ||
| } | ||
| return LineSplitter.split(stdout).toList(); | ||
| } on io.ProcessException { | ||
| return <String>[]; | ||
| } | ||
| } | ||
|
|
||
| /// Runs [command] on [arguments] on all of the files in [files], batched as | ||
| /// necessary to avoid OS command-line length limits. | ||
| /// | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm