about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2024-01-08 16:28:18 +0100
committerLukas Wirth <lukastw97@gmail.com>2024-01-09 10:35:54 +0100
commita8c94eaf131cdadad07296fd1d69edeb51aa0970 (patch)
tree3225011a689a83643f56f3e842a2bd670ab61c42
parentf5f7ddae23f9a959e684fefd3f1b78c93f89968e (diff)
downloadrust-a8c94eaf131cdadad07296fd1d69edeb51aa0970.tar.gz
rust-a8c94eaf131cdadad07296fd1d69edeb51aa0970.zip
fix: Fix rust-analyzer-proc-macro-srv failing to spawn on windows
-rw-r--r--crates/proc-macro-api/src/process.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/crates/proc-macro-api/src/process.rs b/crates/proc-macro-api/src/process.rs
index 3494164c067..0f64f9195d8 100644
--- a/crates/proc-macro-api/src/process.rs
+++ b/crates/proc-macro-api/src/process.rs
@@ -131,12 +131,19 @@ impl Process {
 }
 
 fn mk_child(path: &AbsPath, null_stderr: bool) -> io::Result<Child> {
-    Command::new(path.as_os_str())
-        .env("RUST_ANALYZER_INTERNALS_DO_NOT_USE", "this is unstable")
+    let mut cmd = Command::new(path.as_os_str());
+    cmd.env("RUST_ANALYZER_INTERNALS_DO_NOT_USE", "this is unstable")
         .stdin(Stdio::piped())
         .stdout(Stdio::piped())
-        .stderr(if null_stderr { Stdio::null() } else { Stdio::inherit() })
-        .spawn()
+        .stderr(if null_stderr { Stdio::null() } else { Stdio::inherit() });
+    if cfg!(windows) {
+        let mut path_var = std::ffi::OsString::new();
+        path_var.push(path.parent().unwrap().parent().unwrap().as_os_str());
+        path_var.push("\\bin;");
+        path_var.push(std::env::var_os("PATH").unwrap_or_default());
+        cmd.env("PATH", path_var);
+    }
+    cmd.spawn()
 }
 
 fn send_request(