From e537b19c1dedb42e1f42c40e70f8a7bb2dd20aa8 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 19 Dec 2018 16:58:58 +0100 Subject: [PATCH] :lipstick: --- src/vs/base/common/filters.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index 6592e10209d..03306c56029 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -476,6 +476,10 @@ function isWhitespaceAtPos(value: string, index: number): boolean { } } +function isUpperCaseAtPos(pos: number, word: string, wordLow: string): boolean { + return word[pos] !== wordLow[pos]; +} + function isPatternInWord(patternLow: string, patternPos: number, patternLen: number, wordLow: string, wordPos: number, wordLen: number): boolean { while (patternPos < patternLen && wordPos < wordLen) { if (patternLow[patternPos] === wordLow[wordPos]) { @@ -532,18 +536,19 @@ export function fuzzyScore(pattern: string, patternLow: string, patternPos: numb for (wordPos = 1; wordPos <= wordLen; wordPos++) { let score = -1; - let lowWordChar = wordLow[wordPos - 1]; - if (patternLow[patternPos - 1] === lowWordChar) { + if (patternLow[patternPos - 1] === wordLow[wordPos - 1]) { if (wordPos === (patternPos - patternStartPos)) { // common prefix: `foobar <-> foobaz` + // ^^^^^ if (pattern[patternPos - 1] === word[wordPos - 1]) { score = 7; } else { score = 5; } - } else if (lowWordChar !== word[wordPos - 1] && (wordPos === 1 || wordLow[wordPos - 2] === word[wordPos - 2])) { + } else if (isUpperCaseAtPos(wordPos - 1, word, wordLow) && (wordPos === 1 || !isUpperCaseAtPos(wordPos - 2, word, wordLow))) { // hitting upper-case: `foo <-> forOthers` + // ^^ ^ if (pattern[patternPos - 1] === word[wordPos - 1]) { score = 7; } else { @@ -551,6 +556,7 @@ export function fuzzyScore(pattern: string, patternLow: string, patternPos: numb } } else if (isSeparatorAtPos(wordLow, wordPos - 2) || isWhitespaceAtPos(wordLow, wordPos - 2)) { // post separator: `foo <-> bar_foo` + // ^^^ score = 5; } else {