From faf003763516074c619cee7e43ca8bc365540c92 Mon Sep 17 00:00:00 2001 From: "Jeremy A. Kolb" Date: Fri, 11 Jan 2019 15:16:55 -0500 Subject: Code lens support for running tests --- editors/code/src/commands/index.ts | 2 ++ editors/code/src/commands/run_single.ts | 63 +++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 editors/code/src/commands/run_single.ts (limited to 'editors/code/src/commands') diff --git a/editors/code/src/commands/index.ts b/editors/code/src/commands/index.ts index 33e2b34a2..c8bb55591 100644 --- a/editors/code/src/commands/index.ts +++ b/editors/code/src/commands/index.ts @@ -4,6 +4,7 @@ import * as joinLines from './join_lines'; import * as matchingBrace from './matching_brace'; import * as onEnter from './on_enter'; import * as parentModule from './parent_module'; +import * as runSingle from './run_single'; import * as runnables from './runnables'; import * as syntaxTree from './syntaxTree'; @@ -13,6 +14,7 @@ export { joinLines, matchingBrace, parentModule, + runSingle, runnables, syntaxTree, onEnter diff --git a/editors/code/src/commands/run_single.ts b/editors/code/src/commands/run_single.ts new file mode 100644 index 000000000..855bcdb06 --- /dev/null +++ b/editors/code/src/commands/run_single.ts @@ -0,0 +1,63 @@ +import * as vscode from 'vscode'; +import * as lc from 'vscode-languageclient'; + +interface Runnable { + range: lc.Range; + label: string; + bin: string; + args: string[]; + env: { [index: string]: string }; +} + +interface CargoTaskDefinition extends vscode.TaskDefinition { + type: 'cargo'; + label: string; + command: string; + args: string[]; + env?: { [key: string]: string }; +} + +function createTask(spec: Runnable): vscode.Task { + const TASK_SOURCE = 'Rust'; + const definition: CargoTaskDefinition = { + type: 'cargo', + label: 'cargo', + command: spec.bin, + args: spec.args, + env: spec.env + }; + + const execOption: vscode.ShellExecutionOptions = { + cwd: '.', + env: definition.env + }; + const exec = new vscode.ShellExecution(definition.command, definition.args, execOption); + + const f = vscode.workspace.workspaceFolders![0]; + const t = new vscode.Task( + definition, + f, + definition.label, + TASK_SOURCE, + exec, + ['$rustc'] + ); + t.presentationOptions.clear = true + return t; +} + +export async function handle(runnable: Runnable) { + const editor = vscode.window.activeTextEditor; + if (editor == null || editor.document.languageId !== 'rust') { + return; + } + + const task = createTask(runnable); + task.group = vscode.TaskGroup.Build; + task.presentationOptions = { + reveal: vscode.TaskRevealKind.Always, + panel: vscode.TaskPanelKind.Dedicated, + }; + + return vscode.tasks.executeTask(task); +} \ No newline at end of file -- cgit v1.2.3