anchor.diff:      }
     }
   
  +  /// Write information about the [lengths] of identifiers to the given [sink].
  +  void _writeIdentifierLengths(StringSink sink, Map<int, int> lengths) {
  +    sink.writeln();
  +    var column = _convertMap('identifier lengths', lengths);
  +    var table = _convertColumnsToRows([column]).toList();
  +    _writeTable(sink, table);
  +  }
  +
     /// Write the given [matrix] to the [sink]. The keys of the outer map will be
     /// the row titles; the keys of the inner map will be the column titles.
     void _writeMatrix(StringSink sink, Map<int, Map<int, int>> matrix) {
  
positive.code:       secondColumn.add('  $percent%: $i');
      }
  
      sink.writeln('');
      sink.writeln('Token stream analysis');
      var table = _convertColumnsToRows([firstColumn, secondColumn]).toList();
      _writeTable(sink, table);
  
negative.code:     var contextMap = byElementKind.putIfAbsent(context, () => {});
      var key = kind.name;
      contextMap[key] = (contextMap[key] ?? 0) + 1;
    }
  
    /// Record that an identifier of the given [length] was found.
    void recordIdentifierOfLength(int length) {
      identifierLengths[length] = (identifierLengths[length] ?? 0) + 1;
    }
  
    /// Record information about the distance between recurring tokens.
  