提交 7131a142 编写于 作者: J Johannes Rieken 提交者: Dirk Baeumer

Revert "allow offsets for fuzzyScore, towards #26096"

This reverts commit 093eac50.
上级 a0a1b9e0
......@@ -450,7 +450,7 @@ _seps[':'] = true;
const enum Arrow { Top = 0b1, Diag = 0b10, Left = 0b100 }
export function fuzzyScore(pattern: string, word: string, patternOffset: number = 0, wordOffset: number = 0): [number, number[]] {
export function fuzzyScore(pattern: string, word: string): [number, number[]] {
const patternLen = pattern.length > 100 ? 100 : pattern.length;
const wordLen = word.length > 100 ? 100 : word.length;
......@@ -465,16 +465,16 @@ export function fuzzyScore(pattern: string, word: string, patternOffset: number
const lowPattern = pattern.toLowerCase();
const lowWord = word.toLowerCase();
let patternPos = patternOffset;
let wordPos = wordOffset;
let i = 0;
let j = 0;
while (patternPos < patternLen && wordPos < wordLen) {
if (lowPattern[patternPos] === lowWord[wordPos]) {
patternPos += 1;
while (i < patternLen && j < wordLen) {
if (lowPattern[i] === lowWord[j]) {
i += 1;
}
wordPos += 1;
j += 1;
}
if (patternPos !== patternLen) {
if (i !== patternLen) {
// no simple matches found -> return early
return undefined;
}
......@@ -482,24 +482,24 @@ export function fuzzyScore(pattern: string, word: string, patternOffset: number
// keep track of the maximum score
let maxScore = -1;
for (patternPos = patternOffset + 1; patternPos <= patternLen; patternPos++) {
for (i = 1; i <= patternLen; i++) {
let lastLowWordChar = '';
for (wordPos = wordOffset + 1; wordPos <= wordLen; wordPos++) {
for (j = 1; j <= wordLen; j++) {
let score = -1;
let lowWordChar = lowWord[wordPos - 1];
if (lowPattern[patternPos - 1] === lowWordChar) {
let lowWordChar = lowWord[j - 1];
if (lowPattern[i - 1] === lowWordChar) {
if (wordPos === wordOffset + 1) {
if (pattern[patternPos - 1] === word[wordPos - 1]) {
if (j === 1) {
if (pattern[i - 1] === word[j - 1]) {
score = 7;
} else {
score = 5;
}
} else if (lowWordChar !== word[wordPos - 1]) {
if (pattern[patternPos - 1] === word[wordPos - 1]) {
} else if (lowWordChar !== word[j - 1]) {
if (pattern[i - 1] === word[j - 1]) {
score = 7;
} else {
score = 5;
......@@ -512,38 +512,38 @@ export function fuzzyScore(pattern: string, word: string, patternOffset: number
}
}
_scores[patternPos][wordPos] = score;
_scores[i][j] = score;
if (score > maxScore) {
maxScore = score;
}
let diag = _table[patternPos - 1][wordPos - 1] + (score > 1 ? 1 : score);
let top = _table[patternPos - 1][wordPos] + -1;
let left = _table[patternPos][wordPos - 1] + -1;
let diag = _table[i - 1][j - 1] + (score > 1 ? 1 : score);
let top = _table[i - 1][j] + -1;
let left = _table[i][j - 1] + -1;
if (left >= top) {
// left or diag
if (left > diag) {
_table[patternPos][wordPos] = left;
_arrows[patternPos][wordPos] = Arrow.Left;
_table[i][j] = left;
_arrows[i][j] = Arrow.Left;
} else if (left === diag) {
_table[patternPos][wordPos] = left;
_arrows[patternPos][wordPos] = Arrow.Left | Arrow.Diag;
_table[i][j] = left;
_arrows[i][j] = Arrow.Left | Arrow.Diag;
} else {
_table[patternPos][wordPos] = diag;
_arrows[patternPos][wordPos] = Arrow.Diag;
_table[i][j] = diag;
_arrows[i][j] = Arrow.Diag;
}
} else {
// top or diag
if (top > diag) {
_table[patternPos][wordPos] = top;
_arrows[patternPos][wordPos] = Arrow.Top;
_table[i][j] = top;
_arrows[i][j] = Arrow.Top;
} else if (top === diag) {
_table[patternPos][wordPos] = top;
_arrows[patternPos][wordPos] = Arrow.Top | Arrow.Diag;
_table[i][j] = top;
_arrows[i][j] = Arrow.Top | Arrow.Diag;
} else {
_table[patternPos][wordPos] = diag;
_arrows[patternPos][wordPos] = Arrow.Diag;
_table[i][j] = diag;
_arrows[i][j] = Arrow.Diag;
}
}
......@@ -562,7 +562,7 @@ export function fuzzyScore(pattern: string, word: string, patternOffset: number
}
let bucket: [number, number[]][] = [];
findAllMatches(patternLen, patternLen, patternOffset, wordLen, wordOffset, 0, [], bucket, false);
findAllMatches(patternLen, patternLen, wordLen, 0, [], bucket, false);
if (bucket.length === 0) {
return undefined;
......@@ -580,7 +580,7 @@ export function fuzzyScore(pattern: string, word: string, patternOffset: number
return topMatch;
}
function findAllMatches(patternLen: number, patternPos: number, patternOffset: number, wordPos: number, wordOffset: number, total: number, matches: number[], bucket: [number, number[]][], lastMatched: boolean): void {
function findAllMatches(patternLen: number, patternPos: number, wordPos: number, total: number, matches: number[], bucket: [number, number[]][], lastMatched: boolean): void {
if (bucket.length >= 10) {
return;
......@@ -588,7 +588,7 @@ function findAllMatches(patternLen: number, patternPos: number, patternOffset: n
let simpleMatchCount = 0;
while (patternPos > patternOffset && wordPos > wordOffset) {
while (patternPos > 0 && wordPos > 0) {
let score = _scores[patternPos][wordPos];
let arrow = _arrows[patternPos][wordPos];
......@@ -609,8 +609,8 @@ function findAllMatches(patternLen: number, patternPos: number, patternOffset: n
if (arrow & Arrow.Left) {
// left
findAllMatches(
patternLen, patternPos, patternOffset,
wordPos - 1, wordOffset,
patternLen, patternPos,
wordPos - 1,
matches.length !== 0 ? total - 1 : total,
matches.slice(0), bucket, lastMatched
);
......
......@@ -325,13 +325,6 @@ suite('Filters', () => {
assertMatches('f', ':foo', ':^foo', fuzzyScore);
});
test('fuzzyScore with offset', function () {
const matches = fuzzyScore('bc', 'abc', 0, 1);
assert.ok(matches);
const [, range] = matches;
assert.deepEqual(range, [1, 2]);
});
function assertTopScore(filter: typeof fuzzyScore, pattern: string, expected: number, ...words: string[]) {
let topScore = -(100 * 10);
let topIdx = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册