]> git.lizzy.rs Git - rust.git/blobdiff - editors/code/src/commands/on_enter.ts
Refactor applySourceChange
[rust.git] / editors / code / src / commands / on_enter.ts
index 772c64b3c78e6b009f7dd222620d3307cac83d33..4503e13f0083e0f462bb1c80628aab42e99a2274 100644 (file)
@@ -1,33 +1,28 @@
-import * as vscode from 'vscode';
 import * as lc from 'vscode-languageclient';
-import { Server } from '../server';
 import {
-    handle as applySourceChange,
+    applySourceChange,
     SourceChange,
-} from './apply_source_change';
+} from '../source_change';
+import { Cmd, Ctx } from '../ctx';
 
-export async function handle(event: { text: string }): Promise<boolean> {
-    const editor = vscode.window.activeTextEditor;
-    if (
-        editor == null ||
-        editor.document.languageId !== 'rust' ||
-        event.text !== '\n'
-    ) {
-        return false;
-    }
-    const request: lc.TextDocumentPositionParams = {
-        textDocument: { uri: editor.document.uri.toString() },
-        position: Server.client.code2ProtocolConverter.asPosition(
-            editor.selection.active,
-        ),
-    };
-    const change = await Server.client.sendRequest<undefined | SourceChange>(
-        'rust-analyzer/onEnter',
-        request,
-    );
-    if (!change) {
-        return false;
+export function onEnter(ctx: Ctx): Cmd {
+    return async (event: { text: string }) => {
+        const editor = ctx.activeRustEditor;
+        if (!editor || event.text !== '\n') return false;
+
+        const request: lc.TextDocumentPositionParams = {
+            textDocument: { uri: editor.document.uri.toString() },
+            position: ctx.client.code2ProtocolConverter.asPosition(
+                editor.selection.active,
+            ),
+        };
+        const change = await ctx.client.sendRequest<undefined | SourceChange>(
+            'rust-analyzer/onEnter',
+            request,
+        );
+        if (!change) return false;
+
+        await applySourceChange(ctx, change);
+        return true;
     }
-    await applySourceChange(change);
-    return true;
 }