aboutsummaryrefslogtreecommitdiff
path: root/editors/code/src/highlighting.ts
diff options
context:
space:
mode:
Diffstat (limited to 'editors/code/src/highlighting.ts')
-rw-r--r--editors/code/src/highlighting.ts40
1 files changed, 38 insertions, 2 deletions
diff --git a/editors/code/src/highlighting.ts b/editors/code/src/highlighting.ts
index 333319b85..c7ee8c0a1 100644
--- a/editors/code/src/highlighting.ts
+++ b/editors/code/src/highlighting.ts
@@ -10,6 +10,36 @@ import { Server } from './server';
10import { Ctx } from './ctx'; 10import { Ctx } from './ctx';
11 11
12export function activateHighlighting(ctx: Ctx) { 12export function activateHighlighting(ctx: Ctx) {
13 const highlighter = new Highlighter();
14
15 ctx.client.onReady().then(() => {
16 ctx.client.onNotification(
17 'rust-analyzer/publishDecorations',
18 (params: PublishDecorationsParams) => {
19 if (!ctx.config.highlightingOn) return;
20
21 const targetEditor = vscode.window.visibleTextEditors.find(
22 editor => {
23 const unescapedUri = unescape(
24 editor.document.uri.toString(),
25 );
26 // Unescaped URI looks like:
27 // file:///c:/Workspace/ra-test/src/main.rs
28 return unescapedUri === params.uri;
29 },
30 );
31 if (!targetEditor) return;
32
33 highlighter.setHighlights(targetEditor, params.decorations);
34 },
35 );
36 });
37
38 vscode.workspace.onDidChangeConfiguration(
39 _ => highlighter.removeHighlights(),
40 ctx.subscriptions,
41 );
42
13 vscode.window.onDidChangeActiveTextEditor( 43 vscode.window.onDidChangeActiveTextEditor(
14 async (editor: vscode.TextEditor | undefined) => { 44 async (editor: vscode.TextEditor | undefined) => {
15 if (!editor || editor.document.languageId !== 'rust') return; 45 if (!editor || editor.document.languageId !== 'rust') return;
@@ -22,11 +52,17 @@ export function activateHighlighting(ctx: Ctx) {
22 'rust-analyzer/decorationsRequest', 52 'rust-analyzer/decorationsRequest',
23 params, 53 params,
24 ); 54 );
25 Server.highlighter.setHighlights(editor, decorations); 55 highlighter.setHighlights(editor, decorations);
26 }, 56 },
57 ctx.subscriptions,
27 ); 58 );
28} 59}
29 60
61interface PublishDecorationsParams {
62 uri: string;
63 decorations: Decoration[];
64}
65
30export interface Decoration { 66export interface Decoration {
31 range: lc.Range; 67 range: lc.Range;
32 tag: string; 68 tag: string;
@@ -81,7 +117,7 @@ function createDecorationFromTextmate(
81 return vscode.window.createTextEditorDecorationType(decorationOptions); 117 return vscode.window.createTextEditorDecorationType(decorationOptions);
82} 118}
83 119
84export class Highlighter { 120class Highlighter {
85 private static initDecorations(): Map< 121 private static initDecorations(): Map<
86 string, 122 string,
87 vscode.TextEditorDecorationType 123 vscode.TextEditorDecorationType