@@ -3,6 +3,7 @@ import * as lc from 'vscode-languageclient';
|
||||
import * as ra from '../rust-analyzer-api';
|
||||
|
||||
import { Ctx, Cmd } from '../ctx';
|
||||
import { debug } from 'vscode';
|
||||
|
||||
export function run(ctx: Ctx): Cmd {
|
||||
let prevRunnable: RunnableQuickPick | undefined;
|
||||
@@ -62,6 +63,31 @@ export function runSingle(ctx: Ctx): Cmd {
|
||||
};
|
||||
}
|
||||
|
||||
export function debugSingle(ctx: Ctx): Cmd {
|
||||
return async (config: ra.Runnable) => {
|
||||
const editor = ctx.activeRustEditor;
|
||||
if (!editor) return;
|
||||
|
||||
if (config.args[0] === 'run') {
|
||||
config.args[0] = 'build';
|
||||
} else {
|
||||
config.args.push('--no-run');
|
||||
}
|
||||
|
||||
const debugConfig = {
|
||||
type: "lldb",
|
||||
request: "launch",
|
||||
name: config.label,
|
||||
cargo: {
|
||||
args: config.args,
|
||||
},
|
||||
args: config.extraArgs,
|
||||
cwd: config.cwd
|
||||
};
|
||||
return debug.startDebugging(undefined, debugConfig);
|
||||
};
|
||||
}
|
||||
|
||||
class RunnableQuickPick implements vscode.QuickPickItem {
|
||||
public label: string;
|
||||
public description?: string | undefined;
|
||||
@@ -87,7 +113,7 @@ function createTask(spec: ra.Runnable): vscode.Task {
|
||||
type: 'cargo',
|
||||
label: spec.label,
|
||||
command: spec.bin,
|
||||
args: spec.args,
|
||||
args: spec.extraArgs ? [...spec.args, '--', ...spec.extraArgs] : spec.args,
|
||||
env: spec.env,
|
||||
};
|
||||
|
||||
|
||||
@@ -83,6 +83,7 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||
|
||||
// Internal commands which are invoked by the server.
|
||||
ctx.registerCommand('runSingle', commands.runSingle);
|
||||
ctx.registerCommand('debugSingle', commands.debugSingle);
|
||||
ctx.registerCommand('showReferences', commands.showReferences);
|
||||
ctx.registerCommand('applySourceChange', commands.applySourceChange);
|
||||
ctx.registerCommand('selectAndApplySourceChange', commands.selectAndApplySourceChange);
|
||||
|
||||
@@ -80,13 +80,12 @@ export interface Runnable {
|
||||
label: string;
|
||||
bin: string;
|
||||
args: Vec<string>;
|
||||
extraArgs: Vec<string>;
|
||||
env: FxHashMap<string, string>;
|
||||
cwd: Option<string>;
|
||||
}
|
||||
export const runnables = request<RunnablesParams, Vec<Runnable>>("runnables");
|
||||
|
||||
|
||||
|
||||
export type InlayHint = InlayHint.TypeHint | InlayHint.ParamHint;
|
||||
|
||||
export namespace InlayHint {
|
||||
|
||||
Reference in New Issue
Block a user