Skip to content

Commit da34e25

Browse files
authored
support pinning in Run Task quickpick (microsoft#160565)
1 parent eb2d29c commit da34e25

File tree

4 files changed

+25
-23
lines changed

4 files changed

+25
-23
lines changed

src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ import { IPathService } from 'vs/workbench/services/path/common/pathService';
8080
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
8181
import { TerminalExitReason } from 'vs/platform/terminal/common/terminal';
8282
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
83+
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
8384

8485
const QUICKOPEN_HISTORY_LIMIT_CONFIG = 'task.quickOpen.history';
8586
const PROBLEM_MATCHER_NEVER_CONFIG = 'task.problemMatchers.neverPrompt';
@@ -261,7 +262,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
261262
@ILogService private readonly _logService: ILogService,
262263
@IThemeService private readonly _themeService: IThemeService,
263264
@ILifecycleService private readonly _lifecycleService: ILifecycleService,
264-
@IRemoteAgentService remoteAgentService: IRemoteAgentService
265+
@IRemoteAgentService remoteAgentService: IRemoteAgentService,
266+
@IInstantiationService private readonly _instantiationService: IInstantiationService
265267
) {
266268
super();
267269

@@ -2639,7 +2641,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
26392641
return entries;
26402642
}
26412643
private async _showTwoLevelQuickPick(placeHolder: string, defaultEntry?: ITaskQuickPickEntry, type?: string, name?: string) {
2642-
return TaskQuickPick.show(this, this._configurationService, this._quickInputService, this._notificationService, this._dialogService, this._themeService, placeHolder, defaultEntry, type, name);
2644+
return this._instantiationService.createInstance(TaskQuickPick).show(placeHolder, defaultEntry, type, name);
26432645
}
26442646

26452647
private async _showQuickPick(tasks: Promise<Task[]> | Task[], placeHolder: string, defaultEntry?: ITaskQuickPickEntry, group: boolean = false, sort: boolean = false, selectedEntry?: ITaskQuickPickEntry, additionalEntries?: ITaskQuickPickEntry[], type?: string, name?: string): Promise<ITaskQuickPickEntry | undefined | null> {
@@ -3268,7 +3270,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
32683270
if (this._isTaskEntry(selection)) {
32693271
this._configureTask(selection.task);
32703272
} else if (this._isSettingEntry(selection)) {
3271-
const taskQuickPick = new TaskQuickPick(this, this._configurationService, this._quickInputService, this._notificationService, this._themeService, this._dialogService);
3273+
const taskQuickPick = this._instantiationService.createInstance(TaskQuickPick);
32723274
taskQuickPick.handleSettingOption(selection.settingType);
32733275
} else if (selection.folder && (this._contextService.getWorkbenchState() !== WorkbenchState.EMPTY)) {
32743276
this._openTaskFile(selection.folder.toResource('.vscode/tasks.json'), TaskSourceKind.Workspace);

src/vs/workbench/contrib/tasks/browser/taskQuickPick.ts

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { registerIcon } from 'vs/platform/theme/common/iconRegistry';
2121
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
2222
import { getColorClass, getColorStyleElement } from 'vs/workbench/contrib/terminal/browser/terminalIcon';
2323
import { TaskQuickPickEntryType } from 'vs/workbench/contrib/tasks/browser/abstractTaskService';
24+
import { showWithPinnedItems } from 'vs/platform/quickinput/browser/quickPickPin';
25+
import { IStorageService } from 'vs/platform/storage/common/storage';
2426

2527
export const QUICKOPEN_DETAIL_CONFIG = 'task.quickOpen.detail';
2628
export const QUICKOPEN_SKIP_CONFIG = 'task.quickOpen.skip';
@@ -42,16 +44,19 @@ const SHOW_ALL: string = nls.localize('taskQuickPick.showAll', "Show All Tasks..
4244
export const configureTaskIcon = registerIcon('tasks-list-configure', Codicon.gear, nls.localize('configureTaskIcon', 'Configuration icon in the tasks selection list.'));
4345
const removeTaskIcon = registerIcon('tasks-remove', Codicon.close, nls.localize('removeTaskIcon', 'Icon for remove in the tasks selection list.'));
4446

47+
const runTaskStorageKey = 'runTaskStorageKey';
48+
4549
export class TaskQuickPick extends Disposable {
4650
private _sorter: TaskSorter;
4751
private _topLevelEntries: QuickPickInput<ITaskTwoLevelQuickPickEntry>[] | undefined;
4852
constructor(
49-
private _taskService: ITaskService,
50-
private _configurationService: IConfigurationService,
51-
private _quickInputService: IQuickInputService,
52-
private _notificationService: INotificationService,
53-
private _themeService: IThemeService,
54-
private _dialogService: IDialogService) {
53+
@ITaskService private _taskService: ITaskService,
54+
@IConfigurationService private _configurationService: IConfigurationService,
55+
@IQuickInputService private _quickInputService: IQuickInputService,
56+
@INotificationService private _notificationService: INotificationService,
57+
@IThemeService private _themeService: IThemeService,
58+
@IDialogService private _dialogService: IDialogService,
59+
@IStorageService private _storageService: IStorageService) {
5560
super();
5661
this._sorter = this._taskService.createSorter();
5762
}
@@ -225,8 +230,6 @@ export class TaskQuickPick extends Disposable {
225230
picker.placeholder = placeHolder;
226231
picker.matchOnDescription = true;
227232
picker.ignoreFocusOut = false;
228-
picker.show();
229-
230233
picker.onDidTriggerItemButton(async (context) => {
231234
const task = context.item.task;
232235
if (context.button.iconClass === ThemeIcon.asClassName(removeTaskIcon)) {
@@ -238,7 +241,7 @@ export class TaskQuickPick extends Disposable {
238241
if (indexToRemove >= 0) {
239242
picker.items = [...picker.items.slice(0, indexToRemove), ...picker.items.slice(indexToRemove + 1)];
240243
}
241-
} else {
244+
} else if (context.button.iconClass === ThemeIcon.asClassName(configureTaskIcon)) {
242245
this._quickInputService.cancel();
243246
if (ContributedTask.is(task)) {
244247
this._taskService.customize(task, undefined, true);
@@ -299,6 +302,7 @@ export class TaskQuickPick extends Disposable {
299302

300303
private async _doPickerFirstLevel(picker: IQuickPick<ITaskTwoLevelQuickPickEntry>, taskQuickPickEntries: QuickPickInput<ITaskTwoLevelQuickPickEntry>[]): Promise<Task | ConfiguringTask | string | null | undefined> {
301304
picker.items = taskQuickPickEntries;
305+
showWithPinnedItems(this._storageService, runTaskStorageKey, picker, true);
302306
const firstLevelPickerResult = await new Promise<ITaskTwoLevelQuickPickEntry | undefined | null>(resolve => {
303307
Event.once(picker.onDidAccept)(async () => {
304308
resolve(picker.selectedItems ? picker.selectedItems[0] : undefined);
@@ -317,7 +321,7 @@ export class TaskQuickPick extends Disposable {
317321
picker.value = name || '';
318322
picker.items = await this._getEntriesForProvider(type);
319323
}
320-
picker.show();
324+
showWithPinnedItems(this._storageService, runTaskStorageKey, picker, true);
321325
picker.busy = false;
322326
const secondLevelPickerResult = await new Promise<ITaskTwoLevelQuickPickEntry | undefined | null>(resolve => {
323327
Event.once(picker.onDidAccept)(async () => {
@@ -400,11 +404,4 @@ export class TaskQuickPick extends Disposable {
400404
}
401405
return resolvedTask;
402406
}
403-
404-
static async show(taskService: ITaskService, configurationService: IConfigurationService,
405-
quickInputService: IQuickInputService, notificationService: INotificationService,
406-
dialogService: IDialogService, themeService: IThemeService, placeHolder: string, defaultEntry?: ITaskQuickPickEntry, type?: string, name?: string) {
407-
const taskQuickPick = new TaskQuickPick(taskService, configurationService, quickInputService, notificationService, themeService, dialogService);
408-
return taskQuickPick.show(placeHolder, defaultEntry, type, name);
409-
}
410407
}

src/vs/workbench/contrib/tasks/browser/tasksQuickAccess.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { isString } from 'vs/base/common/types';
1818
import { INotificationService } from 'vs/platform/notification/common/notification';
1919
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
2020
import { IThemeService } from 'vs/platform/theme/common/themeService';
21+
import { IStorageService } from 'vs/platform/storage/common/storage';
2122

2223
export class TasksQuickAccessProvider extends PickerQuickAccessProvider<IPickerQuickAccessItem> {
2324

@@ -30,7 +31,8 @@ export class TasksQuickAccessProvider extends PickerQuickAccessProvider<IPickerQ
3031
@IQuickInputService private _quickInputService: IQuickInputService,
3132
@INotificationService private _notificationService: INotificationService,
3233
@IDialogService private _dialogService: IDialogService,
33-
@IThemeService private _themeService: IThemeService
34+
@IThemeService private _themeService: IThemeService,
35+
@IStorageService private _storageService: IStorageService
3436
) {
3537
super(TasksQuickAccessProvider.PREFIX, {
3638
noResultsPick: {
@@ -44,7 +46,7 @@ export class TasksQuickAccessProvider extends PickerQuickAccessProvider<IPickerQ
4446
return [];
4547
}
4648

47-
const taskQuickPick = new TaskQuickPick(this._taskService, this._configurationService, this._quickInputService, this._notificationService, this._themeService, this._dialogService);
49+
const taskQuickPick = new TaskQuickPick(this._taskService, this._configurationService, this._quickInputService, this._notificationService, this._themeService, this._dialogService, this._storageService);
4850
const topLevelPicks = await taskQuickPick.getTopLevelEntries();
4951
const taskPicks: Array<IPickerQuickAccessItem | IQuickPickSeparator> = [];
5052

src/vs/workbench/contrib/tasks/electron-sandbox/taskService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ export class TaskService extends AbstractTaskService {
125125
logService,
126126
themeService,
127127
lifecycleService,
128-
remoteAgentService
128+
remoteAgentService,
129+
instantiationService
129130
);
130131
this._register(lifecycleService.onBeforeShutdown(event => event.veto(this.beforeShutdown(), 'veto.tasks')));
131132
}

0 commit comments

Comments
 (0)