import { matchingBrace } from './matching_brace';
import { joinLines } from './join_lines';
import { onEnter } from './on_enter';
+import { parentModule } from './parent_module';
import * as expandMacro from './expand_macro';
import * as inlayHints from './inlay_hints';
-import * as parentModule from './parent_module';
import * as runnables from './runnables';
import * as syntaxTree from './syntaxTree';
import * as vscode from 'vscode';
import * as lc from 'vscode-languageclient';
-import { Server } from '../server';
+import { Ctx, Cmd } from '../ctx';
-export async function handle() {
- const editor = vscode.window.activeTextEditor;
- if (editor == null || editor.document.languageId !== 'rust') {
- return;
- }
- const request: lc.TextDocumentPositionParams = {
- textDocument: { uri: editor.document.uri.toString() },
- position: Server.client.code2ProtocolConverter.asPosition(
- editor.selection.active,
- ),
- };
- const response = await Server.client.sendRequest<lc.Location[]>(
- 'rust-analyzer/parentModule',
- request,
- );
- const loc = response[0];
- if (loc == null) {
- return;
- }
- const uri = Server.client.protocol2CodeConverter.asUri(loc.uri);
- const range = Server.client.protocol2CodeConverter.asRange(loc.range);
+export function parentModule(ctx: Ctx): Cmd {
+ return async () => {
+ const editor = ctx.activeRustEditor;
+ if (!editor) return;
+
+ const request: lc.TextDocumentPositionParams = {
+ textDocument: { uri: editor.document.uri.toString() },
+ position: ctx.client.code2ProtocolConverter.asPosition(
+ editor.selection.active,
+ ),
+ };
+ const response = await ctx.client.sendRequest<lc.Location[]>(
+ 'rust-analyzer/parentModule',
+ request,
+ );
+ const loc = response[0];
+ if (loc == null) return;
- const doc = await vscode.workspace.openTextDocument(uri);
- const e = await vscode.window.showTextDocument(doc);
- e.selection = new vscode.Selection(range.start, range.start);
- e.revealRange(range, vscode.TextEditorRevealType.InCenter);
+ const uri = ctx.client.protocol2CodeConverter.asUri(loc.uri);
+ const range = ctx.client.protocol2CodeConverter.asRange(loc.range);
+
+ const doc = await vscode.workspace.openTextDocument(uri);
+ const e = await vscode.window.showTextDocument(doc);
+ e.selection = new vscode.Selection(range.start, range.start);
+ e.revealRange(range, vscode.TextEditorRevealType.InCenter);
+ }
}
ctx.registerCommand('collectGarbage', commands.collectGarbage);
ctx.registerCommand('matchingBrace', commands.matchingBrace);
ctx.registerCommand('joinLines', commands.joinLines);
+ ctx.registerCommand('parentModule', commands.parentModule);
function disposeOnDeactivation(disposable: vscode.Disposable) {
context.subscriptions.push(disposable);
}
// Commands are requests from vscode to the language server
- registerCommand('rust-analyzer.parentModule', commands.parentModule.handle);
registerCommand('rust-analyzer.run', commands.runnables.handle);
// Unlike the above this does not send requests to the language server
registerCommand('rust-analyzer.runSingle', commands.runnables.handleSingle);
string,
lc.GenericNotificationHandler,
]> = [
- [
- 'rust-analyzer/publishDecorations',
- notifications.publishDecorations.handle,
- ],
- [
- '$/progress',
- params => watchStatus.handleProgressNotification(params),
- ],
- ];
+ [
+ 'rust-analyzer/publishDecorations',
+ notifications.publishDecorations.handle,
+ ],
+ [
+ '$/progress',
+ params => watchStatus.handleProgressNotification(params),
+ ],
+ ];
const syntaxTreeContentProvider = new SyntaxTreeContentProvider();
const expandMacroContentProvider = new ExpandMacroContentProvider();