about summary refs log tree commit diff
path: root/editors/code
diff options
context:
space:
mode:
authorAleksey Kladov <aleksey.kladov@gmail.com>2021-02-10 14:28:13 +0300
committerAleksey Kladov <aleksey.kladov@gmail.com>2021-02-10 14:37:27 +0300
commit97166e2ad9307b3f4cca33d2c82149be9eb5a633 (patch)
tree8632550e4386b11b09deaacb38bf67929fe03f93 /editors/code
parent36465b34b3b7f991ebf85680924acdb809b0494e (diff)
downloadrust-97166e2ad9307b3f4cca33d2c82149be9eb5a633.tar.gz
rust-97166e2ad9307b3f4cca33d2c82149be9eb5a633.zip
Add **Copy Run Command Line** command for vscode
This is useful when you want to, e.g., run a specific test in a terminal
with `--release`.
Diffstat (limited to 'editors/code')
-rw-r--r--editors/code/package.json5
-rw-r--r--editors/code/src/commands.ts14
-rw-r--r--editors/code/src/main.ts1
-rw-r--r--editors/code/src/run.ts19
4 files changed, 31 insertions, 8 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index e5d43905048..55825456ec5 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -134,6 +134,11 @@
                 "category": "Rust Analyzer"
             },
             {
+                "command": "rust-analyzer.copyRunCommandLine",
+                "title": "Copy Run Command Line",
+                "category": "Rust Analyzer"
+            },
+            {
                 "command": "rust-analyzer.debug",
                 "title": "Debug",
                 "category": "Rust Analyzer"
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index cbda619ea9d..e3a23c0d20a 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -5,7 +5,7 @@ import * as ra from './lsp_ext';
 import { Ctx, Cmd } from './ctx';
 import { applySnippetWorkspaceEdit, applySnippetTextEdits } from './snippets';
 import { spawnSync } from 'child_process';
-import { RunnableQuickPick, selectRunnable, createTask } from './run';
+import { RunnableQuickPick, selectRunnable, createTask, createArgs } from './run';
 import { AstInspector } from './ast_inspector';
 import { isRustDocument, sleep, isRustEditor } from './util';
 import { startDebugSession, makeDebugConfig } from './debug';
@@ -572,6 +572,18 @@ export function runSingle(ctx: Ctx): Cmd {
     };
 }
 
+export function copyRunCommandLine(ctx: Ctx) {
+    let prevRunnable: RunnableQuickPick | undefined;
+    return async () => {
+        const item = await selectRunnable(ctx, prevRunnable);
+        if (!item) return;
+        const args = createArgs(item.runnable);
+        const commandLine = ["cargo", ...args].join(" ");
+        await vscode.env.clipboard.writeText(commandLine);
+        await vscode.window.showInformationMessage("Cargo invocation copied to the clipboard.");
+    };
+}
+
 export function debug(ctx: Ctx): Cmd {
     let prevDebuggee: RunnableQuickPick | undefined;
 
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 1900d900aff..43cae5c7fe7 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -108,6 +108,7 @@ async function tryActivate(context: vscode.ExtensionContext) {
     ctx.registerCommand('viewHir', commands.viewHir);
     ctx.registerCommand('expandMacro', commands.expandMacro);
     ctx.registerCommand('run', commands.run);
+    ctx.registerCommand('copyRunCommandLine', commands.copyRunCommandLine);
     ctx.registerCommand('debug', commands.debug);
     ctx.registerCommand('newDebugConfig', commands.newDebugConfig);
     ctx.registerCommand('openDocs', commands.openDocs);
diff --git a/editors/code/src/run.ts b/editors/code/src/run.ts
index 17573cd8265..f42baed1655 100644
--- a/editors/code/src/run.ts
+++ b/editors/code/src/run.ts
@@ -128,13 +128,7 @@ export async function createTask(runnable: ra.Runnable, config: Config): Promise
         throw `Unexpected runnable kind: ${runnable.kind}`;
     }
 
-    const args = [...runnable.args.cargoArgs]; // should be a copy!
-    if (runnable.args.cargoExtraArgs) {
-        args.push(...runnable.args.cargoExtraArgs); // Append user-specified cargo options.
-    }
-    if (runnable.args.executableArgs.length > 0) {
-        args.push('--', ...runnable.args.executableArgs);
-    }
+    const args = createArgs(runnable);
 
     const definition: tasks.CargoTaskDefinition = {
         type: tasks.TASK_TYPE,
@@ -151,3 +145,14 @@ export async function createTask(runnable: ra.Runnable, config: Config): Promise
 
     return cargoTask;
 }
+
+export function createArgs(runnable: ra.Runnable): string[] {
+    const args = [...runnable.args.cargoArgs]; // should be a copy!
+    if (runnable.args.cargoExtraArgs) {
+        args.push(...runnable.args.cargoExtraArgs); // Append user-specified cargo options.
+    }
+    if (runnable.args.executableArgs.length > 0) {
+        args.push('--', ...runnable.args.executableArgs);
+    }
+    return args;
+}