From 6c95b041ea6adc0f45ea2c5c6f6acfc81513b5c5 Mon Sep 17 00:00:00 2001 From: HaoboGu Date: Wed, 6 Jan 2021 00:10:32 +0800 Subject: [PATCH 1/6] test: add tests for #113403 --- src/vs/base/test/common/filters.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vs/base/test/common/filters.test.ts b/src/vs/base/test/common/filters.test.ts index 17a3f681c7349..22889a15a79c8 100644 --- a/src/vs/base/test/common/filters.test.ts +++ b/src/vs/base/test/common/filters.test.ts @@ -534,6 +534,11 @@ suite('Filters', () => { assert.ok(Boolean(match)); }); + test('Wrong highlight after emoji #113403', function () { + assertMatches('di', '⭐div classname="">', '⭐^d^iv classname="">', fuzzyScore); + assertMatches('di', 'adiv classname="">', 'adiv classname="">', fuzzyScore); + }); + test('Suggestion is not highlighted #85826', function () { assertMatches('SemanticTokens', 'SemanticTokensEdits', '^S^e^m^a^n^t^i^c^T^o^k^e^n^sEdits', fuzzyScore); assertMatches('SemanticTokens', 'SemanticTokensEdits', '^S^e^m^a^n^t^i^c^T^o^k^e^n^sEdits', fuzzyScoreGracefulAggressive); From 3f435ff6c1fd2295d716c385cdd4264e332b1263 Mon Sep 17 00:00:00 2001 From: HaoboGu Date: Wed, 6 Jan 2021 00:24:31 +0800 Subject: [PATCH 2/6] fix #113404 --- src/vs/base/common/filters.ts | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index adff05173563b..0294aa03a40b4 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -468,21 +468,7 @@ function isSeparatorAtPos(value: string, index: number): boolean { return false; } const code = value.charCodeAt(index); - switch (code) { - case CharCode.Underline: - case CharCode.Dash: - case CharCode.Period: - case CharCode.Space: - case CharCode.Slash: - case CharCode.Backslash: - case CharCode.SingleQuote: - case CharCode.DoubleQuote: - case CharCode.Colon: - case CharCode.DollarSign: - return true; - default: - return false; - } + return isWordSeparator(code) || strings.isEmojiImprecise(code); } function isWhitespaceAtPos(value: string, index: number): boolean { From e269e5e2c6c634968b8660647281756414949ba6 Mon Sep 17 00:00:00 2001 From: HaoboGu Date: Thu, 7 Jan 2021 02:45:36 +0000 Subject: [PATCH 3/6] revert back using switch for isSeparatorAtPos, add several cases --- src/vs/base/common/filters.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index 0294aa03a40b4..64f961c9869ab 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -468,7 +468,27 @@ function isSeparatorAtPos(value: string, index: number): boolean { return false; } const code = value.charCodeAt(index); - return isWordSeparator(code) || strings.isEmojiImprecise(code); + switch (code) { + case CharCode.Underline: + case CharCode.Dash: + case CharCode.Period: + case CharCode.Space: + case CharCode.Slash: + case CharCode.Backslash: + case CharCode.SingleQuote: + case CharCode.DoubleQuote: + case CharCode.Colon: + case CharCode.DollarSign: + case CharCode.LessThan: + case CharCode.OpenParen: + case CharCode.OpenSquareBracket: + return true; + default: + if (strings.isEmojiImprecise(code)) { + return true; + } + return false; + } } function isWhitespaceAtPos(value: string, index: number): boolean { From 3759568789d71c6f424e624a65a7115e59162bd3 Mon Sep 17 00:00:00 2001 From: HaoboGu Date: Thu, 7 Jan 2021 03:14:19 +0000 Subject: [PATCH 4/6] support more unicode chars in isSeparatorAtPos --- src/vs/base/common/filters.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index 64f961c9869ab..bc06b65454254 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -467,7 +467,7 @@ function isSeparatorAtPos(value: string, index: number): boolean { if (index < 0 || index >= value.length) { return false; } - const code = value.charCodeAt(index); + const code = value.codePointAt(index); switch (code) { case CharCode.Underline: case CharCode.Dash: @@ -483,6 +483,8 @@ function isSeparatorAtPos(value: string, index: number): boolean { case CharCode.OpenParen: case CharCode.OpenSquareBracket: return true; + case undefined: + return false; default: if (strings.isEmojiImprecise(code)) { return true; From 935cbe6aff38ef04d1079d727d97739b28e8fe0a Mon Sep 17 00:00:00 2001 From: HaoboGu Date: Thu, 7 Jan 2021 06:31:50 +0000 Subject: [PATCH 5/6] update test cases --- src/vs/base/test/common/filters.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/base/test/common/filters.test.ts b/src/vs/base/test/common/filters.test.ts index 22889a15a79c8..fa4c63e4cef46 100644 --- a/src/vs/base/test/common/filters.test.ts +++ b/src/vs/base/test/common/filters.test.ts @@ -535,7 +535,7 @@ suite('Filters', () => { }); test('Wrong highlight after emoji #113403', function () { - assertMatches('di', '⭐div classname="">', '⭐^d^iv classname="">', fuzzyScore); + assertMatches('di', '✨div classname="">', '✨^d^iv classname="">', fuzzyScore); assertMatches('di', 'adiv classname="">', 'adiv classname="">', fuzzyScore); }); From 519f8691bad020e1b764f62293ad2fc918d35415 Mon Sep 17 00:00:00 2001 From: HaoboGu Date: Thu, 7 Jan 2021 15:53:25 +0800 Subject: [PATCH 6/6] fix typo --- src/vs/base/test/common/filters.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/base/test/common/filters.test.ts b/src/vs/base/test/common/filters.test.ts index fa4c63e4cef46..c53f192e6e499 100644 --- a/src/vs/base/test/common/filters.test.ts +++ b/src/vs/base/test/common/filters.test.ts @@ -534,7 +534,7 @@ suite('Filters', () => { assert.ok(Boolean(match)); }); - test('Wrong highlight after emoji #113403', function () { + test('Wrong highlight after emoji #113404', function () { assertMatches('di', '✨div classname="">', '✨^d^iv classname="">', fuzzyScore); assertMatches('di', 'adiv classname="">', 'adiv classname="">', fuzzyScore); });