From 69de7e2fd71c3a808f0ac856d7b105eeb210f169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Ochagav=C3=ADa?= Date: Sun, 7 Oct 2018 22:44:25 +0200 Subject: Refactor vscode extension --- editors/code/src/server.ts | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 editors/code/src/server.ts (limited to 'editors/code/src/server.ts') diff --git a/editors/code/src/server.ts b/editors/code/src/server.ts new file mode 100644 index 000000000..c1c95e008 --- /dev/null +++ b/editors/code/src/server.ts @@ -0,0 +1,74 @@ +import * as vscode from 'vscode'; +import * as lc from 'vscode-languageclient' + +import { Highlighter, Decoration } from './highlighting'; + +export class Config { + highlightingOn = true; + + constructor() { + vscode.workspace.onDidChangeConfiguration(_ => this.userConfigChanged()); + this.userConfigChanged(); + } + + userConfigChanged() { + let config = vscode.workspace.getConfiguration('ra-lsp'); + if (config.has('highlightingOn')) { + this.highlightingOn = config.get('highlightingOn') as boolean; + }; + + if (!this.highlightingOn) { + Server.highlighter.removeHighlights(); + } + } +} + +export class Server { + static highlighter = new Highlighter(); + static config = new Config(); + static client: lc.LanguageClient; + + + static start() { + let run: lc.Executable = { + command: "ra_lsp_server", + options: { cwd: "." } + } + let serverOptions: lc.ServerOptions = { + run, + debug: run + }; + + let clientOptions: lc.LanguageClientOptions = { + documentSelector: [{ scheme: 'file', language: 'rust' }], + }; + + Server.client = new lc.LanguageClient( + 'ra-lsp', + 'rust-analyzer languge server', + serverOptions, + clientOptions, + ); + Server.client.onReady().then(() => { + Server.client.onNotification( + "m/publishDecorations", + (params: PublishDecorationsParams) => { + let editor = vscode.window.visibleTextEditors.find( + (editor) => editor.document.uri.toString() == params.uri + ) + if (!Server.config.highlightingOn || !editor) return; + Server.highlighter.setHighlights( + editor, + params.decorations, + ) + } + ) + }) + Server.client.start(); + } +} + +interface PublishDecorationsParams { + uri: string, + decorations: Decoration[], +} -- cgit v1.2.3