提交 52e7f1c9 编写于 作者: R Rob Lourens

Refactor text search

Fix strict checks, multiline search
上级 c26d6e6c
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
import { startsWith } from 'vs/base/common/strings'; import { startsWith } from 'vs/base/common/strings';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
import { SearchRange, TextSearchResult } from 'vs/platform/search/common/search';
import * as vscode from 'vscode'; import * as vscode from 'vscode';
export type Maybe<T> = T | null | undefined; export type Maybe<T> = T | null | undefined;
...@@ -13,29 +14,23 @@ export function anchorGlob(glob: string): string { ...@@ -13,29 +14,23 @@ export function anchorGlob(glob: string): string {
return startsWith(glob, '**') || startsWith(glob, '/') ? glob : `/${glob}`; return startsWith(glob, '**') || startsWith(glob, '/') ? glob : `/${glob}`;
} }
export function createTextSearchResult(uri: vscode.Uri, fullText: string, range: Range, previewOptions?: vscode.TextSearchPreviewOptions): vscode.TextSearchResult { export function createTextSearchResult(uri: vscode.Uri, text: string, range: Range, previewOptions?: vscode.TextSearchPreviewOptions): vscode.TextSearchResult {
let preview: vscode.TextSearchResultPreview; const searchRange: SearchRange = {
if (previewOptions) { startLineNumber: range.start.line,
const leadingChars = Math.floor(previewOptions.charsPerLine / 5); startColumn: range.start.character,
const previewStart = Math.max(range.start.character - leadingChars, 0); endLineNumber: range.end.line,
const previewEnd = previewOptions.charsPerLine + previewStart; endColumn: range.end.character,
const endOfMatchRangeInPreview = Math.min(previewEnd, range.end.character - previewStart);
preview = {
text: fullText.substring(previewStart, previewEnd),
match: new Range(0, range.start.character - previewStart, 0, endOfMatchRangeInPreview)
};
} else {
preview = {
text: fullText,
match: new Range(0, range.start.character, 0, range.end.character)
}; };
}
return <vscode.TextSearchResult>{ const internalResult = new TextSearchResult(text, searchRange, previewOptions);
const internalPreviewRange = internalResult.preview.match;
return {
range: new Range(internalResult.range.startLineNumber, internalResult.range.startColumn, internalResult.range.endLineNumber, internalResult.range.endColumn),
uri, uri,
range, preview: {
preview text: internalResult.preview.text,
match: new Range(internalPreviewRange.startLineNumber, internalPreviewRange.startColumn, internalPreviewRange.endLineNumber, internalPreviewRange.endColumn),
}
}; };
} }
......
...@@ -159,7 +159,7 @@ export class QueryGlobTester { ...@@ -159,7 +159,7 @@ export class QueryGlobTester {
this._parsedExcludeExpression = glob.parse(this._excludeExpression); this._parsedExcludeExpression = glob.parse(this._excludeExpression);
// Empty includeExpression means include nothing, so no {} shortcuts // Empty includeExpression means include nothing, so no {} shortcuts
let includeExpression: glob.IExpression = config.includePattern; let includeExpression: glob.IExpression | undefined = config.includePattern;
if (folderQuery.includePattern) { if (folderQuery.includePattern) {
if (includeExpression) { if (includeExpression) {
includeExpression = { includeExpression = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册