anchor.diff:              fraction: 0.01, minValue: 0.001);
         }).toList();
         Score score = Score.multiply(wordScores);
  +      // Ideally this projection should happen earlier (in both lookupTokens and
  +      // scoreDocs), but for the sake of simplicity it is done here.
  +      score = score.project(packages);
   
         // filter results based on exact phrases
         final List<String> phrases =
  
positive.code: 
    @override
    Future<PackageSearchResult> search(SearchQuery query) async {
      // do text matching
      final Score textScore = _searchText(query.parsedQuery.text);
      final Score base = textScore ?? _allPackages();
  
      // The set of packages to filter on.
      final Set<String> packages = base.getKeys();
  
      // filter on package prefix
      if (query.parsedQuery?.packagePrefix != null) {
  
negative.code:       });
      }
  
      // do text matching
      final Score textScore = _searchText(packages, query.parsedQuery.text);
      final Score filtered = textScore ?? _initScore(packages);
  
      List<PackageScore> results;
      switch (query.order ?? SearchOrder.top) {
  