anchor.diff:    final bool _isSdkIndex;
     final String _urlPrefix;
     final Map<String, PackageDocument> _packages = <String, PackageDocument>{};
  -  final Map<String, String> _normalizedPackageText = <String, String>{};
     final _packageNameIndex = _PackageNameIndex();
     final TokenIndex _nameTokenIndex = TokenIndex(minLength: 2);
     final TokenIndex _descrIndex = TokenIndex(minLength: 3);
  
positive.code:     _nameTokenIndex.remove(package);
      _descrIndex.remove(package);
      _readmeIndex.remove(package);
      _normalizedPackageText.remove(package);
      for (ApiDocPage page in doc.apiDocPages ?? const []) {
        final pageId = _apiDocPageId(doc.package, page);
        _apiSymbolIndex.remove(pageId);
  
negative.code:       if (!aborted && phrases.isNotEmpty) {
          final Map<String, double> matched = <String, double>{};
          for (String package in score.getKeys()) {
            final doc = _packages[package];
            final bool matchedAllPhrases = phrases.every((phrase) =>
                doc.package.contains(phrase) ||
                doc.description.contains(phrase) ||
                doc.readme.contains(phrase));
            if (matchedAllPhrases) {
              matched[package] = score[package];
            }
  