anchor.diff:      }
     }
   
  +  List<CompletionSuggestion> _filterSuggestions(
  +      String prefix, List<CompletionSuggestion> suggestions) {
  +    // TODO(brianwilkerson) Replace this with a more realistic filtering algorithm.
  +    return suggestions
  +        .where((suggestion) => suggestion.completion.startsWith(prefix))
  +        .toList();
  +  }
  +
     /// Given some [ResolvedUnitResult] return the first error of high severity
     /// if such an error exists, `null` otherwise.
     static err.AnalysisError getFirstErrorOrNull(
  
positive.code:       } else {
          metrics.nonTypeMemberMrrComputer.addRank(place.rank);
        }
      } else {
        metrics.completionCounter.count('unsuccessful');
  
  
negative.code:   MeanReciprocalRankComputer nonTypeMemberMrrComputer =
        MeanReciprocalRankComputer('non-type member completions');
  
    ArithmeticMeanComputer charsBeforeTop =
        ArithmeticMeanComputer('chars_before_top');
  
    ArithmeticMeanComputer charsBeforeTopFive =
        ArithmeticMeanComputer('chars_before_top_five');
  
    ArithmeticMeanComputer insertionLengthTheoretical =
        ArithmeticMeanComputer('insertion_length_theoretical');
  
    /// A list of the top [maxWorstResults] completion results with the highest
    /// (worst) ranks.
    List<CompletionResult> worstResults = [];
  