Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 10 additions & 23 deletions lib/src/tasks/analyze/api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,33 +34,20 @@ AnalyzeTask analyze(
}
if (!hints) {
args.add('--no-hints');
} else if (fatalHints) {
args.add('--fatal-hints');
}

args.addAll(_findFilesFromEntryPoints(entryPoints));

var postProcessCompleter = new Completer();
TaskProcess process = new TaskProcess(executable, args);
AnalyzeTask task = new AnalyzeTask(
'$executable ${args.join(' ')}', postProcessCompleter.future);

var matchingLineFuture = task.analyzerOutput
.firstWhere((line) => line.contains('[hint] '), defaultValue: () => null);

var stdoutDone = process.stdout.listen(task._analyzerOutput.add).asFuture();
var stderrDone = process.stderr.listen(task._analyzerOutput.add).asFuture();
Future.wait([stdoutDone, stderrDone])
.then((_) => task._analyzerOutput.close());
AnalyzeTask task =
new AnalyzeTask('$executable ${args.join(' ')}', process.done);

matchingLineFuture.then((matchingLine) {
process.exitCode.then((exitCode) async {
if (exitCode > 0) {
task.successful = false;
} else if (fatalHints) {
task.successful = matchingLine == null;
} else {
task.successful = true;
}
postProcessCompleter.complete();
});
process.stdout.listen(task._analyzerOutput.add);
process.stderr.listen(task._analyzerOutput.addError);
process.exitCode.then((code) {
task.successful = code <= 0;
});

return task;
Expand Down Expand Up @@ -89,7 +76,7 @@ class AnalyzeTask extends Task {
final String analyzerCommand;
final Future done;

StreamController<String> _analyzerOutput = new StreamController.broadcast();
StreamController<String> _analyzerOutput = new StreamController();
Stream<String> get analyzerOutput => _analyzerOutput.stream;
AnalyzeTask(String this.analyzerCommand, Future this.done);
}
3 changes: 2 additions & 1 deletion test/integration/analyze_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ void main() {
test('should report hints as fatal if configured to do so', () async {
Analysis analysis =
await analyzeProject(projectWithHints, fatalHints: true);
expect(analysis.numHints, equals(2));
expect(analysis.numErrors, equals(2));
expect(analysis.numHints, equals(0));
expect(analysis.exitCode, greaterThan(0));
});

Expand Down