anchor.diff:  
   Future<bool> _processAnalyzerFile(TaskContext context, List<Path> analyzerFilePaths,
       bool enableTypeChecks, bool verbose) {
  -  final results = new List<_AnalyzerResult>();
  +
  +  int errorsCount = 0;
  +  int passedCount = 0;
  +  int warningCount = 0;
   
     return Future.forEach(analyzerFilePaths, (Path path) {
  -    return _analyzer(context, path, enableTypeChecks)
  -        .then((_AnalyzerResult ar) {
  -          if(verbose) {
  -            context.info(ar.toVerboseString());
  -          } else {
  -            context.info(ar.toString());
  +    return _analyzer(context, path, enableTypeChecks, verbose)
  +        .then((int exitCode) {
  +
  +          String prefix;
  +
  +          switch(exitCode) {
  +            case 0:
  +              prefix = "PASSED";
  +              passedCount++;
  +              break;
  +            case 1:
  +              prefix = "WARNING";
  +              warningCount++;
  +              break;
  +            case 2:
  +              prefix =  "ERROR";
  +              errorsCount++;
  +              break;
  +            default:
  +              prefix = "Unknown exit code $exitCode";
  +              errorsCount++;
  +              break;
             }
  -          results.add(ar);
  +
  +          context.info("$prefix - $path");
           });
  -    }).
  -    then((_) => _processResults(context, results, verbose));
  +    })
  +    .then((_) {
  +      context.info("PASSED: ${passedCount}, WARNING: ${warningCount}, ERROR: ${errorsCount}");
  +      return errorsCount == 0;
  +    });
   }
   
  -Future<_AnalyzerResult> _analyzer(TaskContext context, Path filePath, bool enableTypeChecks) {
  +Future<int> _analyzer(TaskContext context, Path filePath, bool enableTypeChecks,
  +    bool verbose) {
     TempDir tmpDir;
   
     return TempDir.create()
  
positive.code: // TODO(adam): use verbose
  
  part of hop_tasks;
  
  class _AnalyzerResult {
    final ProcessResult processResult;
    final Path path;
  
    _AnalyzerResult(this.path, this.processResult);
  
    String toString() {
      return "${_getPrefix(processResult.exitCode)}: $path";
    }
  
    String toVerboseString() {
      return '''${toString()}
  ${processResult.stdout}
  ${processResult.stderr}''';
    }
  
    static String _getPrefix(int exitCode) {
      switch(exitCode) {
        case 0:
          return "PASSED";
        case 1:
          return "WARNING";
        case 2:
          return "ERROR";
        default:
          return "Unknown exit code $exitCode";
      }
    }
  }
  
  Task createDartAnalyzerTask(Iterable<String> files) {
    return new Task.async((context) {
  
negative.code:         }
        });
  }
  