aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/base_db/src/input.rs23
-rw-r--r--crates/project_model/src/lib.rs5
2 files changed, 28 insertions, 0 deletions
diff --git a/crates/base_db/src/input.rs b/crates/base_db/src/input.rs
index 215ac4b41..b870e2cee 100644
--- a/crates/base_db/src/input.rs
+++ b/crates/base_db/src/input.rs
@@ -290,6 +290,29 @@ impl CrateGraph {
290 } 290 }
291 false 291 false
292 } 292 }
293
294 // Work around for https://github.com/rust-analyzer/rust-analyzer/issues/6038.
295 // As hacky as it gets.
296 pub fn patch_cfg_if(&mut self) -> bool {
297 let cfg_if = self.hacky_find_crate("cfg_if");
298 let std = self.hacky_find_crate("std");
299 match (cfg_if, std) {
300 (Some(cfg_if), Some(std)) => {
301 self.arena.get_mut(&cfg_if).unwrap().dependencies.clear();
302 self.arena
303 .get_mut(&std)
304 .unwrap()
305 .dependencies
306 .push(Dependency { crate_id: cfg_if, name: CrateName::new("cfg_if").unwrap() });
307 true
308 }
309 _ => false,
310 }
311 }
312
313 fn hacky_find_crate(&self, declaration_name: &str) -> Option<CrateId> {
314 self.iter().find(|it| self[*it].declaration_name.as_deref() == Some(declaration_name))
315 }
293} 316}
294 317
295impl ops::Index<CrateId> for CrateGraph { 318impl ops::Index<CrateId> for CrateGraph {
diff --git a/crates/project_model/src/lib.rs b/crates/project_model/src/lib.rs
index d1e7602fc..ea95d1c77 100644
--- a/crates/project_model/src/lib.rs
+++ b/crates/project_model/src/lib.rs
@@ -485,6 +485,11 @@ impl ProjectWorkspace {
485 } 485 }
486 } 486 }
487 } 487 }
488 if crate_graph.patch_cfg_if() {
489 log::debug!("Patched std to depend on cfg-if")
490 } else {
491 log::debug!("Did not patch std to depend on cfg-if")
492 }
488 crate_graph 493 crate_graph
489 } 494 }
490} 495}