44 lines
2.4 KiB
JavaScript
44 lines
2.4 KiB
JavaScript
/* --------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
* ------------------------------------------------------------------------------------------ */
|
|
'use strict';
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.WorkspaceFoldersFeature = void 0;
|
|
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
const WorkspaceFoldersFeature = (Base) => {
|
|
return class extends Base {
|
|
constructor() {
|
|
super();
|
|
this._notificationIsAutoRegistered = false;
|
|
}
|
|
initialize(capabilities) {
|
|
super.initialize(capabilities);
|
|
let workspaceCapabilities = capabilities.workspace;
|
|
if (workspaceCapabilities && workspaceCapabilities.workspaceFolders) {
|
|
this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter();
|
|
this.connection.onNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, (params) => {
|
|
this._onDidChangeWorkspaceFolders.fire(params.event);
|
|
});
|
|
}
|
|
}
|
|
fillServerCapabilities(capabilities) {
|
|
super.fillServerCapabilities(capabilities);
|
|
const changeNotifications = capabilities.workspace?.workspaceFolders?.changeNotifications;
|
|
this._notificationIsAutoRegistered = changeNotifications === true || typeof changeNotifications === 'string';
|
|
}
|
|
getWorkspaceFolders() {
|
|
return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type);
|
|
}
|
|
get onDidChangeWorkspaceFolders() {
|
|
if (!this._onDidChangeWorkspaceFolders) {
|
|
throw new Error('Client doesn\'t support sending workspace folder change events.');
|
|
}
|
|
if (!this._notificationIsAutoRegistered && !this._unregistration) {
|
|
this._unregistration = this.connection.client.register(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type);
|
|
}
|
|
return this._onDidChangeWorkspaceFolders.event;
|
|
}
|
|
};
|
|
};
|
|
exports.WorkspaceFoldersFeature = WorkspaceFoldersFeature;
|