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.rs26
1 files changed, 16 insertions, 10 deletions
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs
index 199fa1e5c2..a6f1453582 100644
--- a/crates/project-model/src/workspace.rs
+++ b/crates/project-model/src/workspace.rs
@@ -667,6 +667,14 @@ impl ProjectWorkspace {
_ => false,
}
}
+
+ /// Returns `true` if the project workspace is [`Json`].
+ ///
+ /// [`Json`]: ProjectWorkspace::Json
+ #[must_use]
+ pub fn is_json(&self) -> bool {
+ matches!(self, Self::Json { .. })
+ }
}
fn project_json_to_crate_graph(
@@ -678,7 +686,7 @@ fn project_json_to_crate_graph(
target_layout: TargetLayoutLoadResult,
) -> (CrateGraph, ProcMacroPaths) {
let mut crate_graph = CrateGraph::default();
- let mut proc_macros = FxHashMap::default();
+ let mut proc_macros: ProcMacroPaths = FxHashMap::default();
let sysroot_deps = sysroot.as_ref().map(|sysroot| {
sysroot_to_crate_graph(
&mut crate_graph,
@@ -730,13 +738,11 @@ fn project_json_to_crate_graph(
);
if krate.is_proc_macro {
if let Some(path) = krate.proc_macro_dylib_path.clone() {
- proc_macros.insert(
- crate_graph_crate_id,
- Some((
- krate.display_name.as_ref().map(|it| it.canonical_name().to_owned()),
- path,
- )),
- );
+ let node = Ok((
+ krate.display_name.as_ref().map(|it| it.canonical_name().to_owned()),
+ path,
+ ));
+ proc_macros.insert(crate_graph_crate_id, node);
}
}
(crate_id, crate_graph_crate_id)
@@ -1180,8 +1186,8 @@ fn add_target_crate_root(
);
if is_proc_macro {
let proc_macro = match build_data.as_ref().map(|it| it.proc_macro_dylib_path.as_ref()) {
- Some(it) => it.cloned().map(|path| Some((Some(cargo_name.to_owned()), path))),
- None => Some(None),
+ Some(it) => it.cloned().map(|path| Ok((Some(cargo_name.to_owned()), path))),
+ None => Some(Err("crate has not yet been build".to_owned())),
};
if let Some(proc_macro) = proc_macro {
proc_macros.insert(crate_id, proc_macro);