aboutsummaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
authorvsrs <[email protected]>2021-02-27 17:04:43 +0000
committervsrs <[email protected]>2021-02-27 17:04:43 +0000
commit669e11764430be3a098d6c8fe875d8efbb3547a3 (patch)
tree652dc3728183ea67624116b27f36008677ae9f2a /editors
parent31f5f816e3747c1a0972d2f0aca25ded9980cd36 (diff)
Add LSP request and VSCode command
Diffstat (limited to 'editors')
-rw-r--r--editors/code/package.json5
-rw-r--r--editors/code/src/commands.ts51
-rw-r--r--editors/code/src/lsp_ext.ts9
-rw-r--r--editors/code/src/main.ts1
4 files changed, 57 insertions, 9 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index e3e0ebff0..43ea1225a 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -202,6 +202,11 @@
202 "command": "rust-analyzer.openCargoToml", 202 "command": "rust-analyzer.openCargoToml",
203 "title": "Open Cargo.toml", 203 "title": "Open Cargo.toml",
204 "category": "Rust Analyzer" 204 "category": "Rust Analyzer"
205 },
206 {
207 "command": "rust-analyzer.peekTests",
208 "title": "Peek related tests",
209 "category": "Rust Analyzer"
205 } 210 }
206 ], 211 ],
207 "keybindings": [ 212 "keybindings": [
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index 283b9a160..3512fefdf 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -9,6 +9,7 @@ import { RunnableQuickPick, selectRunnable, createTask, createArgs } from './run
9import { AstInspector } from './ast_inspector'; 9import { AstInspector } from './ast_inspector';
10import { isRustDocument, sleep, isRustEditor } from './util'; 10import { isRustDocument, sleep, isRustEditor } from './util';
11import { startDebugSession, makeDebugConfig } from './debug'; 11import { startDebugSession, makeDebugConfig } from './debug';
12import { LanguageClient } from 'vscode-languageclient/node';
12 13
13export * from './ast_inspector'; 14export * from './ast_inspector';
14export * from './run'; 15export * from './run';
@@ -456,17 +457,20 @@ export function reloadWorkspace(ctx: Ctx): Cmd {
456 return async () => ctx.client.sendRequest(ra.reloadWorkspace); 457 return async () => ctx.client.sendRequest(ra.reloadWorkspace);
457} 458}
458 459
460async function showReferencesImpl(client: LanguageClient, uri: string, position: lc.Position, locations: lc.Location[]) {
461 if (client) {
462 await vscode.commands.executeCommand(
463 'editor.action.showReferences',
464 vscode.Uri.parse(uri),
465 client.protocol2CodeConverter.asPosition(position),
466 locations.map(client.protocol2CodeConverter.asLocation),
467 );
468 }
469}
470
459export function showReferences(ctx: Ctx): Cmd { 471export function showReferences(ctx: Ctx): Cmd {
460 return async (uri: string, position: lc.Position, locations: lc.Location[]) => { 472 return async (uri: string, position: lc.Position, locations: lc.Location[]) => {
461 const client = ctx.client; 473 await showReferencesImpl(ctx.client, uri, position, locations);
462 if (client) {
463 await vscode.commands.executeCommand(
464 'editor.action.showReferences',
465 vscode.Uri.parse(uri),
466 client.protocol2CodeConverter.asPosition(position),
467 locations.map(client.protocol2CodeConverter.asLocation),
468 );
469 }
470 }; 474 };
471} 475}
472 476
@@ -555,6 +559,35 @@ export function run(ctx: Ctx): Cmd {
555 }; 559 };
556} 560}
557 561
562export function peekTests(ctx: Ctx): Cmd {
563 const client = ctx.client;
564
565 return async () => {
566 const editor = ctx.activeRustEditor;
567 if (!editor || !client) return;
568
569 const uri = editor.document.uri.toString();
570 const position = client.code2ProtocolConverter.asPosition(
571 editor.selection.active,
572 );
573
574 const tests = await client.sendRequest(ra.relatedTests, {
575 textDocument: { uri: uri },
576 position: position,
577 });
578
579 const locations: lc.Location[] = tests.map( it => {
580 return {
581 uri: it.runnable.location!.targetUri,
582 range: it.runnable.location!.targetSelectionRange
583 };
584 });
585
586 await showReferencesImpl(client, uri, position, locations);
587 };
588}
589
590
558export function runSingle(ctx: Ctx): Cmd { 591export function runSingle(ctx: Ctx): Cmd {
559 return async (runnable: ra.Runnable) => { 592 return async (runnable: ra.Runnable) => {
560 const editor = ctx.activeRustEditor; 593 const editor = ctx.activeRustEditor;
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts
index 2de1e427d..11d4d5f00 100644
--- a/editors/code/src/lsp_ext.ts
+++ b/editors/code/src/lsp_ext.ts
@@ -72,6 +72,15 @@ export interface Runnable {
72} 72}
73export const runnables = new lc.RequestType<RunnablesParams, Runnable[], void>("experimental/runnables"); 73export const runnables = new lc.RequestType<RunnablesParams, Runnable[], void>("experimental/runnables");
74 74
75export interface RelatedTestsParams extends lc.TextDocumentPositionParams {
76}
77
78export interface TestInfo {
79 runnable: Runnable;
80}
81
82export const relatedTests = new lc.RequestType<RelatedTestsParams, TestInfo[], void>("rust-analyzer/relatedTests");
83
75export type InlayHint = InlayHint.TypeHint | InlayHint.ParamHint | InlayHint.ChainingHint; 84export type InlayHint = InlayHint.TypeHint | InlayHint.ParamHint | InlayHint.ChainingHint;
76 85
77export namespace InlayHint { 86export namespace InlayHint {
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 00393d6e8..f1a2020aa 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -113,6 +113,7 @@ async function tryActivate(context: vscode.ExtensionContext) {
113 ctx.registerCommand('newDebugConfig', commands.newDebugConfig); 113 ctx.registerCommand('newDebugConfig', commands.newDebugConfig);
114 ctx.registerCommand('openDocs', commands.openDocs); 114 ctx.registerCommand('openDocs', commands.openDocs);
115 ctx.registerCommand('openCargoToml', commands.openCargoToml); 115 ctx.registerCommand('openCargoToml', commands.openCargoToml);
116 ctx.registerCommand('peekTests', commands.peekTests);
116 117
117 defaultOnEnter.dispose(); 118 defaultOnEnter.dispose();
118 ctx.registerCommand('onEnter', commands.onEnter); 119 ctx.registerCommand('onEnter', commands.onEnter);