Support 'runnables' options in the vs code extension
This commit is contained in:
@@ -69,8 +69,10 @@ export interface Runnable {
|
||||
args: {
|
||||
workspaceRoot?: string;
|
||||
cargoArgs: string[];
|
||||
cargoExtraArgs: string[];
|
||||
executableArgs: string[];
|
||||
expectTest?: boolean;
|
||||
overrideCargo?: string;
|
||||
};
|
||||
}
|
||||
export const runnables = new lc.RequestType<RunnablesParams, Runnable[], void>("experimental/runnables");
|
||||
|
||||
@@ -129,6 +129,7 @@ export async function createTask(runnable: ra.Runnable, config: Config): Promise
|
||||
}
|
||||
|
||||
const args = [...runnable.args.cargoArgs]; // should be a copy!
|
||||
args.push(...runnable.args.cargoExtraArgs); // Append user-specified cargo options.
|
||||
if (runnable.args.executableArgs.length > 0) {
|
||||
args.push('--', ...runnable.args.executableArgs);
|
||||
}
|
||||
@@ -139,6 +140,7 @@ export async function createTask(runnable: ra.Runnable, config: Config): Promise
|
||||
args: args.slice(1),
|
||||
cwd: runnable.args.workspaceRoot || ".",
|
||||
env: prepareEnv(runnable, config.runnableEnv),
|
||||
overrideCargo: runnable.args.overrideCargo,
|
||||
};
|
||||
|
||||
const target = vscode.workspace.workspaceFolders![0]; // safe, see main activate()
|
||||
|
||||
@@ -13,6 +13,7 @@ export interface CargoTaskDefinition extends vscode.TaskDefinition {
|
||||
args?: string[];
|
||||
cwd?: string;
|
||||
env?: { [key: string]: string };
|
||||
overrideCargo?: string;
|
||||
}
|
||||
|
||||
class CargoTaskProvider implements vscode.TaskProvider {
|
||||
@@ -98,7 +99,14 @@ export async function buildCargoTask(
|
||||
}
|
||||
|
||||
if (!exec) {
|
||||
exec = new vscode.ShellExecution(toolchain.cargoPath(), args, definition);
|
||||
// Check whether we must use a user-defined substitute for cargo.
|
||||
const cargoCommand = definition.overrideCargo ? definition.overrideCargo : toolchain.cargoPath();
|
||||
|
||||
// Prepare the whole command as one line. It is required if user has provided override command which contains spaces,
|
||||
// for example "wrapper cargo". Without manual preparation the overridden command will be quoted and fail to execute.
|
||||
const fullCommand = [cargoCommand, ...args].join(" ");
|
||||
|
||||
exec = new vscode.ShellExecution(fullCommand, definition);
|
||||
}
|
||||
|
||||
return new vscode.Task(
|
||||
|
||||
Reference in New Issue
Block a user