aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-10-20 11:36:28 +0100
committerGitHub <[email protected]>2020-10-20 11:36:28 +0100
commitbe762ccccd5a86632e60351518528d078785a3e2 (patch)
tree7ebc1b5d72a14704dfe8539a039b2acda29bdf64
parent4c00bdea675d33d578cff1c0d7cc3967303e6653 (diff)
parent7a21e9302e194d5ed2a008417130c54cfa52ca24 (diff)
Merge #6294
6294: Add a hacky remidy for #6038 r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
-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}