@jupyterlab/lsp
Version:
61 lines • 1.76 kB
JavaScript
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
import { Signal } from '@lumino/signaling';
import mergeWith from 'lodash.mergewith';
/**
* Class to manager the registered features of the language servers.
*/
export class FeatureManager {
constructor() {
/**
* List of registered features
*/
this.features = [];
this._featureRegistered = new Signal(this);
}
/**
* Signal emitted when a new feature is registered.
*/
get featureRegistered() {
return this._featureRegistered;
}
/**
* Register a new feature, skip if it is already registered.
*/
register(feature) {
if (this.features.some(ft => ft.id === feature.id)) {
console.warn(`Feature with id ${feature.id} is already registered, skipping.`);
}
else {
this.features.push(feature);
this._featureRegistered.emit(feature);
}
}
/**
* Get the capabilities of all clients.
*/
clientCapabilities() {
let capabilities = {};
for (const feature of this.features) {
if (!feature.capabilities) {
continue;
}
capabilities = mergeWith(capabilities, feature.capabilities);
}
return capabilities;
}
/**
* Get the extension factories of all clients.
*/
extensionFactories() {
const factories = [];
for (const feature of this.features) {
if (!feature.extensionFactory) {
continue;
}
factories.push(feature.extensionFactory);
}
return factories;
}
}
//# sourceMappingURL=feature.js.map