coc.nvim
Version:
LSP based intellisense engine for neovim & vim8.
91 lines • 3.7 kB
JavaScript
/* --------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
* ------------------------------------------------------------------------------------------ */
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
const workspace_1 = tslib_1.__importDefault(require("../workspace"));
const UUID = tslib_1.__importStar(require("./utils/uuid"));
const logger = require('../util/logger')('language-client-workspaceFolder');
function access(target, key) {
if (target === void 0) {
return undefined;
}
return target[key];
}
class WorkspaceFoldersFeature {
constructor(_client) {
this._client = _client;
this._listeners = new Map();
}
get messages() {
return vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type;
}
fillInitializeParams(params) {
params.workspaceFolders = workspace_1.default.workspaceFolders;
}
fillClientCapabilities(capabilities) {
capabilities.workspace = capabilities.workspace || {};
capabilities.workspace.workspaceFolders = true;
}
initialize(capabilities) {
let client = this._client;
client.onRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, (token) => {
let workspaceFolders = () => {
let { workspaceFolders } = workspace_1.default;
return workspaceFolders.length ? workspaceFolders : null;
};
let middleware = client.clientOptions.middleware.workspace;
return middleware && middleware.workspaceFolders
? middleware.workspaceFolders(token, workspaceFolders)
: workspaceFolders(token);
});
let value = access(access(access(capabilities, 'workspace'), 'workspaceFolders'), 'changeNotifications');
let id;
if (typeof value === 'string') {
id = value;
}
else if (value === true) {
id = UUID.generateUuid();
}
if (id) {
this.register(this.messages, {
id,
registerOptions: undefined
});
}
}
register(_message, data) {
let id = data.id;
let client = this._client;
let disposable = workspace_1.default.onDidChangeWorkspaceFolders(event => {
let didChangeWorkspaceFolders = (event) => {
let params = { event };
this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, params);
};
let middleware = client.clientOptions.middleware.workspace;
middleware && middleware.didChangeWorkspaceFolders
? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders)
: didChangeWorkspaceFolders(event);
});
this._listeners.set(id, disposable);
}
unregister(id) {
let disposable = this._listeners.get(id);
if (disposable === void 0) {
return;
}
this._listeners.delete(id);
disposable.dispose();
}
dispose() {
for (let disposable of this._listeners.values()) {
disposable.dispose();
}
this._listeners.clear();
}
}
exports.WorkspaceFoldersFeature = WorkspaceFoldersFeature;
//# sourceMappingURL=workspaceFolders.js.map