Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/src/commands.ts')
-rw-r--r--editors/code/src/commands.ts472
1 files changed, 277 insertions, 195 deletions
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index 1e89938c05..ae94ecac6d 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -1,32 +1,33 @@
-import * as vscode from 'vscode';
-import * as lc from 'vscode-languageclient';
-import * as ra from './lsp_ext';
-import * as path from 'path';
-
-import { Ctx, Cmd } from './ctx';
-import { applySnippetWorkspaceEdit, applySnippetTextEdits } from './snippets';
-import { spawnSync } from 'child_process';
-import { RunnableQuickPick, selectRunnable, createTask, createArgs } from './run';
-import { AstInspector } from './ast_inspector';
-import { isRustDocument, isCargoTomlDocument, sleep, isRustEditor } from './util';
-import { startDebugSession, makeDebugConfig } from './debug';
-import { LanguageClient } from 'vscode-languageclient/node';
-
-export * from './ast_inspector';
-export * from './run';
+import * as vscode from "vscode";
+import * as lc from "vscode-languageclient";
+import * as ra from "./lsp_ext";
+import * as path from "path";
+
+import { Ctx, Cmd } from "./ctx";
+import { applySnippetWorkspaceEdit, applySnippetTextEdits } from "./snippets";
+import { spawnSync } from "child_process";
+import { RunnableQuickPick, selectRunnable, createTask, createArgs } from "./run";
+import { AstInspector } from "./ast_inspector";
+import { isRustDocument, isCargoTomlDocument, sleep, isRustEditor } from "./util";
+import { startDebugSession, makeDebugConfig } from "./debug";
+import { LanguageClient } from "vscode-languageclient/node";
+
+export * from "./ast_inspector";
+export * from "./run";
export function analyzerStatus(ctx: Ctx): Cmd {
- const tdcp = new class implements vscode.TextDocumentContentProvider {
- readonly uri = vscode.Uri.parse('rust-analyzer-status://status');
+ const tdcp = new (class implements vscode.TextDocumentContentProvider {
+ readonly uri = vscode.Uri.parse("rust-analyzer-status://status");
readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>();
provideTextDocumentContent(_uri: vscode.Uri): vscode.ProviderResult<string> {
- if (!vscode.window.activeTextEditor) return '';
+ if (!vscode.window.activeTextEditor) return "";
const params: ra.AnalyzerStatusParams = {};
const doc = ctx.activeRustEditor?.document;
if (doc != null) {
- params.textDocument = ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(doc);
+ params.textDocument =
+ ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(doc);
}
return ctx.client.sendRequest(ra.analyzerStatus, params);
}
@@ -34,48 +35,42 @@ export function analyzerStatus(ctx: Ctx): Cmd {
get onDidChange(): vscode.Event<vscode.Uri> {
return this.eventEmitter.event;
}
- }();
+ })();
ctx.pushCleanup(
- vscode.workspace.registerTextDocumentContentProvider(
- 'rust-analyzer-status',
- tdcp,
- ),
+ vscode.workspace.registerTextDocumentContentProvider("rust-analyzer-status", tdcp)
);
return async () => {
const document = await vscode.workspace.openTextDocument(tdcp.uri);
tdcp.eventEmitter.fire(tdcp.uri);
- void await vscode.window.showTextDocument(document, {
+ void (await vscode.window.showTextDocument(document, {
viewColumn: vscode.ViewColumn.Two,
- preserveFocus: true
- });
+ preserveFocus: true,
+ }));
};
}
export function memoryUsage(ctx: Ctx): Cmd {
- const tdcp = new class implements vscode.TextDocumentContentProvider {
- readonly uri = vscode.Uri.parse('rust-analyzer-memory://memory');
+ const tdcp = new (class implements vscode.TextDocumentContentProvider {
+ readonly uri = vscode.Uri.parse("rust-analyzer-memory://memory");
readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>();
provideTextDocumentContent(_uri: vscode.Uri): vscode.ProviderResult<string> {
- if (!vscode.window.activeTextEditor) return '';
+ if (!vscode.window.activeTextEditor) return "";
return ctx.client.sendRequest(ra.memoryUsage).then((mem: any) => {
- return 'Per-query memory usage:\n' + mem + '\n(note: database has been cleared)';
+ return "Per-query memory usage:\n" + mem + "\n(note: database has been cleared)";
});
}
get onDidChange(): vscode.Event<vscode.Uri> {
return this.eventEmitter.event;
}
- }();
+ })();
ctx.pushCleanup(
- vscode.workspace.registerTextDocumentContentProvider(
- 'rust-analyzer-memory',
- tdcp,
- ),
+ vscode.workspace.registerTextDocumentContentProvider("rust-analyzer-memory", tdcp)
);
return async () => {
@@ -101,15 +96,15 @@ export function matchingBrace(ctx: Ctx): Cmd {
if (!editor || !client) return;
const response = await client.sendRequest(ra.matchingBrace, {
- textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
- positions: editor.selections.map(s =>
- client.code2ProtocolConverter.asPosition(s.active),
+ textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
+ ),
+ positions: editor.selections.map((s) =>
+ client.code2ProtocolConverter.asPosition(s.active)
),
});
editor.selections = editor.selections.map((sel, idx) => {
- const active = client.protocol2CodeConverter.asPosition(
- response[idx],
- );
+ const active = client.protocol2CodeConverter.asPosition(response[idx]);
const anchor = sel.isEmpty ? active : sel.anchor;
return new vscode.Selection(anchor, active);
});
@@ -125,7 +120,9 @@ export function joinLines(ctx: Ctx): Cmd {
const items: lc.TextEdit[] = await client.sendRequest(ra.joinLines, {
ranges: editor.selections.map((it) => client.code2ProtocolConverter.asRange(it)),
- textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
+ textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
+ ),
});
await editor.edit(async (builder) => {
(await client.protocol2CodeConverter.asTextEdits(items)).forEach((edit: any) => {
@@ -151,8 +148,10 @@ export function moveItem(ctx: Ctx, direction: ra.Direction): Cmd {
const lcEdits = await client.sendRequest(ra.moveItem, {
range: client.code2ProtocolConverter.asRange(editor.selection),
- textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
- direction
+ textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
+ ),
+ direction,
});
if (!lcEdits) return;
@@ -169,15 +168,17 @@ export function onEnter(ctx: Ctx): Cmd {
if (!editor || !client) return false;
- const lcEdits = await client.sendRequest(ra.onEnter, {
- textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
- position: client.code2ProtocolConverter.asPosition(
- editor.selection.active,
- ),
- }).catch((_error: any) => {
- // client.handleFailedRequest(OnEnterRequest.type, error, null);
- return null;
- });
+ const lcEdits = await client
+ .sendRequest(ra.onEnter, {
+ textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
+ ),
+ position: client.code2ProtocolConverter.asPosition(editor.selection.active),
+ })
+ .catch((_error: any) => {
+ // client.handleFailedRequest(OnEnterRequest.type, error, null);
+ return null;
+ });
if (!lcEdits) return false;
const edits = await client.protocol2CodeConverter.asTextEdits(lcEdits);
@@ -188,7 +189,7 @@ export function onEnter(ctx: Ctx): Cmd {
return async () => {
if (await handleKeypress()) return;
- await vscode.commands.executeCommand('default:type', { text: '\n' });
+ await vscode.commands.executeCommand("default:type", { text: "\n" });
};
}
@@ -200,10 +201,10 @@ export function parentModule(ctx: Ctx): Cmd {
if (!(isRustDocument(editor.document) || isCargoTomlDocument(editor.document))) return;
const locations = await client.sendRequest(ra.parentModule, {
- textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
- position: client.code2ProtocolConverter.asPosition(
- editor.selection.active,
+ textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
),
+ position: client.code2ProtocolConverter.asPosition(editor.selection.active),
});
if (!locations) return;
@@ -220,7 +221,12 @@ export function parentModule(ctx: Ctx): Cmd {
} else {
const uri = editor.document.uri.toString();
const position = client.code2ProtocolConverter.asPosition(editor.selection.active);
- await showReferencesImpl(client, uri, position, locations.map(loc => lc.Location.create(loc.targetUri, loc.targetRange)));
+ await showReferencesImpl(
+ client,
+ uri,
+ position,
+ locations.map((loc) => lc.Location.create(loc.targetUri, loc.targetRange))
+ );
}
};
}
@@ -232,7 +238,9 @@ export function openCargoToml(ctx: Ctx): Cmd {
if (!editor || !client) return;
const response = await client.sendRequest(ra.openCargoToml, {
- textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
+ textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
+ ),
});
if (!response) return;
@@ -254,7 +262,9 @@ export function ssr(ctx: Ctx): Cmd {
const position = editor.selection.active;
const selections = editor.selections;
- const textDocument = ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document);
+ const textDocument = ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
+ );
const options: vscode.InputBoxOptions = {
value: "() ==>> ()",
@@ -262,28 +272,41 @@ export function ssr(ctx: Ctx): Cmd {
validateInput: async (x: string) => {
try {
await client.sendRequest(ra.ssr, {
- query: x, parseOnly: true, textDocument, position, selections,
+ query: x,
+ parseOnly: true,
+ textDocument,
+ position,
+ selections,
});
} catch (e) {
return e.toString();
}
return null;
- }
+ },
};
const request = await vscode.window.showInputBox(options);
if (!request) return;
- await vscode.window.withProgress({
- location: vscode.ProgressLocation.Notification,
- title: "Structured search replace in progress...",
- cancellable: false,
- }, async (_progress, token) => {
- const edit = await client.sendRequest(ra.ssr, {
- query: request, parseOnly: false, textDocument, position, selections,
- });
-
- await vscode.workspace.applyEdit(await client.protocol2CodeConverter.asWorkspaceEdit(edit, token));
- });
+ await vscode.window.withProgress(
+ {
+ location: vscode.ProgressLocation.Notification,
+ title: "Structured search replace in progress...",
+ cancellable: false,
+ },
+ async (_progress, token) => {
+ const edit = await client.sendRequest(ra.ssr, {
+ query: request,
+ parseOnly: false,
+ textDocument,
+ position,
+ selections,
+ });
+
+ await vscode.workspace.applyEdit(
+ await client.protocol2CodeConverter.asWorkspaceEdit(edit, token)
+ );
+ }
+ );
};
}
@@ -292,17 +315,17 @@ export function serverVersion(ctx: Ctx): Cmd {
const { stdout } = spawnSync(ctx.serverPath, ["--version"], { encoding: "utf8" });
const versionString = stdout.slice(`rust-analyzer `.length).trim();
- void vscode.window.showInformationMessage(
- `rust-analyzer version: ${versionString}`
- );
+ void vscode.window.showInformationMessage(`rust-analyzer version: ${versionString}`);
};
}
export function toggleInlayHints(_ctx: Ctx): Cmd {
return async () => {
- const config = vscode.workspace.getConfiguration("editor.inlayHints", { languageId: "rust" });
+ const config = vscode.workspace.getConfiguration("editor.inlayHints", {
+ languageId: "rust",
+ });
const value = !config.get("enabled");
- await config.update('enabled', value, vscode.ConfigurationTarget.Global);
+ await config.update("enabled", value, vscode.ConfigurationTarget.Global);
};
}
@@ -310,12 +333,20 @@ export function toggleInlayHints(_ctx: Ctx): Cmd {
//
// The contents of the file come from the `TextDocumentContentProvider`
export function syntaxTree(ctx: Ctx): Cmd {
- const tdcp = new class implements vscode.TextDocumentContentProvider {
- readonly uri = vscode.Uri.parse('rust-analyzer://syntaxtree/tree.rast');
+ const tdcp = new (class implements vscode.TextDocumentContentProvider {
+ readonly uri = vscode.Uri.parse("rust-analyzer://syntaxtree/tree.rast");
readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>();
constructor() {
- vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, ctx.subscriptions);
- vscode.window.onDidChangeActiveTextEditor(this.onDidChangeActiveTextEditor, this, ctx.subscriptions);
+ vscode.workspace.onDidChangeTextDocument(
+ this.onDidChangeTextDocument,
+ this,
+ ctx.subscriptions
+ );
+ vscode.window.onDidChangeActiveTextEditor(
+ this.onDidChangeActiveTextEditor,
+ this,
+ ctx.subscriptions
+ );
}
private onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent) {
@@ -331,47 +362,51 @@ export function syntaxTree(ctx: Ctx): Cmd {
}
}
- provideTextDocumentContent(uri: vscode.Uri, ct: vscode.CancellationToken): vscode.ProviderResult<string> {
+ provideTextDocumentContent(
+ uri: vscode.Uri,
+ ct: vscode.CancellationToken
+ ): vscode.ProviderResult<string> {
const rustEditor = ctx.activeRustEditor;
- if (!rustEditor) return '';
+ if (!rustEditor) return "";
// When the range based query is enabled we take the range of the selection
- const range = uri.query === 'range=true' && !rustEditor.selection.isEmpty
- ? ctx.client.code2ProtocolConverter.asRange(rustEditor.selection)
- : null;
+ const range =
+ uri.query === "range=true" && !rustEditor.selection.isEmpty
+ ? ctx.client.code2ProtocolConverter.asRange(rustEditor.selection)
+ : null;
- const params = { textDocument: { uri: rustEditor.document.uri.toString() }, range, };
+ const params = { textDocument: { uri: rustEditor.document.uri.toString() }, range };
return ctx.client.sendRequest(ra.syntaxTree, params, ct);
}
get onDidChange(): vscode.Event<vscode.Uri> {
return this.eventEmitter.event;
}
- };
+ })();
void new AstInspector(ctx);
- ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider('rust-analyzer', tdcp));
- ctx.pushCleanup(vscode.languages.setLanguageConfiguration("ra_syntax_tree", {
- brackets: [["[", ")"]],
- }));
+ ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider("rust-analyzer", tdcp));
+ ctx.pushCleanup(
+ vscode.languages.setLanguageConfiguration("ra_syntax_tree", {
+ brackets: [["[", ")"]],
+ })
+ );
return async () => {
const editor = vscode.window.activeTextEditor;
const rangeEnabled = !!editor && !editor.selection.isEmpty;
- const uri = rangeEnabled
- ? vscode.Uri.parse(`${tdcp.uri.toString()}?range=true`)
- : tdcp.uri;
+ const uri = rangeEnabled ? vscode.Uri.parse(`${tdcp.uri.toString()}?range=true`) : tdcp.uri;
const document = await vscode.workspace.openTextDocument(uri);
tdcp.eventEmitter.fire(uri);
- void await vscode.window.showTextDocument(document, {
+ void (await vscode.window.showTextDocument(document, {
viewColumn: vscode.ViewColumn.Two,
- preserveFocus: true
- });
+ preserveFocus: true,
+ }));
};
}
@@ -379,12 +414,20 @@ export function syntaxTree(ctx: Ctx): Cmd {
//
// The contents of the file come from the `TextDocumentContentProvider`
export function viewHir(ctx: Ctx): Cmd {
- const tdcp = new class implements vscode.TextDocumentContentProvider {
- readonly uri = vscode.Uri.parse('rust-analyzer://viewHir/hir.txt');
+ const tdcp = new (class implements vscode.TextDocumentContentProvider {
+ readonly uri = vscode.Uri.parse("rust-analyzer://viewHir/hir.txt");
readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>();
constructor() {
- vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, ctx.subscriptions);
- vscode.window.onDidChangeActiveTextEditor(this.onDidChangeActiveTextEditor, this, ctx.subscriptions);
+ vscode.workspace.onDidChangeTextDocument(
+ this.onDidChangeTextDocument,
+ this,
+ ctx.subscriptions
+ );
+ vscode.window.onDidChangeActiveTextEditor(
+ this.onDidChangeActiveTextEditor,
+ this,
+ ctx.subscriptions
+ );
}
private onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent) {
@@ -400,16 +443,19 @@ export function viewHir(ctx: Ctx): Cmd {
}
}
- provideTextDocumentContent(_uri: vscode.Uri, ct: vscode.CancellationToken): vscode.ProviderResult<string> {
+ provideTextDocumentContent(
+ _uri: vscode.Uri,
+ ct: vscode.CancellationToken
+ ): vscode.ProviderResult<string> {
const rustEditor = ctx.activeRustEditor;
const client = ctx.client;
- if (!rustEditor || !client) return '';
+ if (!rustEditor || !client) return "";
const params = {
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(rustEditor.document),
- position: client.code2ProtocolConverter.asPosition(
- rustEditor.selection.active,
+ textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(
+ rustEditor.document
),
+ position: client.code2ProtocolConverter.asPosition(rustEditor.selection.active),
};
return client.sendRequest(ra.viewHir, params, ct);
}
@@ -417,27 +463,35 @@ export function viewHir(ctx: Ctx): Cmd {
get onDidChange(): vscode.Event<vscode.Uri> {
return this.eventEmitter.event;
}
- };
+ })();
- ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider('rust-analyzer', tdcp));
+ ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider("rust-analyzer", tdcp));
return async () => {
const document = await vscode.workspace.openTextDocument(tdcp.uri);
tdcp.eventEmitter.fire(tdcp.uri);
- void await vscode.window.showTextDocument(document, {
+ void (await vscode.window.showTextDocument(document, {
viewColumn: vscode.ViewColumn.Two,
- preserveFocus: true
- });
+ preserveFocus: true,
+ }));
};
}
export function viewFileText(ctx: Ctx): Cmd {
- const tdcp = new class implements vscode.TextDocumentContentProvider {
- readonly uri = vscode.Uri.parse('rust-analyzer://viewFileText/file.rs');
+ const tdcp = new (class implements vscode.TextDocumentContentProvider {
+ readonly uri = vscode.Uri.parse("rust-analyzer://viewFileText/file.rs");
readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>();
constructor() {
- vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, ctx.subscriptions);
- vscode.window.onDidChangeActiveTextEditor(this.onDidChangeActiveTextEditor, this, ctx.subscriptions);
+ vscode.workspace.onDidChangeTextDocument(
+ this.onDidChangeTextDocument,
+ this,
+ ctx.subscriptions
+ );
+ vscode.window.onDidChangeActiveTextEditor(
+ this.onDidChangeActiveTextEditor,
+ this,
+ ctx.subscriptions
+ );
}
private onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent) {
@@ -453,39 +507,52 @@ export function viewFileText(ctx: Ctx): Cmd {
}
}
- provideTextDocumentContent(_uri: vscode.Uri, ct: vscode.CancellationToken): vscode.ProviderResult<string> {
+ provideTextDocumentContent(
+ _uri: vscode.Uri,
+ ct: vscode.CancellationToken
+ ): vscode.ProviderResult<string> {
const rustEditor = ctx.activeRustEditor;
const client = ctx.client;
- if (!rustEditor || !client) return '';
+ if (!rustEditor || !client) return "";
- const params = client.code2ProtocolConverter.asTextDocumentIdentifier(rustEditor.document);
+ const params = client.code2ProtocolConverter.asTextDocumentIdentifier(
+ rustEditor.document
+ );
return client.sendRequest(ra.viewFileText, params, ct);
}
get onDidChange(): vscode.Event<vscode.Uri> {
return this.eventEmitter.event;
}
- };
+ })();
- ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider('rust-analyzer', tdcp));
+ ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider("rust-analyzer", tdcp));
return async () => {
const document = await vscode.workspace.openTextDocument(tdcp.uri);
tdcp.eventEmitter.fire(tdcp.uri);
- void await vscode.window.showTextDocument(document, {
+ void (await vscode.window.showTextDocument(document, {
viewColumn: vscode.ViewColumn.Two,
- preserveFocus: true
- });
+ preserveFocus: true,
+ }));
};
}
export function viewItemTree(ctx: Ctx): Cmd {
- const tdcp = new class implements vscode.TextDocumentContentProvider {
- readonly uri = vscode.Uri.parse('rust-analyzer://viewItemTree/itemtree.rs');
+ const tdcp = new (class implements vscode.TextDocumentContentProvider {
+ readonly uri = vscode.Uri.parse("rust-analyzer://viewItemTree/itemtree.rs");
readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>();
constructor() {
- vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, ctx.subscriptions);
- vscode.window.onDidChangeActiveTextEditor(this.onDidChangeActiveTextEditor, this, ctx.subscriptions);
+ vscode.workspace.onDidChangeTextDocument(
+ this.onDidChangeTextDocument,
+ this,
+ ctx.subscriptions
+ );
+ vscode.window.onDidChangeActiveTextEditor(
+ this.onDidChangeActiveTextEditor,
+ this,
+ ctx.subscriptions
+ );
}
private onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent) {
@@ -501,13 +568,18 @@ export function viewItemTree(ctx: Ctx): Cmd {
}
}
- provideTextDocumentContent(_uri: vscode.Uri, ct: vscode.CancellationToken): vscode.ProviderResult<string> {
+ provideTextDocumentContent(
+ _uri: vscode.Uri,
+ ct: vscode.CancellationToken
+ ): vscode.ProviderResult<string> {
const rustEditor = ctx.activeRustEditor;
const client = ctx.client;
- if (!rustEditor || !client) return '';
+ if (!rustEditor || !client) return "";
const params = {
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(rustEditor.document),
+ textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(
+ rustEditor.document
+ ),
};
return client.sendRequest(ra.viewItemTree, params, ct);
}
@@ -515,17 +587,17 @@ export function viewItemTree(ctx: Ctx): Cmd {
get onDidChange(): vscode.Event<vscode.Uri> {
return this.eventEmitter.event;
}
- };
+ })();
- ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider('rust-analyzer', tdcp));
+ ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider("rust-analyzer", tdcp));
return async () => {
const document = await vscode.workspace.openTextDocument(tdcp.uri);
tdcp.eventEmitter.fire(tdcp.uri);
- void await vscode.window.showTextDocument(document, {
+ void (await vscode.window.showTextDocument(document, {
viewColumn: vscode.ViewColumn.Two,
- preserveFocus: true
- });
+ preserveFocus: true,
+ }));
};
}
@@ -533,11 +605,16 @@ function crateGraph(ctx: Ctx, full: boolean): Cmd {
return async () => {
const nodeModulesPath = vscode.Uri.file(path.join(ctx.extensionPath, "node_modules"));
- const panel = vscode.window.createWebviewPanel("rust-analyzer.crate-graph", "rust-analyzer crate graph", vscode.ViewColumn.Two, {
- enableScripts: true,
- retainContextWhenHidden: true,
- localResourceRoots: [nodeModulesPath]
- });
+ const panel = vscode.window.createWebviewPanel(
+ "rust-analyzer.crate-graph",
+ "rust-analyzer crate graph",
+ vscode.ViewColumn.Two,
+ {
+ enableScripts: true,
+ retainContextWhenHidden: true,
+ localResourceRoots: [nodeModulesPath],
+ }
+ );
const params = {
full: full,
};
@@ -601,29 +678,31 @@ export function viewFullCrateGraph(ctx: Ctx): Cmd {
export function expandMacro(ctx: Ctx): Cmd {
function codeFormat(expanded: ra.ExpandedMacro): string {
let result = `// Recursive expansion of ${expanded.name}! macro\n`;
- result += '// ' + '='.repeat(result.length - 3);
- result += '\n\n';
+ result += "// " + "=".repeat(result.length - 3);
+ result += "\n\n";
result += expanded.expansion;
return result;
}
- const tdcp = new class implements vscode.TextDocumentContentProvider {
- uri = vscode.Uri.parse('rust-analyzer://expandMacro/[EXPANSION].rs');
+ const tdcp = new (class implements vscode.TextDocumentContentProvider {
+ uri = vscode.Uri.parse("rust-analyzer://expandMacro/[EXPANSION].rs");
eventEmitter = new vscode.EventEmitter<vscode.Uri>();
async provideTextDocumentContent(_uri: vscode.Uri): Promise<string> {
const editor = vscode.window.activeTextEditor;
const client = ctx.client;
- if (!editor || !client) return '';
+ if (!editor || !client) return "";
const position = editor.selection.active;
const expanded = await client.sendRequest(ra.expandMacro, {
- textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
+ textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(
+ editor.document
+ ),
position,
});
- if (expanded == null) return 'Not available';
+ if (expanded == null) return "Not available";
return codeFormat(expanded);
}
@@ -631,23 +710,14 @@ export function expandMacro(ctx: Ctx): Cmd {
get onDidChange(): vscode.Event<vscode.Uri> {
return this.eventEmitter.event;
}
- }();
+ })();
- ctx.pushCleanup(
- vscode.workspace.registerTextDocumentContentProvider(
- 'rust-analyzer',
- tdcp,
- ),
- );
+ 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,
- true,
- );
+ return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true);
};
}
@@ -655,13 +725,18 @@ export function reloadWorkspace(ctx: Ctx): Cmd {
return async () => ctx.client.sendRequest(ra.reloadWorkspace);
}
-async function showReferencesImpl(client: LanguageClient, uri: string, position: lc.Position, locations: lc.Location[]) {
+async function showReferencesImpl(
+ client: LanguageClient,
+ uri: string,
+ position: lc.Position,
+ locations: lc.Location[]
+) {
if (client) {
await vscode.commands.executeCommand(
- 'editor.action.showReferences',
+ "editor.action.showReferences",
vscode.Uri.parse(uri),
client.protocol2CodeConverter.asPosition(position),
- locations.map(client.protocol2CodeConverter.asLocation),
+ locations.map(client.protocol2CodeConverter.asLocation)
);
}
}
@@ -677,8 +752,8 @@ export function applyActionGroup(_ctx: Ctx): Cmd {
const selectedAction = await vscode.window.showQuickPick(actions);
if (!selectedAction) return;
await vscode.commands.executeCommand(
- 'rust-analyzer.resolveCodeAction',
- selectedAction.arguments,
+ "rust-analyzer.resolveCodeAction",
+ selectedAction.arguments
);
};
}
@@ -699,12 +774,11 @@ export function gotoLocation(ctx: Ctx): Cmd {
export function openDocs(ctx: Ctx): Cmd {
return async () => {
-
const client = ctx.client;
const editor = vscode.window.activeTextEditor;
if (!editor || !client) {
return;
- };
+ }
const position = editor.selection.active;
const textDocument = { uri: editor.document.uri.toString() };
@@ -715,7 +789,6 @@ export function openDocs(ctx: Ctx): Cmd {
await vscode.commands.executeCommand("vscode.open", vscode.Uri.parse(doclink));
}
};
-
}
export function resolveCodeAction(ctx: Ctx): Cmd {
@@ -730,8 +803,13 @@ export function resolveCodeAction(ctx: Ctx): Cmd {
const edit = await client.protocol2CodeConverter.asWorkspaceEdit(itemEdit);
// filter out all text edits and recreate the WorkspaceEdit without them so we can apply
// snippet edits on our own
- const lcFileSystemEdit = { ...itemEdit, documentChanges: itemEdit.documentChanges?.filter(change => "kind" in change) };
- const fileSystemEdit = await client.protocol2CodeConverter.asWorkspaceEdit(lcFileSystemEdit);
+ const lcFileSystemEdit = {
+ ...itemEdit,
+ documentChanges: itemEdit.documentChanges?.filter((change) => "kind" in change),
+ };
+ const fileSystemEdit = await client.protocol2CodeConverter.asWorkspaceEdit(
+ lcFileSystemEdit
+ );
await vscode.workspace.applyEdit(fileSystemEdit);
await applySnippetWorkspaceEdit(edit);
if (item.command != null) {
@@ -753,7 +831,7 @@ export function run(ctx: Ctx): Cmd {
const item = await selectRunnable(ctx, prevRunnable);
if (!item) return;
- item.detail = 'rerun';
+ item.detail = "rerun";
prevRunnable = item;
const task = await createTask(item.runnable, ctx.config);
return await vscode.tasks.executeTask(task);
@@ -767,29 +845,33 @@ export function peekTests(ctx: Ctx): Cmd {
const editor = ctx.activeRustEditor;
if (!editor || !client) return;
- await vscode.window.withProgress({
- location: vscode.ProgressLocation.Notification,
- title: "Looking for tests...",
- cancellable: false,
- }, async (_progress, _token) => {
- const uri = editor.document.uri.toString();
- const position = client.code2ProtocolConverter.asPosition(
- editor.selection.active,
- );
-
- const tests = await client.sendRequest(ra.relatedTests, {
- textDocument: { uri: uri },
- position: position,
- });
- const locations: lc.Location[] = tests.map(it =>
- lc.Location.create(it.runnable.location!.targetUri, it.runnable.location!.targetSelectionRange));
-
- await showReferencesImpl(client, uri, position, locations);
- });
+ await vscode.window.withProgress(
+ {
+ location: vscode.ProgressLocation.Notification,
+ title: "Looking for tests...",
+ cancellable: false,
+ },
+ async (_progress, _token) => {
+ const uri = editor.document.uri.toString();
+ const position = client.code2ProtocolConverter.asPosition(editor.selection.active);
+
+ const tests = await client.sendRequest(ra.relatedTests, {
+ textDocument: { uri: uri },
+ position: position,
+ });
+ const locations: lc.Location[] = tests.map((it) =>
+ lc.Location.create(
+ it.runnable.location!.targetUri,
+ it.runnable.location!.targetSelectionRange
+ )
+ );
+
+ await showReferencesImpl(client, uri, position, locations);
+ }
+ );
};
}
-
export function runSingle(ctx: Ctx): Cmd {
return async (runnable: ra.Runnable) => {
const editor = ctx.activeRustEditor;
@@ -826,7 +908,7 @@ export function debug(ctx: Ctx): Cmd {
const item = await selectRunnable(ctx, prevDebuggee, true);
if (!item) return;
- item.detail = 'restart';
+ item.detail = "restart";
prevDebuggee = item;
return await startDebugSession(ctx, item.runnable);
};