diff --git a/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts b/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts index 1688beb2efd33b581412150be9dd9a72424f25d9..4a52aa858361d1f6c0c3e7bb7888cf9467f8f12b 100644 --- a/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts +++ b/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts @@ -38,6 +38,7 @@ import { IResourceEditorInput, ITextEditorOptions } from 'vs/platform/editor/com import { Schemas } from 'vs/base/common/network'; import { IFilesConfigurationService, AutoSaveMode } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { ResourceMap } from 'vs/base/common/map'; +import { SymbolsQuickAccessProvider, ISymbolsQuickPickItem } from 'vs/workbench/contrib/search/browser/symbolsQuickAccess'; interface IAnythingQuickPickItem extends IPickerQuickAccessItem { resource: URI | undefined; @@ -136,7 +137,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider, token: CancellationToken): Promise> { + private symbolsQuickAccess = this._register(this.instantiationService.createInstance(SymbolsQuickAccessProvider)); + + protected async getSymbolPicks(query: IPreparedQuery, range: IRange | undefined, token: CancellationToken): Promise> { if ( !query.value || // we need a value for search for !this.configuration.includeSymbols || // we need to enable symbols in search @@ -338,7 +341,8 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider> { + async getSymbolPicks(filter: string, token: CancellationToken, options?: { skipLocal: boolean, skipSorting: boolean, skipMatching: boolean }): Promise> { const workspaceSymbols = await getWorkspaceSymbols(filter, token); if (token.isCancellationRequested) { return []; @@ -86,15 +88,13 @@ export class SymbolsQuickAccessProvider extends PickerQuickAccessProvider(); for (const [provider, symbols] of workspaceSymbols) { for (const symbol of symbols) { - - // Score by symbol label - const symbolLabel = symbol.name; - const symbolScore = fuzzyScore(symbolFilter, symbolFilterLow, 0, symbolLabel, symbolLabel.toLowerCase(), 0, true); - if (!symbolScore) { - continue; + if (options?.skipLocal && !!symbol.containerName) { + continue; // ignore local symbols if we are told so } const symbolUri = symbol.location.uri; + const symbolLabel = symbol.name; + let containerLabel: string | undefined = undefined; if (symbolUri) { const containerPath = this.labelService.getUriLabel(symbolUri, { relative: true }); @@ -105,16 +105,27 @@ export class SymbolsQuickAccessProvider extends PickerQuickAccessProvider this.compareSymbols(symbolA, symbolB)); + // Sort picks (unless disabled) + if (!options?.skipSorting) { + symbolPicks.sort((symbolA, symbolB) => this.compareSymbols(symbolA, symbolB)); + } return symbolPicks; }