Skip to content

Commit 03a3d59

Browse files
committed
Add onTaskProvide and onTaskResolve activation events
1 parent 79f7e72 commit 03a3d59

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

src/vs/vscode.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6581,6 +6581,10 @@ declare module 'vscode' {
65816581
/**
65826582
* Register a task provider.
65836583
*
6584+
* When looking for tasks, VS Code fires an `onTaskProvide:taskType` activation event.
6585+
* When a task is being resolved, VS Code fires an `onTaskResolve:taskType` activation event.
6586+
* Your extension can listen to these events to make sure the task provider is available.
6587+
*
65846588
* @param type The task kind type this provider is registered for.
65856589
* @param provider A task provider.
65866590
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
@@ -10391,6 +10395,10 @@ declare module 'vscode' {
1039110395
*
1039210396
* @deprecated Use the corresponding function on the `tasks` namespace instead
1039310397
*
10398+
* When looking for tasks, VS Code fires an `onTaskProvide:taskType` activation event.
10399+
* When a task is being resolved, VS Code fires an `onTaskResolve:taskType` activation event.
10400+
* Your extension can listen to these events to make sure the task provider is available.
10401+
*
1039410402
* @param type The task kind type this provider is registered for.
1039510403
* @param provider A task provider.
1039610404
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,9 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
584584

585585
public async tryResolveTask(configuringTask: ConfiguringTask): Promise<Task | undefined> {
586586
await Promise.all([this.extensionService.activateByEvent('onCommand:workbench.action.tasks.runTask'), this.extensionService.whenInstalledExtensionsRegistered()]);
587+
if (configuringTask.type) {
588+
await Promise.all([this.extensionService.activateByEvent(`onTaskResolve:${configuringTask.type}`), this.extensionService.whenInstalledExtensionsRegistered()]);
589+
}
587590
let matchingProvider: ITaskProvider | undefined;
588591
let matchingProviderUnavailable: boolean = false;
589592
for (const [handle, provider] of this._providers) {
@@ -1633,12 +1636,19 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
16331636

16341637
private getGroupedTasks(type?: string): Promise<TaskMap> {
16351638
const needsRecentTasksMigration = this.needsRecentTasksMigration();
1639+
const isProvideTasksEnabled = this.isProvideTasksEnabled();
16361640
return Promise.all([this.extensionService.activateByEvent('onCommand:workbench.action.tasks.runTask'), this.extensionService.whenInstalledExtensionsRegistered()]).then(() => {
16371641
let validTypes: IStringDictionary<boolean> = Object.create(null);
1638-
TaskDefinitionRegistry.all().forEach(definition => validTypes[definition.taskType] = true);
16391642
validTypes['shell'] = true;
16401643
validTypes['process'] = true;
1641-
return new Promise<TaskSet[]>(resolve => {
1644+
const activationPromises: Promise<void>[] = [];
1645+
TaskDefinitionRegistry.all().forEach(({ taskType }) => {
1646+
validTypes[taskType] = true;
1647+
if (isProvideTasksEnabled && (type === undefined || type === taskType)) {
1648+
activationPromises.push(this.extensionService.activateByEvent(`onTaskProvide:${taskType}`));
1649+
}
1650+
});
1651+
return Promise.all(activationPromises).then(() => new Promise<TaskSet[]>(resolve => {
16421652
let result: TaskSet[] = [];
16431653
let counter: number = 0;
16441654
let done = (value: TaskSet | undefined) => {
@@ -1692,7 +1702,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
16921702
} else {
16931703
resolve(result);
16941704
}
1695-
});
1705+
}));
16961706
}).then((contributedTaskSets) => {
16971707
let result: TaskMap = new TaskMap();
16981708
let contributedTasks: TaskMap = new TaskMap();

src/vs/workbench/services/extensions/common/extensionsRegistry.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,16 @@ export const schema: IJSONSchema = {
305305
body: 'onCustomEditor:${9:viewType}',
306306
description: nls.localize('vscode.extension.activationEvents.onCustomEditor', 'An activation event emitted whenever the specified custom editor becomes visible.'),
307307
},
308+
{
309+
label: 'onTaskProvide',
310+
description: nls.localize('vscode.extension.activationEvents.onTaskProvide', 'An activation event emitted whenever VS Code is looking for tasks of a given (or any) type.'),
311+
body: 'onTaskResolve:${1:taskType}'
312+
},
313+
{
314+
label: 'onTaskResolve',
315+
description: nls.localize('vscode.extension.activationEvents.onTaskResolve', 'An activation event emitted whenever a task with the given type gets resolved.'),
316+
body: 'onTaskResolve:${1:taskType}'
317+
},
308318
{
309319
label: 'onNotebook',
310320
body: 'onNotebook:${10:viewType}',

0 commit comments

Comments
 (0)