aboutsummaryrefslogtreecommitdiff
path: root/crates/base_db
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-10-20 11:34:39 +0100
committerAleksey Kladov <[email protected]>2020-10-20 11:34:39 +0100
commit7a21e9302e194d5ed2a008417130c54cfa52ca24 (patch)
treea2d1b428e99802d8a7fe7c73a0633601cf217b24 /crates/base_db
parent378dd90bab65fa6df078444c3932118105a460b8 (diff)
Add a hacky remidy for #6038
The proper fix I think is: * move rust-lang/rust library crates to a separate workspace * when packaging rust-src component, vendor sources of external deps
Diffstat (limited to 'crates/base_db')
-rw-r--r--crates/base_db/src/input.rs23
1 files changed, 23 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 {