Search editor go to location improvements (#135227)

* Search editor go to location improvements

- Added option to go to and select the match
- Fixed cursor placement with initial whitespace

* Remove #128927 changes

* Fix up seprartor logic

Co-authored-by: Jackson Kearl <jakearl@microsoft.com>
This commit is contained in:
Stephen Sigwart 2021-10-26 00:20:36 -04:00 committed by GitHub
parent f6a5fbec58
commit dbea36b57a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 9 deletions

View file

@ -7,7 +7,7 @@ import * as vscode from 'vscode';
import * as pathUtils from 'path'; import * as pathUtils from 'path';
const FILE_LINE_REGEX = /^(\S.*):$/; const FILE_LINE_REGEX = /^(\S.*):$/;
const RESULT_LINE_REGEX = /^(\s+)(\d+)(:| )(\s+)(.*)$/; const RESULT_LINE_REGEX = /^(\s+)(\d+)(: | )(\s*)(.*)$/;
const ELISION_REGEX = /⟪ ([0-9]+) characters skipped ⟫/g; const ELISION_REGEX = /⟪ ([0-9]+) characters skipped ⟫/g;
const SEARCH_RESULT_SELECTOR = { language: 'search-result', exclusive: true }; const SEARCH_RESULT_SELECTOR = { language: 'search-result', exclusive: true };
const DIRECTIVES = ['# Query:', '# Flags:', '# Including:', '# Excluding:', '# ContextLines:']; const DIRECTIVES = ['# Query:', '# Flags:', '# Including:', '# Excluding:', '# ContextLines:'];
@ -220,10 +220,9 @@ function parseSearchResults(document: vscode.TextDocument, token?: vscode.Cancel
const resultLine = RESULT_LINE_REGEX.exec(line); const resultLine = RESULT_LINE_REGEX.exec(line);
if (resultLine) { if (resultLine) {
const [, indentation, _lineNumber, seperator, resultIndentation] = resultLine; const [, indentation, _lineNumber, separator] = resultLine;
const lineNumber = +_lineNumber - 1; const lineNumber = +_lineNumber - 1;
const resultStart = (indentation + _lineNumber + seperator + resultIndentation).length; const metadataOffset = (indentation + _lineNumber + separator).length;
const metadataOffset = (indentation + _lineNumber + seperator).length;
const targetRange = new vscode.Range(Math.max(lineNumber - 3, 0), 0, lineNumber + 3, line.length); const targetRange = new vscode.Range(Math.max(lineNumber - 3, 0), 0, lineNumber + 3, line.length);
let locations: Required<vscode.LocationLink>[] = []; let locations: Required<vscode.LocationLink>[] = [];
@ -233,12 +232,12 @@ function parseSearchResults(document: vscode.TextDocument, token?: vscode.Cancel
targetRange, targetRange,
targetSelectionRange: new vscode.Range(lineNumber, 0, lineNumber, 1), targetSelectionRange: new vscode.Range(lineNumber, 0, lineNumber, 1),
targetUri: currentTarget, targetUri: currentTarget,
originSelectionRange: new vscode.Range(i, 0, i, resultStart), originSelectionRange: new vscode.Range(i, 0, i, metadataOffset - 1),
}); });
let lastEnd = resultStart; let lastEnd = metadataOffset;
let offset = 0; let offset = 0;
ELISION_REGEX.lastIndex = resultStart; ELISION_REGEX.lastIndex = metadataOffset;
for (let match: RegExpExecArray | null; (match = ELISION_REGEX.exec(line));) { for (let match: RegExpExecArray | null; (match = ELISION_REGEX.exec(line));) {
locations.push({ locations.push({
targetRange, targetRange,
@ -261,7 +260,7 @@ function parseSearchResults(document: vscode.TextDocument, token?: vscode.Cancel
} }
currentTargetLocations?.push(...locations); currentTargetLocations?.push(...locations);
links[i] = { type: 'result', locations, isContext: seperator === ' ', prefixRange: new vscode.Range(i, 0, i, metadataOffset) }; links[i] = { type: 'result', locations, isContext: separator === ' ', prefixRange: new vscode.Range(i, 0, i, metadataOffset) };
} }
} }

View file

@ -62,7 +62,7 @@ import { renderSearchMessage } from 'vs/workbench/contrib/search/browser/searchM
import { EditorExtensionsRegistry, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; import { EditorExtensionsRegistry, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions';
import { UnusualLineTerminatorsDetector } from 'vs/editor/contrib/unusualLineTerminators/unusualLineTerminators'; import { UnusualLineTerminatorsDetector } from 'vs/editor/contrib/unusualLineTerminators/unusualLineTerminators';
const RESULT_LINE_REGEX = /^(\s+)(\d+)(:| )(\s+)(.*)$/; const RESULT_LINE_REGEX = /^(\s+)(\d+)(: | )(\s*)(.*)$/;
const FILE_LINE_REGEX = /^(\S.*):$/; const FILE_LINE_REGEX = /^(\S.*):$/;
type SearchEditorViewState = ICodeEditorViewState & { focused: 'input' | 'editor' }; type SearchEditorViewState = ICodeEditorViewState & { focused: 'input' | 'editor' };