]> git.lizzy.rs Git - rust.git/commitdiff
Send the config from the client
authorKirill Bulatov <mail4score@gmail.com>
Thu, 19 Mar 2020 22:42:18 +0000 (00:42 +0200)
committerKirill Bulatov <mail4score@gmail.com>
Mon, 30 Mar 2020 10:39:14 +0000 (13:39 +0300)
editors/code/src/client.ts
editors/code/src/ctx.ts

index 98f2f232f4613f5e82624eedbea103e80a20aa5a..0d0832c44fc77ae75494fe784a4b1c364c9303cf 100644 (file)
@@ -5,6 +5,31 @@ import { Config } from './config';
 import { CallHierarchyFeature } from 'vscode-languageclient/lib/callHierarchy.proposed';
 import { SemanticTokensFeature, DocumentSemanticsTokensSignature } from 'vscode-languageclient/lib/semanticTokens.proposed';
 
+export function configToOptions(config: Config): object {
+    return {
+        publishDecorations: !config.highlightingSemanticTokens,
+        lruCapacity: config.lruCapacity,
+
+        inlayHintsType: config.inlayHints.typeHints,
+        inlayHintsParameter: config.inlayHints.parameterHints,
+        inlayHintsChaining: config.inlayHints.chainingHints,
+        inlayHintsMaxLength: config.inlayHints.maxLength,
+
+        cargoWatchEnable: config.cargoWatchOptions.enable,
+        cargoWatchArgs: config.cargoWatchOptions.arguments,
+        cargoWatchCommand: config.cargoWatchOptions.command,
+        cargoWatchAllTargets: config.cargoWatchOptions.allTargets,
+
+        excludeGlobs: config.excludeGlobs,
+        useClientWatching: config.useClientWatching,
+        featureFlags: config.featureFlags,
+        withSysroot: config.withSysroot,
+        cargoFeatures: config.cargoFeatures,
+        rustfmtArgs: config.rustfmtArgs,
+        vscodeLldb: vscode.extensions.getExtension("vadimcn.vscode-lldb") != null,
+    };
+}
+
 export async function createClient(config: Config, serverPath: string): Promise<lc.LanguageClient> {
     // '.' Is the fallback if no folder is open
     // TODO?: Workspace folders support Uri's (eg: file://test.txt).
@@ -22,32 +47,10 @@ export async function createClient(config: Config, serverPath: string): Promise<
     const traceOutputChannel = vscode.window.createOutputChannel(
         'Rust Analyzer Language Server Trace',
     );
-    const cargoWatchOpts = config.cargoWatchOptions;
 
     const clientOptions: lc.LanguageClientOptions = {
         documentSelector: [{ scheme: 'file', language: 'rust' }],
-        initializationOptions: {
-            publishDecorations: !config.highlightingSemanticTokens,
-            lruCapacity: config.lruCapacity,
-
-            inlayHintsType: config.inlayHints.typeHints,
-            inlayHintsParameter: config.inlayHints.parameterHints,
-            inlayHintsChaining: config.inlayHints.chainingHints,
-            inlayHintsMaxLength: config.inlayHints.maxLength,
-
-            cargoWatchEnable: cargoWatchOpts.enable,
-            cargoWatchArgs: cargoWatchOpts.arguments,
-            cargoWatchCommand: cargoWatchOpts.command,
-            cargoWatchAllTargets: cargoWatchOpts.allTargets,
-
-            excludeGlobs: config.excludeGlobs,
-            useClientWatching: config.useClientWatching,
-            featureFlags: config.featureFlags,
-            withSysroot: config.withSysroot,
-            cargoFeatures: config.cargoFeatures,
-            rustfmtArgs: config.rustfmtArgs,
-            vscodeLldb: vscode.extensions.getExtension("vadimcn.vscode-lldb") != null,
-        },
+        initializationOptions: configToOptions(config),
         traceOutputChannel,
         middleware: {
             // Workaround for https://github.com/microsoft/vscode-languageserver-node/issues/576
index 84c170ea8bde8d30c9445f548af20854ee0002ff..934638c6df9e641e770249653aefd6b539e7dee9 100644 (file)
@@ -2,7 +2,7 @@ import * as vscode from 'vscode';
 import * as lc from 'vscode-languageclient';
 
 import { Config } from './config';
-import { createClient } from './client';
+import { createClient, configToOptions } from './client';
 import { isRustEditor, RustEditor } from './util';
 
 export class Ctx {
@@ -20,6 +20,7 @@ export class Ctx {
         const res = new Ctx(config, extCtx, client, serverPath);
         res.pushCleanup(client.start());
         await client.onReady();
+        client.onRequest('workspace/configuration', _ => [configToOptions(config)]);
         return res;
     }