runAnalyzer method
Future<String>
runAnalyzer(
- String packageDir,
- String dir,
- bool usesFlutter, {
- required InspectOptions inspectOptions,
Implementation
Future<String> runAnalyzer(
String packageDir,
String dir,
bool usesFlutter, {
required InspectOptions inspectOptions,
}) async {
final command =
usesFlutter ? _flutterSdk.dartAnalyzeCmd : _dartSdk.dartAnalyzeCmd;
final analysisOptionsFile =
File(p.join(packageDir, 'analysis_options.yaml'));
String? originalOptions;
if (await analysisOptionsFile.exists()) {
originalOptions = await analysisOptionsFile.readAsString();
}
final rawOptionsContent = await getDefaultAnalysisOptionsYaml();
final customOptionsContent = updatePassthroughOptions(
original: originalOptions, custom: rawOptionsContent);
try {
await analysisOptionsFile.writeAsString(customOptionsContent);
final proc = await runConstrained(
[...command, '--format', 'machine', dir],
environment:
usesFlutter ? _flutterSdk.environment : _dartSdk.environment,
workingDirectory: packageDir,
timeout: const Duration(minutes: 5),
);
if (proc.wasOutputExceeded) {
throw ToolException(
'Running `dart analyze` produced too large output.', proc);
}
final output = proc.asJoinedOutput;
if (proc.wasTimeout) {
throw ToolException('Running `dart analyze` timed out.', proc);
}
if ('\n$output'.contains('\nUnhandled exception:\n')) {
if (output.contains('No dart files found at: .')) {
log.warning('`dart analyze` found no files to analyze.');
} else {
log.severe('Bad input?: $output');
}
var errorMessage =
'\n$output'.split('\nUnhandled exception:\n')[1].split('\n').first;
throw ToolException('dart analyze exception: $errorMessage', proc);
}
return output;
} finally {
if (originalOptions == null) {
await analysisOptionsFile.delete();
} else {
await analysisOptionsFile.writeAsString(originalOptions);
}
}
}