remote - sketch up find in files logic

This commit is contained in:
Johannes Rieken
2018-01-11 16:22:48 -08:00
parent 44d1ccf8b8
commit 73ee03ed51
4 changed files with 82 additions and 31 deletions

View File

@@ -53,6 +53,7 @@ import { ConfigurationScope } from 'vs/platform/configuration/common/configurati
import { ParsedArgs } from 'vs/platform/environment/common/environment';
import { CommentRule, CharacterPair, EnterAction } from 'vs/editor/common/modes/languageConfiguration';
import { EndOfLineSequence, ISingleEditOperation } from 'vs/editor/common/model';
import { ILineMatch, IPatternInfo } from 'vs/platform/search/common/search';
export interface IEnvironment {
isExtensionDevelopmentDebug: boolean;
@@ -373,7 +374,7 @@ export interface MainThreadFileSystemShape extends IDisposable {
$onFileSystemChange(handle: number, resource: IFileChange[]): void;
$reportFileChunk(handle: number, session: number, chunk: number[] | null): void;
$handleDidFindFile(handle: number, session: number, resource: UriComponents): void;
$handleFindMatch(handle: number, session, data: UriComponents | [UriComponents, ILineMatch]): void;
}
export interface MainThreadTaskShape extends IDisposable {
@@ -543,6 +544,7 @@ export interface ExtHostFileSystemShape {
$readdir(handle: number, resource: UriComponents): TPromise<[UriComponents, IStat][]>;
$rmdir(handle: number, resource: UriComponents): TPromise<void>;
$findFiles(handle: number, session: number, query: string): TPromise<void>;
$findInFiles(handle: number, session: number, pattern: IPatternInfo): TPromise<void>;
}
export interface ExtHostExtensionServiceShape {

View File

@@ -11,6 +11,7 @@ import * as vscode from 'vscode';
import { IStat } from 'vs/platform/files/common/files';
import { IDisposable } from 'vs/base/common/lifecycle';
import { asWinJsPromise } from 'vs/base/common/async';
import { IPatternInfo } from 'vs/platform/search/common/search';
export class ExtHostFileSystem implements ExtHostFileSystemShape {
@@ -79,7 +80,27 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
if (!provider.findFiles) {
return TPromise.as(undefined);
}
const progress = { report: (uri) => this._proxy.$handleDidFindFile(handle, session, uri) };
const progress = {
report: (uri) => {
this._proxy.$handleFindMatch(handle, session, uri);
}
};
return asWinJsPromise(token => provider.findFiles(query, progress, token));
}
$findInFiles(handle: number, session: number, pattern: IPatternInfo): TPromise<void> {
const provider = this._provider.get(handle);
if (!provider.findInFiles) {
return TPromise.as(undefined);
}
const progress = {
report: (data: vscode.FindMatch) => {
this._proxy.$handleFindMatch(handle, session, [data.uri, {
lineNumber: 1 + data.range.start.line,
preview: data.preview.leading + data.preview.matching + data.preview.trailing,
offsetAndLengths: [[data.preview.leading.length, data.preview.matching.length]]
}]);
}
};
return asWinJsPromise(token => provider.findInFiles(pattern.pattern, pattern.isRegExp, progress, token));
}
}