Closed
Description
We want to be able to dynamically install/enable or uninstall/disable extensions. For this, we need to adopt that extension points are dynamic. This is done by adding isDynamic: true
to the registerExtensionPoint
call.
When an extension is added/removed at runtime, all of its extension points will have their handlers invoked again. The handler conforms to the following type:
export interface IExtensionPointHandler<T> {
(extensions: IExtensionPointUser<T>[], delta: ExtensionPointUserDelta<T>): void;
}
The first argument will always be the complete list of extensions that use the extension point and the second (newly added) argument will be the delta since last time the handler was called.
You can test this by having an extension that exercises your extension point and enabling/disabling the extension.
Extension points:
- viewsContainers @sandy081
- views @sandy081
- debuggers @isidorn @weinand (let's talk)
- breakpoints @isidorn @weinand
- localizations @sandy081 (should probably never be dynamic)
- snippets @jrieken
- problemPatterns @dbaeumer @alexr00
- problemMatchers @dbaeumer @alexr00
- taskDefinitions @dbaeumer @alexr00
- commands @jrieken
- menus @jrieken
- configurationDefaults @sandy081
- configuration @sandy081
- jsonValidation @aeschli
- keybindings @alexandrudima
- languages @alexandrudima
- grammars @alexandrudima
- colors @aeschli
- themes @aeschli
- iconThemes @aeschli
- resourceLabelFormatters @isidorn