-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;
}