mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-08-22 11:24:24 +00:00
fix: in VSCode, correctly resolve relative paths to errors
VS Code problem matcher are restricted to be static "regexes". You can't create a problem matcher dynamically, and you can't use custom code in lieu of problem matcher. This creates a problem for rust/cargo compiler errors. They use paths relative to the root of the Cargo workspace, but VS Code doesn't necessary know where that root is. Luckily, there's a way out: our current problem matcher is defined like this: "fileLocation": [ "autoDetect", "${workspaceRoot}" ], That means that relative pahts would be resoleved relative to workspace root. VS Code allows to specify a command inside `${}`. So we can plug custom logic there to fetch Cargo's workspace root! And that's exactly what this PR is doing!
This commit is contained in:
parent
61504c8d95
commit
5bbfea03cc
6 changed files with 21 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue