mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 04:19:13 +00:00
Create tasks for all workspaces
This commit is contained in:
parent
5587d0a3e3
commit
a05163db14
4 changed files with 20 additions and 22 deletions
|
@ -17,11 +17,9 @@ export interface CargoTaskDefinition extends vscode.TaskDefinition {
|
|||
}
|
||||
|
||||
class CargoTaskProvider implements vscode.TaskProvider {
|
||||
private readonly target: vscode.WorkspaceFolder;
|
||||
private readonly config: Config;
|
||||
|
||||
constructor(target: vscode.WorkspaceFolder, config: Config) {
|
||||
this.target = target;
|
||||
constructor(config: Config) {
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
|
@ -40,10 +38,12 @@ class CargoTaskProvider implements vscode.TaskProvider {
|
|||
];
|
||||
|
||||
const tasks: vscode.Task[] = [];
|
||||
for (const def of defs) {
|
||||
const vscodeTask = await buildCargoTask(this.target, { type: TASK_TYPE, command: def.command }, `cargo ${def.command}`, [def.command], this.config.cargoRunner);
|
||||
vscodeTask.group = def.group;
|
||||
tasks.push(vscodeTask);
|
||||
for (const workspaceTarget of vscode.workspace.workspaceFolders || []) {
|
||||
for (const def of defs) {
|
||||
const vscodeTask = await buildCargoTask(workspaceTarget, { type: TASK_TYPE, command: def.command }, `cargo ${def.command}`, [def.command], this.config.cargoRunner);
|
||||
vscodeTask.group = def.group;
|
||||
tasks.push(vscodeTask);
|
||||
}
|
||||
}
|
||||
|
||||
return tasks;
|
||||
|
@ -58,14 +58,19 @@ class CargoTaskProvider implements vscode.TaskProvider {
|
|||
|
||||
if (definition.type === TASK_TYPE && definition.command) {
|
||||
const args = [definition.command].concat(definition.args ?? []);
|
||||
|
||||
return await buildCargoTask(this.target, definition, task.name, args, this.config.cargoRunner);
|
||||
if (isWorkspaceFolder(task.scope)) {
|
||||
return await buildCargoTask(task.scope, definition, task.name, args, this.config.cargoRunner);
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function isWorkspaceFolder(scope?: any): scope is vscode.WorkspaceFolder {
|
||||
return (scope as vscode.WorkspaceFolder).name !== undefined;
|
||||
}
|
||||
|
||||
export async function buildCargoTask(
|
||||
target: vscode.WorkspaceFolder,
|
||||
definition: CargoTaskDefinition,
|
||||
|
@ -119,7 +124,7 @@ export async function buildCargoTask(
|
|||
);
|
||||
}
|
||||
|
||||
export function activateTaskProvider(target: vscode.WorkspaceFolder, config: Config): vscode.Disposable {
|
||||
const provider = new CargoTaskProvider(target, config);
|
||||
export function activateTaskProvider(config: Config): vscode.Disposable {
|
||||
const provider = new CargoTaskProvider(config);
|
||||
return vscode.tasks.registerTaskProvider(TASK_TYPE, provider);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue