Skip to content

Commit ff9887b

Browse files
committed
Add onTaskProvide and onTaskResolve activation events
1 parent c48802e commit ff9887b

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
@@ -6931,6 +6931,10 @@ declare module 'vscode' {
69316931
/**
69326932
* Register a task provider.
69336933
*
6934+
* When looking for tasks, VS Code fires an `onTaskProvide:taskType` activation event.
6935+
* When a task is being resolved, VS Code fires an `onTaskResolve:taskType` activation event.
6936+
* Your extension can listen to these events to make sure the task provider is available.
6937+
*
69346938
* @param type The task kind type this provider is registered for.
69356939
* @param provider A task provider.
69366940
* @return A {@link Disposable} that unregisters this provider when being disposed.
@@ -10928,6 +10932,10 @@ declare module 'vscode' {
1092810932
*
1092910933
* @deprecated Use the corresponding function on the `tasks` namespace instead
1093010934
*
10935+
* When looking for tasks, VS Code fires an `onTaskProvide:taskType` activation event.
10936+
* When a task is being resolved, VS Code fires an `onTaskResolve:taskType` activation event.
10937+
* Your extension can listen to these events to make sure the task provider is available.
10938+
*
1093110939
* @param type The task kind type this provider is registered for.
1093210940
* @param provider A task provider.
1093310941
* @return A {@link 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
@@ -607,6 +607,9 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
607607
return;
608608
}
609609
await Promise.all([this.extensionService.activateByEvent('onCommand:workbench.action.tasks.runTask'), this.extensionService.whenInstalledExtensionsRegistered()]);
610+
if (configuringTask.type) {
611+
await Promise.all([this.extensionService.activateByEvent(`onTaskResolve:${configuringTask.type}`), this.extensionService.whenInstalledExtensionsRegistered()]);
612+
}
610613
let matchingProvider: ITaskProvider | undefined;
611614
let matchingProviderUnavailable: boolean = false;
612615
for (const [handle, provider] of this._providers) {
@@ -1677,12 +1680,19 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
16771680

16781681
private getGroupedTasks(type?: string): Promise<TaskMap> {
16791682
const needsRecentTasksMigration = this.needsRecentTasksMigration();
1683+
const isProvideTasksEnabled = this.isProvideTasksEnabled();
16801684
return Promise.all([this.extensionService.activateByEvent('onCommand:workbench.action.tasks.runTask'), this.extensionService.whenInstalledExtensionsRegistered()]).then(() => {
16811685
let validTypes: IStringDictionary<boolean> = Object.create(null);
1682-
TaskDefinitionRegistry.all().forEach(definition => validTypes[definition.taskType] = true);
16831686
validTypes['shell'] = true;
16841687
validTypes['process'] = true;
1685-
return new Promise<TaskSet[]>(resolve => {
1688+
const activationPromises: Promise<void>[] = [];
1689+
TaskDefinitionRegistry.all().forEach(({ taskType }) => {
1690+
validTypes[taskType] = true;
1691+
if (isProvideTasksEnabled && (type === undefined || type === taskType)) {
1692+
activationPromises.push(this.extensionService.activateByEvent(`onTaskProvide:${taskType}`));
1693+
}
1694+
});
1695+
return Promise.all(activationPromises).then(() => new Promise<TaskSet[]>(resolve => {
16861696
let result: TaskSet[] = [];
16871697
let counter: number = 0;
16881698
let done = (value: TaskSet | undefined) => {
@@ -1736,7 +1746,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
17361746
} else {
17371747
resolve(result);
17381748
}
1739-
});
1749+
}));
17401750
}).then((contributedTaskSets) => {
17411751
let result: TaskMap = new TaskMap();
17421752
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
@@ -309,6 +309,16 @@ export const schema: IJSONSchema = {
309309
body: 'onCustomEditor:${9:viewType}',
310310
description: nls.localize('vscode.extension.activationEvents.onCustomEditor', 'An activation event emitted whenever the specified custom editor becomes visible.'),
311311
},
312+
{
313+
label: 'onTaskProvide',
314+
description: nls.localize('vscode.extension.activationEvents.onTaskProvide', 'An activation event emitted whenever VS Code is looking for tasks of a given (or any) type.'),
315+
body: 'onTaskResolve:${1:taskType}'
316+
},
317+
{
318+
label: 'onTaskResolve',
319+
description: nls.localize('vscode.extension.activationEvents.onTaskResolve', 'An activation event emitted whenever a task with the given type gets resolved.'),
320+
body: 'onTaskResolve:${1:taskType}'
321+
},
312322
{
313323
label: 'onNotebook',
314324
body: 'onNotebook:${1:type}',

0 commit comments

Comments
 (0)