From 8c4aab0c803e3962ffc2c42538df1d29dd3a8ef0 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 19 Mar 2020 01:39:12 +0200 Subject: Client side draft --- editors/code/src/main.ts | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'editors/code/src') diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index 980ed925b..63d145db0 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts @@ -91,6 +91,12 @@ export async function activate(context: vscode.ExtensionContext) { activateHighlighting(ctx); } activateInlayHints(ctx); + + vscode.workspace.onDidChangeConfiguration( + _ => ctx?.client?.sendNotification('workspace/didChangeConfiguration', { settings: "" }), + null, + ctx?.subscriptions, + ); } export async function deactivate() { -- cgit v1.2.3 From 019f269a0a4f42854c84e749fd5bb24177eafff9 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 19 Mar 2020 23:56:32 +0200 Subject: Process configuration response draft --- editors/code/src/config.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'editors/code/src') diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index e77462c1b..501997fef 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts @@ -12,9 +12,9 @@ export class Config { private readonly requiresReloadOpts = [ "serverPath", "cargoFeatures", - "cargo-watch", - "highlighting.semanticTokens", - "inlayHints", + "excludeGlobs", + "useClientWatching", + "highlighting", "updates.channel", ] .map(opt => `${this.rootSection}.${opt}`); -- cgit v1.2.3 From a9dd4427333d410bebf8e0923d5907b2a31efb50 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 20 Mar 2020 00:42:18 +0200 Subject: Send the config from the client --- editors/code/src/client.ts | 49 ++++++++++++++++++++++++---------------------- editors/code/src/ctx.ts | 3 ++- 2 files changed, 28 insertions(+), 24 deletions(-) (limited to 'editors/code/src') diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts index 98f2f232f..0d0832c44 100644 --- a/editors/code/src/client.ts +++ b/editors/code/src/client.ts @@ -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 { // '.' 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 diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts index 84c170ea8..934638c6d 100644 --- a/editors/code/src/ctx.ts +++ b/editors/code/src/ctx.ts @@ -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; } -- cgit v1.2.3 From 8a23bec2cdd008ff04cb01cdcca1f379f53156a3 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Sat, 21 Mar 2020 00:01:47 +0200 Subject: Style fixes --- editors/code/src/client.ts | 4 ++-- editors/code/src/ctx.ts | 4 ++-- editors/code/src/inlay_hints.ts | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) (limited to 'editors/code/src') diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts index 0d0832c44..34965e2fb 100644 --- a/editors/code/src/client.ts +++ b/editors/code/src/client.ts @@ -5,7 +5,7 @@ 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 { +export function configToServerOptions(config: Config): object { return { publishDecorations: !config.highlightingSemanticTokens, lruCapacity: config.lruCapacity, @@ -50,7 +50,7 @@ export async function createClient(config: Config, serverPath: string): Promise< const clientOptions: lc.LanguageClientOptions = { documentSelector: [{ scheme: 'file', language: 'rust' }], - initializationOptions: configToOptions(config), + initializationOptions: configToServerOptions(config), traceOutputChannel, middleware: { // Workaround for https://github.com/microsoft/vscode-languageserver-node/issues/576 diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts index 934638c6d..d2f49cd23 100644 --- a/editors/code/src/ctx.ts +++ b/editors/code/src/ctx.ts @@ -2,7 +2,7 @@ import * as vscode from 'vscode'; import * as lc from 'vscode-languageclient'; import { Config } from './config'; -import { createClient, configToOptions } from './client'; +import { createClient, configToServerOptions } from './client'; import { isRustEditor, RustEditor } from './util'; export class Ctx { @@ -20,7 +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)]); + client.onRequest('workspace/configuration', _ => [configToServerOptions(config)]); return res; } diff --git a/editors/code/src/inlay_hints.ts b/editors/code/src/inlay_hints.ts index 542d1f367..98663e0e3 100644 --- a/editors/code/src/inlay_hints.ts +++ b/editors/code/src/inlay_hints.ts @@ -18,6 +18,8 @@ export function activateInlayHints(ctx: Ctx) { return this.dispose(); } if (!this.updater) this.updater = new HintsUpdater(ctx); + + this.updater.syncCacheAndRenderHints(); }, dispose() { this.updater?.dispose(); @@ -124,7 +126,7 @@ class HintsUpdater implements Disposable { this.syncCacheAndRenderHints(); } - private syncCacheAndRenderHints() { + public syncCacheAndRenderHints() { // FIXME: make inlayHints request pass an array of files? this.sourceFiles.forEach((file, uri) => this.fetchHints(file).then(hints => { if (!hints) return; -- cgit v1.2.3 From b892a48740eef7a505bfbe2213c42c71e87f0bea Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Sun, 22 Mar 2020 00:40:07 +0200 Subject: Code review fixes Co-Authored-By: Veetaha --- editors/code/src/client.ts | 2 +- editors/code/src/inlay_hints.ts | 10 ++++++---- editors/code/src/main.ts | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'editors/code/src') diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts index 34965e2fb..d72ecc58f 100644 --- a/editors/code/src/client.ts +++ b/editors/code/src/client.ts @@ -5,7 +5,7 @@ import { Config } from './config'; import { CallHierarchyFeature } from 'vscode-languageclient/lib/callHierarchy.proposed'; import { SemanticTokensFeature, DocumentSemanticsTokensSignature } from 'vscode-languageclient/lib/semanticTokens.proposed'; -export function configToServerOptions(config: Config): object { +export function configToServerOptions(config: Config) { return { publishDecorations: !config.highlightingSemanticTokens, lruCapacity: config.lruCapacity, diff --git a/editors/code/src/inlay_hints.ts b/editors/code/src/inlay_hints.ts index 98663e0e3..6a8bd942e 100644 --- a/editors/code/src/inlay_hints.ts +++ b/editors/code/src/inlay_hints.ts @@ -17,9 +17,11 @@ export function activateInlayHints(ctx: Ctx) { ) { return this.dispose(); } - if (!this.updater) this.updater = new HintsUpdater(ctx); - - this.updater.syncCacheAndRenderHints(); + if (this.updater) { + this.updater.syncCacheAndRenderHints(); + } else { + this.updater = new HintsUpdater(ctx); + } }, dispose() { this.updater?.dispose(); @@ -126,7 +128,7 @@ class HintsUpdater implements Disposable { this.syncCacheAndRenderHints(); } - public syncCacheAndRenderHints() { + syncCacheAndRenderHints() { // FIXME: make inlayHints request pass an array of files? this.sourceFiles.forEach((file, uri) => this.fetchHints(file).then(hints => { if (!hints) return; diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index 63d145db0..a46dbde33 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts @@ -95,7 +95,7 @@ export async function activate(context: vscode.ExtensionContext) { vscode.workspace.onDidChangeConfiguration( _ => ctx?.client?.sendNotification('workspace/didChangeConfiguration', { settings: "" }), null, - ctx?.subscriptions, + ctx.subscriptions, ); } -- cgit v1.2.3