about summary refs log tree commit diff
path: root/editors/code/src
diff options
context:
space:
mode:
authorVeetaha <gerzoh1@gmail.com>2020-02-25 00:49:54 +0200
committerVeetaha <gerzoh1@gmail.com>2020-02-25 00:49:54 +0200
commit8c4409b3bb6dcdc439c7ea98dfb89c0181969323 (patch)
tree28ed5a364c6c04692157fb52a4ed5d030fbe902b /editors/code/src
parent21ab13396672a4ad75b93bbb73af02d019ef918b (diff)
downloadrust-8c4409b3bb6dcdc439c7ea98dfb89c0181969323.tar.gz
rust-8c4409b3bb6dcdc439c7ea98dfb89c0181969323.zip
vscode: migrate highlighting to rust-analyzer-api.ts
Diffstat (limited to 'editors/code/src')
-rw-r--r--editors/code/src/highlighting.ts60
1 files changed, 21 insertions, 39 deletions
diff --git a/editors/code/src/highlighting.ts b/editors/code/src/highlighting.ts
index 77b4a1a68b8..3e0cbdc5616 100644
--- a/editors/code/src/highlighting.ts
+++ b/editors/code/src/highlighting.ts
@@ -1,5 +1,5 @@
 import * as vscode from 'vscode';
-import * as lc from 'vscode-languageclient';
+import * as ra from './rust-analyzer-api';
 
 import { ColorTheme, TextMateRuleSettings } from './color_theme';
 
@@ -8,29 +8,25 @@ import { sendRequestWithRetry } from './util';
 
 export function activateHighlighting(ctx: Ctx) {
     const highlighter = new Highlighter(ctx);
-    const client = ctx.client;
-    if (client != null) {
-        client.onNotification(
-            'rust-analyzer/publishDecorations',
-            (params: PublishDecorationsParams) => {
-                if (!ctx.config.highlightingOn) return;
-
-                const targetEditor = vscode.window.visibleTextEditors.find(
-                    editor => {
-                        const unescapedUri = unescape(
-                            editor.document.uri.toString(),
-                        );
-                        // Unescaped URI looks like:
-                        // file:///c:/Workspace/ra-test/src/main.rs
-                        return unescapedUri === params.uri;
-                    },
-                );
-                if (!targetEditor) return;
 
-                highlighter.setHighlights(targetEditor, params.decorations);
+    ctx.client.onNotification(ra.publishDecorations, params => {
+        if (!ctx.config.highlightingOn) return;
+
+        const targetEditor = vscode.window.visibleTextEditors.find(
+            editor => {
+                const unescapedUri = unescape(
+                    editor.document.uri.toString(),
+                );
+                // Unescaped URI looks like:
+                // file:///c:/Workspace/ra-test/src/main.rs
+                return unescapedUri === params.uri;
             },
         );
-    }
+        if (!targetEditor) return;
+
+        highlighter.setHighlights(targetEditor, params.decorations);
+    });
+
 
     vscode.workspace.onDidChangeConfiguration(
         _ => highlighter.removeHighlights(),
@@ -45,13 +41,10 @@ export function activateHighlighting(ctx: Ctx) {
             const client = ctx.client;
             if (!client) return;
 
-            const params: lc.TextDocumentIdentifier = {
-                uri: editor.document.uri.toString(),
-            };
-            const decorations = await sendRequestWithRetry<Decoration[]>(
+            const decorations = await sendRequestWithRetry(
                 client,
-                'rust-analyzer/decorationsRequest',
-                params,
+                ra.decorationsRequest,
+                { uri: editor.document.uri.toString() },
             );
             highlighter.setHighlights(editor, decorations);
         },
@@ -60,17 +53,6 @@ export function activateHighlighting(ctx: Ctx) {
     );
 }
 
-interface PublishDecorationsParams {
-    uri: string;
-    decorations: Decoration[];
-}
-
-interface Decoration {
-    range: lc.Range;
-    tag: string;
-    bindingHash?: string;
-}
-
 // Based on this HSL-based color generator: https://gist.github.com/bendc/76c48ce53299e6078a76
 function fancify(seed: string, shade: 'light' | 'dark') {
     const random = randomU32Numbers(hashString(seed));
@@ -108,7 +90,7 @@ class Highlighter {
         this.decorations = null;
     }
 
-    public setHighlights(editor: vscode.TextEditor, highlights: Decoration[]) {
+    public setHighlights(editor: vscode.TextEditor, highlights: ra.Decoration[]) {
         const client = this.ctx.client;
         if (!client) return;
         // Initialize decorations if necessary