anchor.diff:        return true;
   
       return false;
  +  }
  +
  +  void _writeBenchmark(Stopwatch stopwatch, int errorCount) {
  +    String benchmarkOut = argResults['benchmark-out'];
  +    String expectedTime = argResults['benchmark-expected'];
  +
  +    Map<String, dynamic> data = <String, dynamic>{
  +      'time': (stopwatch.elapsedMilliseconds / 1000.0).toStringAsFixed(3),
  +      'issues': errorCount
  +    };
  +
  +    if (expectedTime != null)
  +      data['expected'] = expectedTime;
  +
  +    JsonEncoder encoder = new JsonEncoder.withIndent('  ');
  +    new File(benchmarkOut).writeAsStringSync(encoder.convert(data) + '\n');
  +
  +    printStatus('Analysis benchmark written to $benchmarkOut.');
     }
   }
   
  
positive.code:       String seconds = (analysisTimer.elapsedMilliseconds / 1000.0).toStringAsFixed(2);
        printStatus('$errorsMessage • analyzed $files, $seconds seconds');
  
        firstAnalysis = false;
      }
    }
  
negative.code:     argParser.addFlag('watch', help: 'Run analysis continuously, watching the filesystem for changes.', negatable: false);
      argParser.addOption('dart-sdk', help: 'The path to the Dart SDK.', hide: true);
  
      // These options enable a benchmarking mode where the total time is written at the
      // end of the run to a json file.
      argParser.addOption('benchmark-out',
        defaultsTo: 'analysis.json',
        hide: true,
        help: 'Where to write benchmarking output.'
      );
      argParser.addOption('benchmark-expected',
        hide: true,
        help: 'The time (in seconds) that the benchmark is expected to run.'
      );
  
      usesPubOption();
    }
  
  