From 4b78474e04295ed52fb01c8526404725615b6d58 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 7 Jun 2017 16:40:25 +0200 Subject: [PATCH] prune when total is going bad, fixes #26423 --- src/vs/base/common/filters.ts | 14 +++----------- src/vs/base/test/common/filters.test.ts | 3 +++ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index 49e5de0eb5a..67b4e38d292 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 4753059f57c..e555d4a08f5 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', -- GitLab