diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index c1b069e85a8..a32810ebda4 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1055,6 +1055,15 @@ declare module 'vscode' { } //#endregion + //#region Alex - extensions.all change event + export namespace extensions { + /** + * An event which fires when `extensions.all` changes. + */ + export const onDidChange: Event; + } + //#endregion + //#region Tree View export interface TreeView { diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 249c88fa891..ebdf93c02d4 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -272,6 +272,9 @@ export function createApiFactory( }, get all(): Extension[] { return extensionRegistry.getAllExtensionDescriptions().map((desc) => new Extension(extensionService, desc)); + }, + get onDidChange() { + return extensionRegistry.onDidChange; } }; diff --git a/src/vs/workbench/services/extensions/node/extensionDescriptionRegistry.ts b/src/vs/workbench/services/extensions/node/extensionDescriptionRegistry.ts index ad385a196c9..3eddf8c90ed 100644 --- a/src/vs/workbench/services/extensions/node/extensionDescriptionRegistry.ts +++ b/src/vs/workbench/services/extensions/node/extensionDescriptionRegistry.ts @@ -5,8 +5,12 @@ import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; +import { Emitter } from 'vs/base/common/event'; export class ExtensionDescriptionRegistry { + private readonly _onDidChange = new Emitter(); + public readonly onDidChange = this._onDidChange.event; + private _extensionDescriptions: IExtensionDescription[]; private _extensionsMap: Map; private _extensionsArr: IExtensionDescription[]; @@ -53,6 +57,7 @@ export class ExtensionDescriptionRegistry { extensionIds.forEach(extensionId => toKeep.add(ExtensionIdentifier.toKey(extensionId))); this._extensionDescriptions = this._extensionDescriptions.filter(extension => toKeep.has(ExtensionIdentifier.toKey(extension.identifier))); this._initialize(); + this._onDidChange.fire(undefined); } public deltaExtensions(toAdd: IExtensionDescription[], toRemove: ExtensionIdentifier[]) { @@ -61,6 +66,7 @@ export class ExtensionDescriptionRegistry { toRemove.forEach(extensionId => toRemoveSet.add(ExtensionIdentifier.toKey(extensionId))); this._extensionDescriptions = this._extensionDescriptions.filter(extension => !toRemoveSet.has(ExtensionIdentifier.toKey(extension.identifier))); this._initialize(); + this._onDidChange.fire(undefined); } public containsActivationEvent(activationEvent: string): boolean {