diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index 49e5de0eb5a852cbf11f810faf54cea50428b714..67b4e38d2922b73e5db5c6e006d92c15a841053e 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -474,9 +474,6 @@ export function fuzzyScore(pattern: string, word: string): [number, number[]] { return undefined; } - // keep track of the maximum score - let maxScore = -1; - for (patternPos = patternStartPos + 1; patternPos <= patternLen; patternPos++) { let lastLowWordChar = ''; @@ -508,9 +505,6 @@ export function fuzzyScore(pattern: string, word: string): [number, number[]] { } _scores[patternPos][wordPos] = score; - if (score > maxScore) { - maxScore = score; - } let diag = _table[patternPos - 1][wordPos - 1] + (score > 1 ? 1 : score); let top = _table[patternPos - 1][wordPos] + -1; @@ -546,10 +540,6 @@ export function fuzzyScore(pattern: string, word: string): [number, number[]] { } } - if (maxScore <= 1) { - return undefined; - } - if (_debug) { console.log(printTable(_table, pattern, patternLen, word, wordLen)); console.log(printTable(_arrows, pattern, patternLen, word, wordLen)); @@ -577,7 +567,9 @@ export function fuzzyScore(pattern: string, word: string): [number, number[]] { function findAllMatches(patternLen: number, patternPos: number, patternStartPos: number, wordPos: number, total: number, matches: number[], bucket: [number, number[]][], lastMatched: boolean): void { - if (bucket.length >= 10) { + if (bucket.length >= 10 || total < -25) { + // stop when having already 10 results, or + // when a potential alignment as already 5 gaps return; } diff --git a/src/vs/base/test/common/filters.test.ts b/src/vs/base/test/common/filters.test.ts index 4753059f57c390a0c038852d9726bf9cc9976996..e555d4a08f5b2a476251f79295220365ff07cbde 100644 --- a/src/vs/base/test/common/filters.test.ts +++ b/src/vs/base/test/common/filters.test.ts @@ -306,6 +306,9 @@ suite('Filters', () => { }); test('fuzzyScore, issue #26423', function () { + + assertMatches('baba', 'abababab', undefined, fuzzyScore); + assertMatches( 'fsfsfs', 'dsafdsafdsafdsafdsafdsafdsafasdfdsa',