filesNeedingFormat method
Implementation
Future<List<String>> filesNeedingFormat(String packageDir, bool usesFlutter,
{int? lineLength}) async {
final dirs = await listFocusDirs(packageDir);
if (dirs.isEmpty) {
return const [];
}
final files = <String>{};
for (final dir in dirs) {
final fullPath = p.join(packageDir, dir);
final params = <String>[
'format',
'--output=none',
'--set-exit-if-changed',
];
if (lineLength != null && lineLength > 0) {
params.addAll(<String>['--line-length', lineLength.toString()]);
}
params.add(fullPath);
final result = await runConstrained(
[..._dartSdk.dartCmd, ...params],
environment:
usesFlutter ? _flutterSdk.environment : _dartSdk.environment,
timeout: _dartFormatTimeout,
);
if (result.exitCode == 0) {
continue;
}
final dirPrefix = packageDir.endsWith('/') ? packageDir : '$packageDir/';
final output = result.asJoinedOutput;
final lines = LineSplitter.split(result.asJoinedOutput)
.where((l) => l.startsWith('Changed'))
.map((l) => l.substring(8).replaceAll(dirPrefix, '').trim())
.toList();
// `dart format` exits with code = 1
if (result.exitCode == 1) {
assert(lines.isNotEmpty);
files.addAll(lines);
continue;
}
final errorMsg = LineSplitter.split(output).take(10).join('\n');
final isUserProblem = output.contains(
'Could not format because the source could not be parsed') ||
output.contains('The formatter produced unexpected output.');
if (!isUserProblem) {
throw Exception(
'dart format on $dir/ failed with exit code ${result.exitCode}\n$output',
);
}
throw ToolException(errorMsg, result);
}
return files.toList()..sort();
}