Unnamed repository; edit this file 'description' to name the repository.
fix: Join rustfmt overrideCommand with project root
When providing a custom rustfmt command, join it with the project root instead of the workspace root. This fixes rust-analyzer getting the wrong invocation path in projects containing subprojects. This makes the behaviour consistent with how a custom path provided in rust-analyzer.procMacro.server behaves already. Resolves issue #18222
Kajetan Puchalski 2024-10-02
parent e1a7667 · commit 6656460
-rw-r--r--crates/rust-analyzer/src/handlers/request.rs6
1 files changed, 3 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/handlers/request.rs b/crates/rust-analyzer/src/handlers/request.rs
index 9773d8dbce..3a1770d770 100644
--- a/crates/rust-analyzer/src/handlers/request.rs
+++ b/crates/rust-analyzer/src/handlers/request.rs
@@ -2201,14 +2201,14 @@ fn run_rustfmt(
let cmd = Utf8PathBuf::from(&command);
let target_spec = TargetSpec::for_file(snap, file_id)?;
let mut cmd = match target_spec {
- Some(TargetSpec::Cargo(spec)) => {
- // approach: if the command name contains a path separator, join it with the workspace root.
+ Some(TargetSpec::Cargo(_)) => {
+ // approach: if the command name contains a path separator, join it with the project root.
// however, if the path is absolute, joining will result in the absolute path being preserved.
// as a fallback, rely on $PATH-based discovery.
let cmd_path = if command.contains(std::path::MAIN_SEPARATOR)
|| (cfg!(windows) && command.contains('/'))
{
- spec.workspace_root.join(cmd).into()
+ snap.config.root_path().join(cmd).into()
} else {
cmd
};