anchor.diff:    await computer.compute(rootPath);
     stopwatch.stop();
     var duration = Duration(milliseconds: stopwatch.elapsedMilliseconds);
  -  print('Metrics computed in $duration');
  +  print('  Metrics computed in $duration');
     computer.printMetrics();
     io.exit(0);
   }
   
   /// An object that records the data used to compute the metrics.
   class RelevanceData {
  +  /// A number identifying the version of this code that produced a given JSON
  +  /// encoded file. The number should be incremented whenever the shape of the
  +  /// JSON file is changed.
     static const String currentVersion = '1';
   
     /// A table mapping match distances to counts.
  -  Map<String, Map<int, int>> byDistance = {};
  +  Map<String, Map<String, int>> byDistance = {};
   
     /// A table mapping element kinds to counts by context.
  -  Map<String, Map<ElementKind, int>> byElementKind = {};
  +  Map<String, Map<String, int>> byElementKind = {};
   
     /// A table mapping AST node classes to counts by context.
     Map<String, Map<String, int>> byNodeClass = {};
   
     /// A table mapping token types to counts by context.
  -  Map<String, Map<TokenType, int>> byTokenType = {};
  +  Map<String, Map<String, int>> byTokenType = {};
   
     /// A table mapping match types to counts.
  -  Map<String, Map<bool, int>> byTypeMatch = {};
  +  Map<String, Map<String, int>> byTypeMatch = {};
   
     /// Initialize a newly created set of relevance data to be empty.
     RelevanceData();
  
positive.code:   /// The [descriptor] is used to describe the kind of distance being measured.
    void recordDistance(String descriptor, int distance) {
      var contextMap = byDistance.putIfAbsent(descriptor, () => {});
      contextMap[distance] = (contextMap[distance] ?? 0) + 1;
    }
  
    /// Record that an element of the given [kind] was found in the given
    /// [context].
    void recordElementKind(String context, ElementKind kind) {
      var contextMap = byElementKind.putIfAbsent(context, () => {});
      contextMap[kind] = (contextMap[kind] ?? 0) + 1;
    }
  
    /// Record that an element of the given [node] was found in the given
  
negative.code:   void printMetrics() {
      print('');
      print('Node classes by context');
      _printContextMap(data.byNodeClass);
      print('');
      print('Element kinds by context');
      _printContextMap(data.byElementKind);
      print('');
      print('Token types by context');
      _printContextMap(data.byTokenType);
      print('');
      print('Argument types match');
      _printContextMap(data.byTypeMatch);
      print('');
      print('Distance from reference to declaration');
      _printContextMap(data.byDistance);
    }
  
    /// Print a [contextMap] containing one kind of metric data, using the
    /// [getName] function to print the second-level keys.
    void _printContextMap(Map<String, Map<String, int>> contextMap) {
      var contexts = contextMap.keys.toList()..sort();
      for (var context in contexts) {
        var kindMap = contextMap[context];
  