From 52a8a79ca08a3a52053efa860d07a7b6e82f2c83 Mon Sep 17 00:00:00 2001 From: Dirk Baeumer Date: Mon, 6 Nov 2017 11:05:19 +0100 Subject: [PATCH] Make the client capability checking more explicit. --- lsp-multi-root-sample/server/src/server.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lsp-multi-root-sample/server/src/server.ts b/lsp-multi-root-sample/server/src/server.ts index 4129b46a..1fe8ded6 100644 --- a/lsp-multi-root-sample/server/src/server.ts +++ b/lsp-multi-root-sample/server/src/server.ts @@ -6,7 +6,7 @@ import { createConnection, TextDocuments, TextDocument, Diagnostic, DiagnosticSeverity, - ProposedFeatures, InitializeParams + ProposedFeatures, InitializeParams, Proposed } from 'vscode-languageserver'; // Create a connection for the server. The connection uses Node's IPC as a transport @@ -20,17 +20,13 @@ let hasConfigurationCapability = false; let hasWorkspaceFolderCapability = false; connection.onInitialize((params: InitializeParams) => { - function hasClientCapability(...keys: string[]) { - let c = params.capabilities; - for (let i = 0; c && i < keys.length; i++) { - c = c[keys[i]]; - } - return !!c; - } + let capabilities = params.capabilities; + // Does the client support the `workspace/configuration` request? // If not, we will fall back using global settings - hasConfigurationCapability = hasClientCapability('workspace', 'configuration'); - hasWorkspaceFolderCapability = hasClientCapability('workspace', 'workspaceFolders'); + hasWorkspaceFolderCapability = (capabilities as Proposed.WorkspaceFoldersClientCapabilities).workspace && (capabilities as Proposed.WorkspaceFoldersClientCapabilities).workspace.workspaceFolders; + hasConfigurationCapability = (capabilities as Proposed.ConfigurationClientCapabilities).workspace && (capabilities as Proposed.ConfigurationClientCapabilities).workspace.configuration; + return { capabilities: { textDocumentSync: documents.syncKind