From 1f0afd63edd445b74203a0bd445289e52fce04cf Mon Sep 17 00:00:00 2001 From: rebornix Date: Wed, 12 Sep 2018 15:18:09 -0700 Subject: [PATCH] Re #27083. Find in selection should work even if the selection is a single line. --- src/vs/editor/contrib/find/findModel.ts | 8 ++++++-- src/vs/editor/contrib/find/findWidget.ts | 4 ++-- .../editor/contrib/find/test/findModel.test.ts | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/vs/editor/contrib/find/findModel.ts b/src/vs/editor/contrib/find/findModel.ts index bf51ac38ce5..53a4d8bb9fc 100644 --- a/src/vs/editor/contrib/find/findModel.ts +++ b/src/vs/editor/contrib/find/findModel.ts @@ -179,8 +179,12 @@ export class FindModelBoundToEditorModel { } if (findScope !== null) { if (findScope.startLineNumber !== findScope.endLineNumber) { - // multiline find scope => expand to line starts / ends - findScope = new Range(findScope.startLineNumber, 1, findScope.endLineNumber, this._editor.getModel().getLineMaxColumn(findScope.endLineNumber)); + if (findScope.endColumn === 1) { + findScope = new Range(findScope.startLineNumber, 1, findScope.endLineNumber - 1, this._editor.getModel().getLineMaxColumn(findScope.endLineNumber - 1)); + } else { + // multiline find scope => expand to line starts / ends + findScope = new Range(findScope.startLineNumber, 1, findScope.endLineNumber, this._editor.getModel().getLineMaxColumn(findScope.endLineNumber)); + } } } diff --git a/src/vs/editor/contrib/find/findWidget.ts b/src/vs/editor/contrib/find/findWidget.ts index 51a7e330944..3b5d69793a9 100644 --- a/src/vs/editor/contrib/find/findWidget.ts +++ b/src/vs/editor/contrib/find/findWidget.ts @@ -610,7 +610,7 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas if (this._toggleSelectionFind.checked) { let selection = this._codeEditor.getSelection(); if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) { - selection = selection.setEndPosition(selection.endLineNumber - 1, 1); + selection = selection.setEndPosition(selection.endLineNumber - 1, this._codeEditor.getModel().getLineMaxColumn(selection.endLineNumber - 1)); } let currentMatch = this._state.currentMatch; if (selection.startLineNumber !== selection.endLineNumber) { @@ -806,7 +806,7 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas if (this._toggleSelectionFind.checked) { let selection = this._codeEditor.getSelection(); if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) { - selection = selection.setEndPosition(selection.endLineNumber - 1, 1); + selection = selection.setEndPosition(selection.endLineNumber - 1, this._codeEditor.getModel().getLineMaxColumn(selection.endLineNumber - 1)); } if (!selection.isEmpty()) { this._state.change({ searchScope: selection }, true); diff --git a/src/vs/editor/contrib/find/test/findModel.test.ts b/src/vs/editor/contrib/find/test/findModel.test.ts index ef0507c2f1b..e7589fae210 100644 --- a/src/vs/editor/contrib/find/test/findModel.test.ts +++ b/src/vs/editor/contrib/find/test/findModel.test.ts @@ -2031,4 +2031,22 @@ suite('FindModel', () => { findModel.dispose(); findState.dispose(); }); + + findTest('issue #27083. search scope works even if it is a single line', (editor, cursor) => { + let findState = new FindReplaceState(); + findState.change({ searchString: 'hello', wholeWord: true, searchScope: new Range(7, 1, 8, 1) }, false); + let findModel = new FindModelBoundToEditorModel(editor, findState); + + assertFindState( + editor, + [1, 1, 1, 1], + null, + [ + [7, 14, 7, 19] + ] + ); + + findModel.dispose(); + findState.dispose(); + }); }); -- GitLab