Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--editors/code/package.json9
-rw-r--r--editors/code/src/commands.ts4
-rw-r--r--editors/code/src/ctx.ts4
-rw-r--r--editors/code/src/main.ts1
-rw-r--r--editors/code/src/run.ts2
-rw-r--r--editors/code/src/tasks.ts2
6 files changed, 21 insertions, 1 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index f1dd3aa79f..ccf62d002b 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -1301,6 +1301,15 @@
"endsPattern": "^\\[Finished running\\b"
},
"pattern": "$rustc"
+ },
+ {
+ "name": "rustc-run",
+ "base": "$rustc",
+ "fileLocation": [
+ "autoDetect",
+ "${command:rust-analyzer.cargoWorkspaceRootForCurrentRun}"
+ ],
+ "pattern": "$rustc-run"
}
],
"colors": [
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index b9ad525e36..6b10073aa8 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -842,6 +842,7 @@ export function run(ctx: Ctx): Cmd {
item.detail = "rerun";
prevRunnable = item;
const task = await createTask(item.runnable, ctx.config);
+ ctx.cargoWorkspaceRootForCurrentRun = item.cargoWorkspaceRoot;
return await vscode.tasks.executeTask(task);
};
}
@@ -946,3 +947,6 @@ export function linkToCommand(ctx: Ctx): Cmd {
}
};
}
+export function getCargoWorkspaceDir(ctx: Ctx): Cmd {
+ return async () => ctx.cargoWorkspaceRootForCurrentRun;
+}
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts
index 26510011d4..b6c0eedfb1 100644
--- a/editors/code/src/ctx.ts
+++ b/editors/code/src/ctx.ts
@@ -17,6 +17,10 @@ export type Workspace =
};
export class Ctx {
+ // Helps VS Code to correctly link problems from runnables. This is used by
+ // `rust-analyzer.cargoWorkspaceRootForCurrentRun` command of $rustc-run problem matcher.
+ cargoWorkspaceRootForCurrentRun?: string = undefined;
+
private constructor(
readonly config: Config,
private readonly extCtx: vscode.ExtensionContext,
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 41bde4195e..6e6c2513dd 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -189,6 +189,7 @@ async function initCommonContext(context: vscode.ExtensionContext, ctx: Ctx) {
ctx.registerCommand("resolveCodeAction", commands.resolveCodeAction);
ctx.registerCommand("applyActionGroup", commands.applyActionGroup);
ctx.registerCommand("gotoLocation", commands.gotoLocation);
+ ctx.registerCommand("cargoWorkspaceRootForCurrentRun", commands.getCargoWorkspaceDir);
ctx.registerCommand("linkToCommand", commands.linkToCommand);
}
diff --git a/editors/code/src/run.ts b/editors/code/src/run.ts
index 22e5eda682..100c0fe2d8 100644
--- a/editors/code/src/run.ts
+++ b/editors/code/src/run.ts
@@ -89,12 +89,14 @@ export async function selectRunnable(
export class RunnableQuickPick implements vscode.QuickPickItem {
public label: string;
+ public cargoWorkspaceRoot?: string;
public description?: string | undefined;
public detail?: string | undefined;
public picked?: boolean | undefined;
constructor(public runnable: ra.Runnable) {
this.label = runnable.label;
+ this.cargoWorkspaceRoot = runnable.args.workspaceRoot;
}
}
diff --git a/editors/code/src/tasks.ts b/editors/code/src/tasks.ts
index e6239deeb2..44697f95ba 100644
--- a/editors/code/src/tasks.ts
+++ b/editors/code/src/tasks.ts
@@ -128,7 +128,7 @@ export async function buildCargoTask(
name,
TASK_SOURCE,
exec,
- ["$rustc"]
+ ["$rustc-run"]
);
}