1 import * as vscode from 'vscode';
2 import * as lc from 'vscode-languageclient';
3 import * as ra from './rust-analyzer-api';
5 import { Ctx } from './ctx';
7 export async function applySourceChange(ctx: Ctx, change: ra.SourceChange) {
8 const client = ctx.client;
11 const wsEdit = client.protocol2CodeConverter.asWorkspaceEdit(
16 if (change.workspaceEdit.documentChanges) {
17 for (const docChange of change.workspaceEdit.documentChanges) {
18 if (lc.CreateFile.is(docChange)) {
19 created = docChange.uri;
20 } else if (lc.RenameFile.is(docChange)) {
21 moved = docChange.newUri;
25 const toOpen = created || moved;
26 const toReveal = change.cursorPosition;
27 await vscode.workspace.applyEdit(wsEdit);
29 const toOpenUri = vscode.Uri.parse(toOpen);
30 const doc = await vscode.workspace.openTextDocument(toOpenUri);
31 await vscode.window.showTextDocument(doc);
32 } else if (toReveal) {
33 const uri = client.protocol2CodeConverter.asUri(
34 toReveal.textDocument.uri,
36 const position = client.protocol2CodeConverter.asPosition(
39 const editor = vscode.window.activeTextEditor;
40 if (!editor || !editor.selection.isEmpty) {
44 if (editor.document.uri !== uri) {
45 const doc = await vscode.workspace.openTextDocument(uri);
46 await vscode.window.showTextDocument(doc);
48 editor.selection = new vscode.Selection(position, position);
50 new vscode.Range(position, position),
51 vscode.TextEditorRevealType.Default,