Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project-model/src/workspace.rs')
-rw-r--r--crates/project-model/src/workspace.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs
index 4a2f468de7..3d199ed24a 100644
--- a/crates/project-model/src/workspace.rs
+++ b/crates/project-model/src/workspace.rs
@@ -377,6 +377,21 @@ impl ProjectWorkspace {
}
}
+ pub fn find_sysroot_proc_macro_srv(&self) -> Option<AbsPathBuf> {
+ match self {
+ ProjectWorkspace::Cargo { sysroot: Some(sysroot), .. }
+ | ProjectWorkspace::Json { sysroot: Some(sysroot), .. } => {
+ let standalone_server_name =
+ format!("rust-analyzer-proc-macro-srv{}", std::env::consts::EXE_SUFFIX);
+ ["libexec", "lib"]
+ .into_iter()
+ .map(|segment| sysroot.root().join(segment).join(&standalone_server_name))
+ .find(|server_path| std::fs::metadata(&server_path).is_ok())
+ }
+ _ => None,
+ }
+ }
+
/// Returns the roots for the current `ProjectWorkspace`
/// The return type contains the path and whether or not
/// the root is a member of the current workspace