Skip to content

Commit 00cd1a8

Browse files
committed
1 parent e6adf20 commit 00cd1a8

2 files changed

Lines changed: 17 additions & 6 deletions

File tree

src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -577,23 +577,34 @@ export class PieceTreeBase {
577577

578578
let m: RegExpExecArray | null;
579579
// Reset regex to search from the beginning
580-
searcher.reset(start);
581580
let ret: BufferCursor = { line: 0, column: 0 };
581+
let searchText: string;
582+
let offsetInBuffer: (offset: number) => number;
583+
584+
if (searcher._wordSeparators) {
585+
searchText = buffer.buffer.substring(start, end);
586+
offsetInBuffer = (offset: number) => offset + start;
587+
searcher.reset(-1);
588+
} else {
589+
searchText = buffer.buffer;
590+
offsetInBuffer = (offset: number) => offset;
591+
searcher.reset(start);
592+
}
582593

583594
do {
584-
m = searcher.next(buffer.buffer);
595+
m = searcher.next(searchText);
585596

586597
if (m) {
587-
if (m.index >= end) {
598+
if (offsetInBuffer(m.index) >= end) {
588599
return resultLen;
589600
}
590-
this.positionInBuffer(node, m.index - startOffsetInBuffer, ret);
601+
this.positionInBuffer(node, offsetInBuffer(m.index) - startOffsetInBuffer, ret);
591602
let lineFeedCnt = this.getLineFeedCnt(node.piece.bufferIndex, startCursor, ret);
592603
let retStartColumn = ret.line === startCursor.line ? ret.column - startCursor.column + startColumn : ret.column + 1;
593604
let retEndColumn = retStartColumn + m[0].length;
594605
result[resultLen++] = createFindMatch(new Range(startLineNumber + lineFeedCnt, retStartColumn, startLineNumber + lineFeedCnt, retEndColumn), m, captureMatches);
595606

596-
if (m.index + m[0].length >= end) {
607+
if (offsetInBuffer(m.index) + m[0].length >= end) {
597608
return resultLen;
598609
}
599610
if (resultLen >= limitResultCount) {

src/vs/editor/common/model/textModelSearch.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ export function isValidMatch(wordSeparators: WordCharacterClassifier, text: stri
510510
}
511511

512512
export class Searcher {
513-
private readonly _wordSeparators: WordCharacterClassifier | null;
513+
public readonly _wordSeparators: WordCharacterClassifier | null;
514514
private readonly _searchRegex: RegExp;
515515
private _prevMatchStartIndex: number;
516516
private _prevMatchLength: number;

0 commit comments

Comments
 (0)