diff --git a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts index 837eb4f98a3..d0820e649e0 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts @@ -14,7 +14,6 @@ import { MainThreadWorkspaceShape, ExtHostWorkspaceShape, ExtHostContext, MainCo import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IRelativePattern, isRelativePattern } from 'vs/base/common/glob'; @extHostNamedCustomer(MainContext.MainThreadWorkspace) export class MainThreadWorkspace implements MainThreadWorkspaceShape { @@ -52,17 +51,17 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { // --- search --- - $startSearch(include: string | IRelativePattern, exclude: string | IRelativePattern, maxResults: number, requestId: number): Thenable { + $startSearch(includePattern: string, includeFolder: string, excludePattern: string, maxResults: number, requestId: number): Thenable { const workspace = this._contextService.getWorkspace(); if (!workspace.folders.length) { return undefined; } let folderQueries: IFolderQuery[]; - if (typeof include === 'string' || !include) { + if (typeof includeFolder === 'string') { + folderQueries = [{ folder: URI.file(includeFolder) }]; // if base provided, only search in that folder + } else { folderQueries = workspace.folders.map(folder => ({ folder: folder.uri })); // absolute pattern: search across all folders - } else if (isRelativePattern(include)) { - folderQueries = [{ folder: URI.file(include.base) }]; // relative pattern: search only in base folder } if (!folderQueries) { @@ -83,8 +82,8 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { folderQueries, type: QueryType.File, maxResults, - includePattern: { [typeof include === 'string' ? include : !!include ? include.pattern : undefined]: true }, - excludePattern: { [typeof exclude === 'string' ? exclude : !!exclude ? exclude.pattern : undefined]: true }, + includePattern: { [typeof includePattern === 'string' ? includePattern : undefined]: true }, + excludePattern: { [typeof excludePattern === 'string' ? excludePattern : undefined]: true }, useRipgrep, ignoreSymlinks }; diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index af59bb8d477..c1cc7e76ba7 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -217,7 +217,7 @@ export function createApiFactory( return extHostLanguages.getLanguages(); }, match(selector: vscode.DocumentSelector, document: vscode.TextDocument): number { - return score(toLanguageSelector(selector), document.uri, document.languageId); + return score(toLanguageSelector(selector), document.uri, document.languageId); }, registerCodeActionsProvider(selector: vscode.DocumentSelector, provider: vscode.CodeActionProvider): vscode.Disposable { return languageFeatures.registerCodeActionProvider(selector, provider); diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 4c9e8fa66e5..1eaa93f29ee 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -46,7 +46,6 @@ import { ITreeItem } from 'vs/workbench/common/views'; import { ThemeColor } from 'vs/platform/theme/common/themeService'; import { IDisposable } from 'vs/base/common/lifecycle'; import { SerializedError } from 'vs/base/common/errors'; -import { IRelativePattern } from 'vs/base/common/glob'; import { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace'; import { IStat, IFileChange } from 'vs/platform/files/common/files'; import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; @@ -328,7 +327,7 @@ export interface MainThreadTelemetryShape extends IDisposable { } export interface MainThreadWorkspaceShape extends IDisposable { - $startSearch(include: string | IRelativePattern, exclude: string | IRelativePattern, maxResults: number, requestId: number): Thenable; + $startSearch(includePattern: string, includeFolder: string, excludePattern: string, maxResults: number, requestId: number): Thenable; $cancelSearch(requestId: number): Thenable; $saveAll(includeUntitled?: boolean): Thenable; } diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts index 40d1354025f..f2e7dce967d 100644 --- a/src/vs/workbench/api/node/extHostTypeConverters.ts +++ b/src/vs/workbench/api/node/extHostTypeConverters.ts @@ -17,7 +17,7 @@ import { IPosition } from 'vs/editor/common/core/position'; import { IRange } from 'vs/editor/common/core/range'; import { ISelection } from 'vs/editor/common/core/selection'; import * as htmlContent from 'vs/base/common/htmlContent'; -import { IRelativePattern, isRelativePattern } from 'vs/base/common/glob'; +import { IRelativePattern } from 'vs/base/common/glob'; import { LanguageSelector, LanguageFilter } from 'vs/editor/common/modes/languageSelector'; export interface PositionLike { @@ -607,6 +607,12 @@ export function toGlobPattern(pattern: vscode.GlobPattern): string | IRelativePa return new types.RelativePattern(pattern.base, pattern.pattern); } +function isRelativePattern(obj: any): obj is vscode.RelativePattern { + const rp = obj as vscode.RelativePattern; + + return rp && typeof rp.base === 'string' && typeof rp.pattern === 'string'; +} + export function toLanguageSelector(selector: vscode.DocumentSelector): LanguageSelector { if (Array.isArray(selector)) { return selector.map(sel => doToLanguageSelector(sel)); diff --git a/src/vs/workbench/api/node/extHostWorkspace.ts b/src/vs/workbench/api/node/extHostWorkspace.ts index 654d088c5de..73f38a7da6e 100644 --- a/src/vs/workbench/api/node/extHostWorkspace.ts +++ b/src/vs/workbench/api/node/extHostWorkspace.ts @@ -14,7 +14,6 @@ import { IWorkspaceData, ExtHostWorkspaceShape, MainContext, MainThreadWorkspace import * as vscode from 'vscode'; import { compare } from 'vs/base/common/strings'; import { TernarySearchTree } from 'vs/base/common/map'; -import { IRelativePattern } from 'vs/base/common/glob'; class Workspace2 extends Workspace { @@ -155,9 +154,30 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape { // --- search --- - findFiles(include: string | IRelativePattern, exclude: string | IRelativePattern, maxResults?: number, token?: vscode.CancellationToken): Thenable { + findFiles(include: vscode.GlobPattern, exclude: vscode.GlobPattern, maxResults?: number, token?: vscode.CancellationToken): Thenable { const requestId = ExtHostWorkspace._requestIdPool++; - const result = this._proxy.$startSearch(include, exclude, maxResults, requestId); + + let includePattern: string; + let includeFolder: string; + if (include) { + if (typeof include === 'string') { + includePattern = include; + } else { + includePattern = include.pattern; + includeFolder = include.base; + } + } + + let excludePattern: string; + if (exclude) { + if (typeof exclude === 'string') { + excludePattern = exclude; + } else { + excludePattern = exclude.pattern; + } + } + + const result = this._proxy.$startSearch(includePattern, includeFolder, excludePattern, maxResults, requestId); if (token) { token.onCancellationRequested(() => this._proxy.$cancelSearch(requestId)); }