-
Notifications
You must be signed in to change notification settings - Fork 9.8k
[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 | ||
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.) 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? 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 ' | ||
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) { | ||
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