about summary refs log tree commit diff
path: root/src/tools
diff options
context:
space:
mode:
authorKajetan Puchalski <kajetan.puchalski@kajetanp.co.uk>2024-10-02 16:47:05 +0100
committerKajetan Puchalski <kajetan.puchalski@kajetanp.co.uk>2024-10-02 17:01:10 +0100
commit96d667ba295848ffa55756e15d0b7ad6b7d829fe (patch)
tree7272456c49818d1f54d6936a3322de6e58c8db12 /src/tools
parentb91eeae55954c4ce48e825a317fc2fe6f3de00b5 (diff)
downloadrust-96d667ba295848ffa55756e15d0b7ad6b7d829fe.tar.gz
rust-96d667ba295848ffa55756e15d0b7ad6b7d829fe.zip
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
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs
index 9773d8dbce0..3a1770d770d 100644
--- a/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/request.rs
+++ b/src/tools/rust-analyzer/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
                     };