Skip to content

Commit 7daffd0

Browse files
committed
Differentiate between name match with underscores and without them. (dart-lang#8596)
1 parent f2ad7a3 commit 7daffd0

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

app/lib/search/mem_index.dart

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -541,15 +541,13 @@ class PackageNameIndex {
541541

542542
PackageNameIndex(this._packageNames) {
543543
_data = _packageNames.map((package) {
544-
final collapsed = _collapseName(package);
545-
return _PkgNameData(collapsed, trigrams(collapsed).toSet());
544+
final lowercased = package.toLowerCase();
545+
final collapsed = _removeUnderscores(lowercased);
546+
return _PkgNameData(lowercased, collapsed, trigrams(collapsed).toSet());
546547
}).toList();
547548
}
548549

549-
/// Maps package name to a reduced form of the name:
550-
/// the same character parts, but without `-`.
551-
String _collapseName(String package) =>
552-
package.replaceAll('_', '').toLowerCase();
550+
String _removeUnderscores(String text) => text.replaceAll('_', '');
553551

554552
/// Search [text] and return the matching packages with scores.
555553
@visibleForTesting
@@ -581,7 +579,8 @@ class PackageNameIndex {
581579
final singularWord = word.length <= 3 || !word.endsWith('s')
582580
? word
583581
: word.substring(0, word.length - 1);
584-
final collapsedWord = _collapseName(singularWord);
582+
final lowercasedWord = singularWord.toLowerCase();
583+
final collapsedWord = _removeUnderscores(lowercasedWord);
585584
final parts =
586585
collapsedWord.length <= 3 ? [collapsedWord] : trigrams(collapsedWord);
587586
for (var i = 0; i < _data.length; i++) {
@@ -590,8 +589,16 @@ class PackageNameIndex {
590589
}
591590

592591
final entry = _data[i];
593-
if (entry.collapsed.contains(collapsedWord)) {
594-
score.setValue(i, 1.0);
592+
if (entry.collapsed.length >= collapsedWord.length &&
593+
entry.collapsed.contains(collapsedWord)) {
594+
// also check for non-collapsed match
595+
if (entry.lowercased.length >= lowercasedWord.length &&
596+
entry.lowercased.contains(lowercasedWord)) {
597+
score.setValue(i, 1.0);
598+
continue;
599+
}
600+
601+
score.setValue(i, 0.99);
595602
continue;
596603
}
597604
var matched = 0;
@@ -622,10 +629,11 @@ class PackageNameIndex {
622629
}
623630

624631
class _PkgNameData {
632+
final String lowercased;
625633
final String collapsed;
626634
final Set<String> trigrams;
627635

628-
_PkgNameData(this.collapsed, this.trigrams);
636+
_PkgNameData(this.lowercased, this.collapsed, this.trigrams);
629637
}
630638

631639
extension on List<IndexedPackageHit> {

app/test/search/package_name_index_test.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,5 +119,12 @@ void main() {
119119
{},
120120
);
121121
});
122+
123+
test('substring: entu', () {
124+
expect(index.search('entu'), {
125+
'fluent': 0.5,
126+
'fluent_ui': 0.99, // not 1.0
127+
});
128+
});
122129
});
123130
}

app/test/search/stack_trace_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ void main() {
3636
'packageHits': [
3737
{
3838
'package': 'stack_trace',
39-
'score': 1.0,
39+
'score': 0.99,
4040
},
4141
],
4242
});

0 commit comments

Comments
 (0)