From 461c563f64a892995573ec439b237405cdeebebd Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 17 Mar 2020 11:58:52 +0100 Subject: [PATCH] quick access - first cut of symbols in anything access --- .../search/browser/anythingQuickAccess.ts | 10 ++-- .../search/browser/symbolsQuickAccess.ts | 50 ++++++++++++------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts b/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts index 1688beb2efd..4a52aa85836 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; } -- GitLab