/* -------------------------------------------------------------------------------------------- * 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;