anchor.diff:    /// The last marked line in the buffer.
     int _previousDartOffset = -1;
   
  -  SourceLocation _pendingDartOffset;
  -  SourceLocation _pendingJSLocation;
  +  SourceLocation? _pendingDartOffset;
  +  SourceLocation? _pendingJSLocation;
   
     @override
     void emit(String code) {
       var chars = code.runes.toList();
       var length = chars.length;
  -    for (int i = 0; i < length; i++) {
  +    for (var i = 0; i < length; i++) {
         var c = chars[i];
         if (c == _LF || (c == _CR && (i + 1 == length || chars[i + 1] != _LF))) {
           // Return not followed by line-feed is treated as a new line.
  
positive.code:     var srcInfo = node.sourceInformation;
      if (srcInfo == null || srcInfo == continueSourceMap) return;
  
      SourceLocation dartStart;
      if (srcInfo is SourceLocation) {
        dartStart = srcInfo;
      } else if (srcInfo is NodeSpan) {
  
negative.code:   final SourceLocation end;
    NodeEnd(this.end);
    @override
    String toString() => '#<NodeEnd $end>';
  }
  
  class NodeSpan {
    final SourceLocation start, end;
    NodeSpan(this.start, this.end);
    @override
    String toString() => '#<NodeSpan $start to $end>';
  }
  
  class HoverComment {
  