diff --git a/src/vs/base/common/glob.ts b/src/vs/base/common/glob.ts index 4837cc12f55f0a8bd96344e7cf281e8f941165a6..7e11d8c18c0789ddb2df7bb38742707e3a18935d 100644 --- a/src/vs/base/common/glob.ts +++ b/src/vs/base/common/glob.ts @@ -482,7 +482,7 @@ export function parse(arg1: string | IExpression | IRelativePattern, options: IG return parsedExpression(arg1, options); } -function isRelativePattern(obj: any): obj is IRelativePattern { +export function isRelativePattern(obj: any): obj is IRelativePattern { const rp = obj as IRelativePattern; return typeof rp.base === 'string' && typeof rp.pattern === 'string'; diff --git a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts index 5105287b174e18864ee9c86a429e7eb59b522fda..837eb4f98a3bfe57324f7fbb5203f5bbf18267c9 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts @@ -14,7 +14,7 @@ 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 } from 'vs/base/common/glob'; +import { IRelativePattern, isRelativePattern } from 'vs/base/common/glob'; @extHostNamedCustomer(MainContext.MainThreadWorkspace) export class MainThreadWorkspace implements MainThreadWorkspaceShape { @@ -61,10 +61,14 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { let folderQueries: IFolderQuery[]; if (typeof include === 'string' || !include) { folderQueries = workspace.folders.map(folder => ({ folder: folder.uri })); // absolute pattern: search across all folders - } else { + } else if (isRelativePattern(include)) { folderQueries = [{ folder: URI.file(include.base) }]; // relative pattern: search only in base folder } + if (!folderQueries) { + return undefined; // invalid query parameters + } + const useRipgrep = folderQueries.every(folderQuery => { const folderConfig = this._configurationService.getValue({ resource: folderQuery.folder }); return folderConfig.search.useRipgrep;