diff --git a/src/vs/workbench/contrib/tasks/browser/taskQuickPick.ts b/src/vs/workbench/contrib/tasks/browser/taskQuickPick.ts index 0d96610a40cc86df09ab14a84700e0a367c37c43..e7a8d4470b88c2a0159ccf6a195305734157473f 100644 --- a/src/vs/workbench/contrib/tasks/browser/taskQuickPick.ts +++ b/src/vs/workbench/contrib/tasks/browser/taskQuickPick.ts @@ -101,8 +101,9 @@ export class TaskQuickPick extends Disposable { return tasks; } - private dedupeConfiguredAndRecent(recentTasks: (Task | ConfiguringTask)[], configuredTasks: (Task | ConfiguringTask)[]): (Task | ConfiguringTask)[] { + private dedupeConfiguredAndRecent(recentTasks: (Task | ConfiguringTask)[], configuredTasks: (Task | ConfiguringTask)[]): { configuredTasks: (Task | ConfiguringTask)[], recentTasks: (Task | ConfiguringTask)[] } { let dedupedConfiguredTasks: (Task | ConfiguringTask)[] = []; + const foundRecentTasks: boolean[] = Array(recentTasks.length).fill(false); for (let j = 0; j < configuredTasks.length; j++) { const workspaceFolder = configuredTasks[j].getWorkspaceFolder()?.uri.toString(); const definition = configuredTasks[j].getDefinition()?._key; @@ -115,22 +116,31 @@ export class TaskQuickPick extends Disposable { dedupedConfiguredTasks.push(configuredTasks[j]); } else { recentTasks[findIndex] = configuredTasks[j]; + foundRecentTasks[findIndex] = true; } } dedupedConfiguredTasks = dedupedConfiguredTasks.sort((a, b) => this.sorter.compare(a, b)); - return dedupedConfiguredTasks; + const prunedRecentTasks: (Task | ConfiguringTask)[] = []; + for (let i = 0; i < recentTasks.length; i++) { + if (foundRecentTasks[i] || ConfiguringTask.is(recentTasks[i])) { + prunedRecentTasks.push(recentTasks[i]); + } + } + return { configuredTasks: dedupedConfiguredTasks, recentTasks: prunedRecentTasks }; } public async getTopLevelEntries(defaultEntry?: TaskQuickPickEntry): Promise<{ entries: QuickPickInput[], isSingleConfigured?: Task | ConfiguringTask }> { if (this.topLevelEntries !== undefined) { return { entries: this.topLevelEntries }; } - const recentTasks: (Task | ConfiguringTask)[] = (await this.taskService.readRecentTasks()).reverse(); + let recentTasks: (Task | ConfiguringTask)[] = (await this.taskService.readRecentTasks()).reverse(); const configuredTasks: (Task | ConfiguringTask)[] = this.handleFolderTaskResult(await this.taskService.getWorkspaceTasks()); const extensionTaskTypes = this.taskService.taskTypes(); this.topLevelEntries = []; // Dedupe will update recent tasks if they've changed in tasks.json. - let dedupedConfiguredTasks: (Task | ConfiguringTask)[] = this.dedupeConfiguredAndRecent(recentTasks, configuredTasks); + const dedupeAndPrune = this.dedupeConfiguredAndRecent(recentTasks, configuredTasks); + let dedupedConfiguredTasks: (Task | ConfiguringTask)[] = dedupeAndPrune.configuredTasks; + recentTasks = dedupeAndPrune.recentTasks; if (recentTasks.length > 0) { this.createEntriesForGroup(this.topLevelEntries, recentTasks, nls.localize('recentlyUsed', 'recently used')); }