]> git.lizzy.rs Git - rust.git/commitdiff
Move expand macro to the new context
authorAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 30 Dec 2019 18:30:30 +0000 (19:30 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 30 Dec 2019 18:31:07 +0000 (19:31 +0100)
editors/code/src/commands/analyzer_status.ts
editors/code/src/commands/expand_macro.ts
editors/code/src/commands/index.ts
editors/code/src/commands/syntax_tree.ts
editors/code/src/main.ts

index e680179ae7d575bb7d534ff2dee973735de0bb44..2c8362286d0b1aaa1323c244acad2d596777bb97 100644 (file)
@@ -37,7 +37,7 @@ export function analyzerStatus(ctx: Ctx): Cmd {
 
 class TextDocumentContentProvider
     implements vscode.TextDocumentContentProvider {
-    ctx: Ctx;
+    private ctx: Ctx;
     uri = vscode.Uri.parse('rust-analyzer-status://status');
     eventEmitter = new vscode.EventEmitter<vscode.Uri>();
 
index 17c78280a89a5fc4c09973407090160bbfd342df..da208257a2a2389cca9f014ac1e7c809359116d9 100644 (file)
@@ -1,60 +1,23 @@
 import * as vscode from 'vscode';
-import { Position, TextDocumentIdentifier } from 'vscode-languageclient';
-import { Server } from '../server';
+import * as lc from 'vscode-languageclient';
 
-export const expandMacroUri = vscode.Uri.parse(
-    'rust-analyzer://expandMacro/[EXPANSION].rs',
-);
-
-export class ExpandMacroContentProvider
-    implements vscode.TextDocumentContentProvider {
-    public eventEmitter = new vscode.EventEmitter<vscode.Uri>();
-
-    public provideTextDocumentContent(
-        _uri: vscode.Uri,
-    ): vscode.ProviderResult<string> {
-        async function handle() {
-            const editor = vscode.window.activeTextEditor;
-            if (editor == null) {
-                return '';
-            }
-
-            const position = editor.selection.active;
-            const request: MacroExpandParams = {
-                textDocument: { uri: editor.document.uri.toString() },
-                position,
-            };
-            const expanded = await Server.client.sendRequest<ExpandedMacro>(
-                'rust-analyzer/expandMacro',
-                request,
-            );
-
-            if (expanded == null) {
-                return 'Not available';
-            }
-
-            return code_format(expanded);
-        }
-
-        return handle();
-    }
-
-    get onDidChange(): vscode.Event<vscode.Uri> {
-        return this.eventEmitter.event;
-    }
-}
+import { Ctx, Cmd } from '../ctx';
 
 // Opens the virtual file that will show the syntax tree
 //
 // The contents of the file come from the `TextDocumentContentProvider`
-export function createHandle(provider: ExpandMacroContentProvider) {
-    return async () => {
-        const uri = expandMacroUri;
-
-        const document = await vscode.workspace.openTextDocument(uri);
-
-        provider.eventEmitter.fire(uri);
+export function expandMacro(ctx: Ctx): Cmd {
+    const tdcp = new TextDocumentContentProvider(ctx);
+    ctx.pushCleanup(
+        vscode.workspace.registerTextDocumentContentProvider(
+            'rust-analyzer',
+            tdcp,
+        ),
+    );
 
+    return async () => {
+        const document = await vscode.workspace.openTextDocument(tdcp.uri);
+        tdcp.eventEmitter.fire(tdcp.uri);
         return vscode.window.showTextDocument(
             document,
             vscode.ViewColumn.Two,
@@ -63,11 +26,6 @@ export function createHandle(provider: ExpandMacroContentProvider) {
     };
 }
 
-interface MacroExpandParams {
-    textDocument: TextDocumentIdentifier;
-    position: Position;
-}
-
 interface ExpandedMacro {
     name: string;
     expansion: string;
@@ -81,3 +39,37 @@ function code_format(expanded: ExpandedMacro): string {
 
     return result;
 }
+
+class TextDocumentContentProvider
+    implements vscode.TextDocumentContentProvider {
+    private ctx: Ctx;
+    uri = vscode.Uri.parse('rust-analyzer://expandMacro/[EXPANSION].rs');
+    eventEmitter = new vscode.EventEmitter<vscode.Uri>();
+
+    constructor(ctx: Ctx) {
+        this.ctx = ctx;
+    }
+
+    async provideTextDocumentContent(_uri: vscode.Uri): Promise<string> {
+        const editor = vscode.window.activeTextEditor;
+        if (editor == null) return '';
+
+        const position = editor.selection.active;
+        const request: lc.TextDocumentPositionParams = {
+            textDocument: { uri: editor.document.uri.toString() },
+            position,
+        };
+        const expanded = await this.ctx.client.sendRequest<ExpandedMacro>(
+            'rust-analyzer/expandMacro',
+            request,
+        );
+
+        if (expanded == null) return 'Not available';
+
+        return code_format(expanded);
+    }
+
+    get onDidChange(): vscode.Event<vscode.Uri> {
+        return this.eventEmitter.event;
+    }
+}
index 8f91b3b7d32f1e4de4775bf54f1e7f621482c3f9..325ae3da84f430513c3ff094d9155573fecace0f 100644 (file)
@@ -6,7 +6,7 @@ import { joinLines } from './join_lines';
 import { onEnter } from './on_enter';
 import { parentModule } from './parent_module';
 import { syntaxTree } from './syntax_tree';
-import * as expandMacro from './expand_macro';
+import { expandMacro } from './expand_macro';
 import * as inlayHints from './inlay_hints';
 import * as runnables from './runnables';
 
index 9831c2a2e4a756f8359447e35d79f99ab4da485a..20ff7e5ca047487472f27c287e91500ba0ab3f61 100644 (file)
@@ -66,10 +66,9 @@ interface SyntaxTreeParams {
 
 class TextDocumentContentProvider
     implements vscode.TextDocumentContentProvider {
-    ctx: Ctx;
+    private ctx: Ctx;
     uri = vscode.Uri.parse('rust-analyzer://syntaxtree');
     eventEmitter = new vscode.EventEmitter<vscode.Uri>();
-    syntaxTree: string = 'Not available';
 
     constructor(ctx: Ctx) {
         this.ctx = ctx;
@@ -86,8 +85,8 @@ class TextDocumentContentProvider
             range = editor.selection.isEmpty
                 ? undefined
                 : this.ctx.client.code2ProtocolConverter.asRange(
-                    editor.selection,
-                );
+                      editor.selection,
+                  );
         }
 
         const request: SyntaxTreeParams = {
index d92cd164fef604cf81f2e935926af603cf8a169e..b8e3396a6e6aee198207e3b215b6353fa4337eb9 100644 (file)
@@ -2,7 +2,6 @@ import * as vscode from 'vscode';
 import * as lc from 'vscode-languageclient';
 
 import * as commands from './commands';
-import { ExpandMacroContentProvider } from './commands/expand_macro';
 import { HintsUpdater } from './commands/inlay_hints';
 import { StatusDisplay } from './commands/watch_status';
 import * as events from './events';
@@ -20,6 +19,7 @@ export async function activate(context: vscode.ExtensionContext) {
     ctx.registerCommand('joinLines', commands.joinLines);
     ctx.registerCommand('parentModule', commands.parentModule);
     ctx.registerCommand('syntaxTree', commands.syntaxTree);
+    ctx.registerCommand('expandMacro', commands.expandMacro);
 
     function disposeOnDeactivation(disposable: vscode.Disposable) {
         context.subscriptions.push(disposable);
@@ -65,25 +65,12 @@ export async function activate(context: vscode.ExtensionContext) {
             params => watchStatus.handleProgressNotification(params),
         ],
     ];
-    const expandMacroContentProvider = new ExpandMacroContentProvider();
 
     // The events below are plain old javascript events, triggered and handled by vscode
     vscode.window.onDidChangeActiveTextEditor(
         events.changeActiveTextEditor.makeHandler(),
     );
 
-    disposeOnDeactivation(
-        vscode.workspace.registerTextDocumentContentProvider(
-            'rust-analyzer',
-            expandMacroContentProvider,
-        ),
-    );
-
-    registerCommand(
-        'rust-analyzer.expandMacro',
-        commands.expandMacro.createHandle(expandMacroContentProvider),
-    );
-
     const startServer = () => Server.start(allNotifications);
     const reloadCommand = () => reloadServer(startServer);