diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index d01c32668caf65d0dbe3f4ac92852acfd4a0238b..fe233f874bf84d4b23ddfa612c20ffd23ec33d6c 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -549,7 +549,7 @@ export function fuzzyScore(pattern: string, patternLow: string, patternPos: numb const patternStartPos = patternPos; const wordStartPos = wordPos; - // There will be a mach, fill in tables + // There will be a match, fill in tables for (patternPos = patternStartPos + 1; patternPos <= patternLen; patternPos++) { for (wordPos = 1; wordPos <= wordLen; wordPos++) { @@ -573,6 +573,11 @@ export function fuzzyScore(pattern: string, patternLow: string, patternPos: numb } else { score = 5; } + } else if (isSeparatorAtPos(wordLow, wordPos - 1) && (wordPos === 1 || !isSeparatorAtPos(wordLow, wordPos - 2))) { + // hitting a separator: `. <-> foo.bar` + // ^ + score = 5; + } else if (isSeparatorAtPos(wordLow, wordPos - 2) || isWhitespaceAtPos(wordLow, wordPos - 2)) { // post separator: `foo <-> bar_foo` // ^^^ diff --git a/src/vs/base/test/common/filters.test.ts b/src/vs/base/test/common/filters.test.ts index 25cc50d57804338d34cc45f895b6ea54b28c8f94..42b741436610bc857a7d86bacea9d6ebbb249ebd 100644 --- a/src/vs/base/test/common/filters.test.ts +++ b/src/vs/base/test/common/filters.test.ts @@ -366,6 +366,10 @@ suite('Filters', () => { assertMatches('f', ':foo', ':^foo', fuzzyScore); }); + test('Separator only match should not be weak #79558', function () { + assertMatches('.', 'foo.bar', 'foo^.bar', fuzzyScore); + }); + test('Cannot set property \'1\' of undefined, #26511', function () { let word = new Array(123).join('a'); let pattern = new Array(120).join('a');