From 188c29a419bd1387d81d1c9c4ebabbcbcac0d6ac Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Wed, 18 Aug 2021 19:10:49 -0700 Subject: [PATCH] Change forceExtensionHostSearch strategy for easier testing --- src/vs/workbench/api/browser/mainThreadSearch.ts | 9 ++++++++- src/vs/workbench/api/common/extHost.protocol.ts | 1 + src/vs/workbench/api/common/extHostSearch.ts | 2 ++ src/vs/workbench/api/node/extHostSearch.ts | 6 +----- .../services/search/common/searchService.ts | 2 +- .../search/electron-browser/searchService.ts | 5 +---- .../electron-browser/api/extHostSearch.test.ts | 15 ++++++--------- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadSearch.ts b/src/vs/workbench/api/browser/mainThreadSearch.ts index ac7014a82ba..b720d55c719 100644 --- a/src/vs/workbench/api/browser/mainThreadSearch.ts +++ b/src/vs/workbench/api/browser/mainThreadSearch.ts @@ -6,6 +6,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { dispose, IDisposable, DisposableStore } from 'vs/base/common/lifecycle'; import { URI, UriComponents } from 'vs/base/common/uri'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; import { IFileMatch, IFileQuery, IRawFileMatch2, ISearchComplete, ISearchCompleteStats, ISearchProgressItem, ISearchResultProvider, ISearchService, ITextQuery, QueryType, SearchProviderType } from 'vs/workbench/services/search/common/search'; @@ -20,9 +21,15 @@ export class MainThreadSearch implements MainThreadSearchShape { constructor( extHostContext: IExtHostContext, @ISearchService private readonly _searchService: ISearchService, - @ITelemetryService private readonly _telemetryService: ITelemetryService + @ITelemetryService private readonly _telemetryService: ITelemetryService, + @IConfigurationService _configurationService: IConfigurationService, ) { this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostSearch); + + const forceEHSearch = _configurationService.getValue('search.experimental.forceExtensionHostSearch'); + if (forceEHSearch) { + this._proxy.$enableExtensionHostSearch(); + } } dispose(): void { diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index f9cce1c5246..d1651075864 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -1314,6 +1314,7 @@ export interface ExtHostSecretStateShape { } export interface ExtHostSearchShape { + $enableExtensionHostSearch(): void; $provideFileSearchResults(handle: number, session: number, query: search.IRawQuery, token: CancellationToken): Promise; $provideTextSearchResults(handle: number, session: number, query: search.IRawTextQuery, token: CancellationToken): Promise; $clearCache(cacheKey: string): Promise; diff --git a/src/vs/workbench/api/common/extHostSearch.ts b/src/vs/workbench/api/common/extHostSearch.ts index 7ed796455c5..0a5def9d32f 100644 --- a/src/vs/workbench/api/common/extHostSearch.ts +++ b/src/vs/workbench/api/common/extHostSearch.ts @@ -105,6 +105,8 @@ export class ExtHostSearch implements ExtHostSearchShape { return engine.search(progress => this._proxy.$handleTextMatch(handle, session, progress), token); } + $enableExtensionHostSearch(): void { } + protected createTextSearchManager(query: ITextQuery, provider: vscode.TextSearchProvider): TextSearchManager { return new TextSearchManager(query, provider, { readdir: resource => Promise.resolve([]), // TODO@rob implement diff --git a/src/vs/workbench/api/node/extHostSearch.ts b/src/vs/workbench/api/node/extHostSearch.ts index be459bf9c2d..c47fe8413f0 100644 --- a/src/vs/workbench/api/node/extHostSearch.ts +++ b/src/vs/workbench/api/node/extHostSearch.ts @@ -8,7 +8,6 @@ import { Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; import * as pfs from 'vs/base/node/pfs'; import { ILogService } from 'vs/platform/log/common/log'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; import { ExtHostSearch, reviveQuery } from 'vs/workbench/api/common/extHostSearch'; import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; @@ -29,7 +28,6 @@ export class NativeExtHostSearch extends ExtHostSearch { constructor( @IExtHostRpcService extHostRpc: IExtHostRpcService, - @IExtHostInitDataService initData: IExtHostInitDataService, @IURITransformerService _uriTransformer: IURITransformerService, @ILogService _logService: ILogService, ) { @@ -37,11 +35,9 @@ export class NativeExtHostSearch extends ExtHostSearch { const outputChannel = new OutputChannel('RipgrepSearchUD', this._logService); this.registerTextSearchProvider(Schemas.userData, new RipgrepSearchProvider(outputChannel)); - - this._registerEHSearchProviders(); } - private _registerEHSearchProviders(): void { + override $enableExtensionHostSearch(): void { const outputChannel = new OutputChannel('RipgrepSearchEH', this._logService); this.registerTextSearchProvider(Schemas.file, new RipgrepSearchProvider(outputChannel)); this.registerInternalFileSearchProvider(Schemas.file, new SearchService()); diff --git a/src/vs/workbench/services/search/common/searchService.ts b/src/vs/workbench/services/search/common/searchService.ts index 3b1626b8275..b51bdd1c0aa 100644 --- a/src/vs/workbench/services/search/common/searchService.ts +++ b/src/vs/workbench/services/search/common/searchService.ts @@ -209,7 +209,7 @@ export class SearchService extends Disposable implements ISearchService { this.fileSearchProviders.get(scheme) : this.textSearchProviders.get(scheme); - if (scheme === Schemas.file && (!provider || this.diskSearch)) { + if (!provider && scheme === Schemas.file) { diskSearchQueries.push(...schemeFQs); } else { if (!provider) { diff --git a/src/vs/workbench/services/search/electron-browser/searchService.ts b/src/vs/workbench/services/search/electron-browser/searchService.ts index d14aaadcfe2..a58b4eb26f6 100644 --- a/src/vs/workbench/services/search/electron-browser/searchService.ts +++ b/src/vs/workbench/services/search/electron-browser/searchService.ts @@ -44,10 +44,7 @@ export class LocalSearchService extends SearchService { ) { super(modelService, editorService, telemetryService, logService, extensionService, fileService, uriIdentityService); - const forceEHSearch = configurationService.getValue('search.experimental.forceExtensionHostSearch'); - if (!forceEHSearch) { - this.diskSearch = instantiationService.createInstance(DiskSearch, !environmentService.isBuilt || environmentService.verbose, parseSearchPort(environmentService.args, environmentService.isBuilt)); - } + this.diskSearch = instantiationService.createInstance(DiskSearch, !environmentService.isBuilt || environmentService.verbose, parseSearchPort(environmentService.args, environmentService.isBuilt)); } } diff --git a/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts b/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts index c5e6b2db736..aa79f541b53 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostSearch.test.ts @@ -5,25 +5,23 @@ import * as assert from 'assert'; import { mapArrayOrNot } from 'vs/base/common/arrays'; +import { timeout } from 'vs/base/common/async'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { isPromiseCanceledError } from 'vs/base/common/errors'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { joinPath } from 'vs/base/common/resources'; import { URI, UriComponents } from 'vs/base/common/uri'; import * as pfs from 'vs/base/node/pfs'; +import { NullLogService } from 'vs/platform/log/common/log'; import { MainContext, MainThreadSearchShape } from 'vs/workbench/api/common/extHost.protocol'; -import { NativeExtHostSearch } from 'vs/workbench/api/node/extHostSearch'; import { Range } from 'vs/workbench/api/common/extHostTypes'; -import { IFileMatch, IFileQuery, IPatternInfo, IRawFileMatch2, ISearchCompleteStats, ISearchQuery, ITextQuery, QueryType, resultIsMatch } from 'vs/workbench/services/search/common/search'; -import { TestRPCProtocol } from 'vs/workbench/test/browser/api/testRPCProtocol'; -import type * as vscode from 'vscode'; -import { NullLogService } from 'vs/platform/log/common/log'; import { URITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService'; -import { mock } from 'vs/base/test/common/mock'; -import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService'; +import { NativeExtHostSearch } from 'vs/workbench/api/node/extHostSearch'; +import { IFileMatch, IFileQuery, IPatternInfo, IRawFileMatch2, ISearchCompleteStats, ISearchQuery, ITextQuery, QueryType, resultIsMatch } from 'vs/workbench/services/search/common/search'; import { TextSearchManager } from 'vs/workbench/services/search/common/textSearchManager'; import { NativeTextSearchManager } from 'vs/workbench/services/search/node/textSearchManager'; -import { timeout } from 'vs/base/common/async'; +import { TestRPCProtocol } from 'vs/workbench/test/browser/api/testRPCProtocol'; +import type * as vscode from 'vscode'; let rpcProtocol: TestRPCProtocol; let extHostSearch: NativeExtHostSearch; @@ -141,7 +139,6 @@ suite('ExtHostSearch', () => { constructor() { super( rpcProtocol, - new class extends mock() { override remote = { isRemote: false, authority: undefined, connectionData: null }; }, new URITransformerService(null), logService ); -- GitLab