提交 055553ab 编写于 作者: B Benjamin Pasero

quick access - wrap up anything provider

上级 d339e9b4
......@@ -50,7 +50,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
private static readonly MAX_RESULTS = 512;
private scorerCache: ScorerCache = Object.create(null);
private static readonly TYPING_SEARCH_DELAY = 200; // this delay accommodates for the user typing a word and then stops typing to start searching
private readonly pickState = new class {
scorerCache: ScorerCache = Object.create(null);
......@@ -167,7 +167,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
// Sort top 512 items by score
const sortedAnythingPicks = top(
[...filePicks, ...symbolPicks],
(anyPickA, anyPickB) => compareItemsByScore(anyPickA, anyPickB, query, true, quickPickItemScorerAccessor, this.scorerCache),
(anyPickA, anyPickB) => compareItemsByScore(anyPickA, anyPickB, query, true, quickPickItemScorerAccessor, this.pickState.scorerCache),
AnythingQuickAccessProvider.MAX_RESULTS
);
......@@ -177,7 +177,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
continue; // preserve any highlights we got already (e.g. symbols)
}
const { labelMatch, descriptionMatch } = scoreItem(anythingPick, query, true, quickPickItemScorerAccessor, this.scorerCache);
const { labelMatch, descriptionMatch } = scoreItem(anythingPick, query, true, quickPickItemScorerAccessor, this.pickState.scorerCache);
anythingPick.highlights = {
label: labelMatch,
......@@ -216,7 +216,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
const editorHistoryPick = this.createAnythingPick(editor, range);
const { score, labelMatch, descriptionMatch } = scoreItem(editorHistoryPick, query, false, editorHistoryScorerAccessor, this.scorerCache);
const { score, labelMatch, descriptionMatch } = scoreItem(editorHistoryPick, query, false, editorHistoryScorerAccessor, this.pickState.scorerCache);
if (!score) {
continue; // exclude editors not matching query
}
......@@ -229,7 +229,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
editorHistoryPicks.push(editorHistoryPick);
}
return editorHistoryPicks.sort((editorA, editorB) => compareItemsByScore(editorA, editorB, query, false, editorHistoryScorerAccessor, this.scorerCache, () => -1));
return editorHistoryPicks.sort((editorA, editorB) => compareItemsByScore(editorA, editorB, query, false, editorHistoryScorerAccessor, this.pickState.scorerCache, () => -1));
}
//#endregion
......@@ -237,9 +237,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
//#region File Search
private static readonly FILE_QUERY_DELAY = 200; // this delay accommodates for the user typing a word and then stops typing to start searching
private fileQueryDelayer = this._register(new ThrottledDelayer<IFileMatch[]>(AnythingQuickAccessProvider.FILE_QUERY_DELAY));
private fileQueryDelayer = this._register(new ThrottledDelayer<IFileMatch[]>(AnythingQuickAccessProvider.TYPING_SEARCH_DELAY));
private fileQueryBuilder = this.instantiationService.createInstance(QueryBuilder);
......@@ -274,7 +272,13 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
if (this.pickState.fileQueryCache?.isLoaded) {
fileMatches = await this.doFileSearch(query, token);
} else {
fileMatches = await this.fileQueryDelayer.trigger(() => this.doFileSearch(query, token));
fileMatches = await this.fileQueryDelayer.trigger(async () => {
if (token.isCancellationRequested) {
return [];
}
return this.doFileSearch(query, token);
});
}
}
......@@ -289,10 +293,6 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
}
private async doFileSearch(query: IPreparedQuery, token: CancellationToken): Promise<IFileMatch[]> {
if (token.isCancellationRequested) {
return [];
}
const { results } = await this.searchService.fileSearch(
this.fileQueryBuilder.file(
this.contextService.getWorkspace().folders,
......@@ -308,7 +308,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
private getFileQueryOptions(input: { filePattern?: string, cacheKey?: string, maxResults?: number }): IFileQueryBuilderOptions {
const fileQueryOptions: IFileQueryBuilderOptions = {
_reason: 'openFileHandler',
_reason: 'openFileHandler', // used for telemetry - do not change
extraFileResources: this.instantiationService.invokeFunction(getOutOfWorkspaceEditorResources),
filePattern: input.filePattern || '',
cacheKey: input.cacheKey,
......@@ -367,7 +367,8 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider<IAnyt
}
// Delegate to the existing symbols quick access
return this.symbolsQuickAccess.getSymbolPicks(query.value, token, { skipLocal: true, skipSorting: true });
// but skip local results and also do not sort
return this.symbolsQuickAccess.getSymbolPicks(query.value, { skipLocal: true, skipSorting: true, delay: AnythingQuickAccessProvider.TYPING_SEARCH_DELAY }, token);
}
//#endregion
......
......@@ -61,16 +61,20 @@ export class SymbolsQuickAccessProvider extends PickerQuickAccessProvider<ISymbo
}
protected getPicks(filter: string, disposables: DisposableStore, token: CancellationToken): Promise<Array<ISymbolQuickPickItem>> {
return this.getSymbolPicks(filter, undefined, token);
}
async getSymbolPicks(filter: string, options: { skipLocal: boolean, skipSorting: boolean, delay: number } | undefined, token: CancellationToken): Promise<Array<ISymbolQuickPickItem>> {
return this.delayer.trigger(async () => {
if (token.isCancellationRequested) {
return [];
}
return this.getSymbolPicks(filter, token);
});
return this.doGetSymbolPicks(filter, options, token);
}, options?.delay);
}
async getSymbolPicks(filter: string, token: CancellationToken, options?: { skipLocal: boolean, skipSorting: boolean }): Promise<Array<ISymbolQuickPickItem>> {
private async doGetSymbolPicks(filter: string, options: { skipLocal: boolean, skipSorting: boolean } | undefined, token: CancellationToken): Promise<Array<ISymbolQuickPickItem>> {
const workspaceSymbols = await getWorkspaceSymbols(filter, token);
if (token.isCancellationRequested) {
return [];
......@@ -140,7 +144,7 @@ export class SymbolsQuickAccessProvider extends PickerQuickAccessProvider<ISymbo
symbolPicks.push({
symbol,
resource: symbol.location.uri,
resource: symbolUri,
score: symbolScore,
label: symbolLabelWithIcon,
ariaLabel: localize('symbolAriaLabel', "{0}, symbols picker", symbolLabel),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册