From c22caf616a9d6baa90ab904292bddc14a7b09ffd Mon Sep 17 00:00:00 2001 From: Victorique Ko Date: Tue, 8 Jan 2019 08:48:49 +0800 Subject: [PATCH 1/3] Fix #66188 --- .../search/node/ripgrepTextSearchEngine.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts index 81e9d7a417a0e..f7367e408cbd9 100644 --- a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts +++ b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts @@ -237,7 +237,12 @@ export class RipgrepParser extends EventEmitter { private createTextSearchMatch(data: IRgMatch, uri: vscode.Uri): vscode.TextSearchMatch { const lineNumber = data.line_number - 1; - const fullText = bytesOrTextToString(data.lines); + let isBOMStripped = false; + let fullText = bytesOrTextToString(data.lines); + if (lineNumber === 0 && startsWithUTF8BOM(fullText)) { + isBOMStripped = true; + fullText = stripUTF8BOM(fullText); + } const fullTextBytes = Buffer.from(fullText); let prevMatchEnd = 0; @@ -254,6 +259,11 @@ export class RipgrepParser extends EventEmitter { this.hitLimit = true; } + if (lineNumber === 0 && i === 0 && isBOMStripped) { + match.start -= 3; + match.end -= 3; + } + let matchText = bytesOrTextToString(match.match); const inBetweenChars = fullTextBytes.slice(prevMatchEnd, match.start).toString().length; let startCol = prevMatchEndCol + inBetweenChars; @@ -265,12 +275,6 @@ export class RipgrepParser extends EventEmitter { stats.lastLineLength : stats.lastLineLength + startCol; - if (lineNumber === 0 && i === 0 && startsWithUTF8BOM(matchText)) { - matchText = stripUTF8BOM(matchText); - startCol -= 3; - endCol -= 3; - } - prevMatchEnd = match.end; prevMatchEndCol = endCol; prevMatchEndLine = endLineNumber; From 4f151dac99c9d25dc923d7e58be0464e74730468 Mon Sep 17 00:00:00 2001 From: Victorique Ko Date: Thu, 10 Jan 2019 16:19:47 +0800 Subject: [PATCH 2/3] Strip utf-8 bom from matchText --- .../workbench/services/search/node/ripgrepTextSearchEngine.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts index f7367e408cbd9..8fb91cc2c5f4c 100644 --- a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts +++ b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts @@ -259,12 +259,12 @@ export class RipgrepParser extends EventEmitter { this.hitLimit = true; } + let matchText = bytesOrTextToString(match.match); if (lineNumber === 0 && i === 0 && isBOMStripped) { + matchText = stripUTF8BOM(matchText); match.start -= 3; match.end -= 3; } - - let matchText = bytesOrTextToString(match.match); const inBetweenChars = fullTextBytes.slice(prevMatchEnd, match.start).toString().length; let startCol = prevMatchEndCol + inBetweenChars; From 0be5df1db257677917ae02b6f4bac0624999dd6a Mon Sep 17 00:00:00 2001 From: Victorique Ko Date: Thu, 10 Jan 2019 16:33:22 +0800 Subject: [PATCH 3/3] Index can't be negative --- .../workbench/services/search/node/ripgrepTextSearchEngine.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts index 8fb91cc2c5f4c..f70c901e0720b 100644 --- a/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts +++ b/src/vs/workbench/services/search/node/ripgrepTextSearchEngine.ts @@ -262,8 +262,8 @@ export class RipgrepParser extends EventEmitter { let matchText = bytesOrTextToString(match.match); if (lineNumber === 0 && i === 0 && isBOMStripped) { matchText = stripUTF8BOM(matchText); - match.start -= 3; - match.end -= 3; + match.start = match.start <= 3 ? 0 : match.start - 3; + match.end = match.end <= 3 ? 0 : match.end - 3; } const inBetweenChars = fullTextBytes.slice(prevMatchEnd, match.start).toString().length; let startCol = prevMatchEndCol + inBetweenChars;