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.rs23
1 files changed, 20 insertions, 3 deletions
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs
index 5518b6bc7f..02fda6e6ea 100644
--- a/crates/project-model/src/workspace.rs
+++ b/crates/project-model/src/workspace.rs
@@ -459,18 +459,35 @@ impl ProjectWorkspace {
}
}
- pub fn find_sysroot_proc_macro_srv(&self) -> Option<AbsPathBuf> {
+ pub fn find_sysroot_proc_macro_srv(&self) -> Result<AbsPathBuf> {
match self {
ProjectWorkspace::Cargo { sysroot: Ok(sysroot), .. }
- | ProjectWorkspace::Json { sysroot: Ok(sysroot), .. } => {
+ | ProjectWorkspace::Json { sysroot: Ok(sysroot), .. }
+ | ProjectWorkspace::DetachedFiles { sysroot: Ok(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())
+ .ok_or_else(|| {
+ anyhow::anyhow!(
+ "cannot find proc-macro server in sysroot `{}`",
+ sysroot.root().display()
+ )
+ })
+ }
+ ProjectWorkspace::DetachedFiles { .. } => {
+ Err(anyhow::anyhow!("cannot find proc-macro server, no sysroot was found"))
}
- _ => None,
+ ProjectWorkspace::Cargo { cargo, .. } => Err(anyhow::anyhow!(
+ "cannot find proc-macro-srv, the workspace `{}` is missing a sysroot",
+ cargo.workspace_root().display()
+ )),
+ ProjectWorkspace::Json { project, .. } => Err(anyhow::anyhow!(
+ "cannot find proc-macro-srv, the workspace `{}` is missing a sysroot",
+ project.path().display()
+ )),
}
}