Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/base_db/src/input.rs')
| -rw-r--r-- | crates/base_db/src/input.rs | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/crates/base_db/src/input.rs b/crates/base_db/src/input.rs index 565d0c02cf..1dd7783b0e 100644 --- a/crates/base_db/src/input.rs +++ b/crates/base_db/src/input.rs @@ -217,6 +217,22 @@ pub struct Env { pub struct Dependency { pub crate_id: CrateId, pub name: CrateName, + prelude: bool, +} + +impl Dependency { + pub fn new(name: CrateName, crate_id: CrateId) -> Self { + Self { name, crate_id, prelude: true } + } + + pub fn with_prelude(name: CrateName, crate_id: CrateId, prelude: bool) -> Self { + Self { name, crate_id, prelude } + } + + /// Whether this dependency is to be added to the depending crate's extern prelude. + pub fn is_prelude(&self) -> bool { + self.prelude + } } impl CrateGraph { @@ -249,22 +265,21 @@ impl CrateGraph { pub fn add_dep( &mut self, from: CrateId, - name: CrateName, - to: CrateId, + dep: Dependency, ) -> Result<(), CyclicDependenciesError> { let _p = profile::span("add_dep"); // Check if adding a dep from `from` to `to` creates a cycle. To figure // that out, look for a path in the *opposite* direction, from `to` to // `from`. - if let Some(path) = self.find_path(&mut FxHashSet::default(), to, from) { + if let Some(path) = self.find_path(&mut FxHashSet::default(), dep.crate_id, from) { let path = path.into_iter().map(|it| (it, self[it].display_name.clone())).collect(); let err = CyclicDependenciesError { path }; - assert!(err.from().0 == from && err.to().0 == to); + assert!(err.from().0 == from && err.to().0 == dep.crate_id); return Err(err); } - self.arena.get_mut(&from).unwrap().add_dep(name, to); + self.arena.get_mut(&from).unwrap().add_dep(dep); Ok(()) } @@ -409,7 +424,7 @@ impl CrateGraph { .get_mut(&std) .unwrap() .dependencies - .push(Dependency { crate_id: cfg_if, name: CrateName::new("cfg_if").unwrap() }); + .push(Dependency::new(CrateName::new("cfg_if").unwrap(), cfg_if)); true } _ => false, @@ -435,8 +450,8 @@ impl CrateId { } impl CrateData { - fn add_dep(&mut self, name: CrateName, crate_id: CrateId) { - self.dependencies.push(Dependency { crate_id, name }) + fn add_dep(&mut self, dep: Dependency) { + self.dependencies.push(dep) } } @@ -562,9 +577,15 @@ mod tests { Env::default(), Default::default(), ); - assert!(graph.add_dep(crate1, CrateName::new("crate2").unwrap(), crate2).is_ok()); - assert!(graph.add_dep(crate2, CrateName::new("crate3").unwrap(), crate3).is_ok()); - assert!(graph.add_dep(crate3, CrateName::new("crate1").unwrap(), crate1).is_err()); + assert!(graph + .add_dep(crate1, Dependency::new(CrateName::new("crate2").unwrap(), crate2)) + .is_ok()); + assert!(graph + .add_dep(crate2, Dependency::new(CrateName::new("crate3").unwrap(), crate3)) + .is_ok()); + assert!(graph + .add_dep(crate3, Dependency::new(CrateName::new("crate1").unwrap(), crate1)) + .is_err()); } #[test] @@ -588,8 +609,12 @@ mod tests { Env::default(), Default::default(), ); - assert!(graph.add_dep(crate1, CrateName::new("crate2").unwrap(), crate2).is_ok()); - assert!(graph.add_dep(crate2, CrateName::new("crate2").unwrap(), crate2).is_err()); + assert!(graph + .add_dep(crate1, Dependency::new(CrateName::new("crate2").unwrap(), crate2)) + .is_ok()); + assert!(graph + .add_dep(crate2, Dependency::new(CrateName::new("crate2").unwrap(), crate2)) + .is_err()); } #[test] @@ -622,8 +647,12 @@ mod tests { Env::default(), Default::default(), ); - assert!(graph.add_dep(crate1, CrateName::new("crate2").unwrap(), crate2).is_ok()); - assert!(graph.add_dep(crate2, CrateName::new("crate3").unwrap(), crate3).is_ok()); + assert!(graph + .add_dep(crate1, Dependency::new(CrateName::new("crate2").unwrap(), crate2)) + .is_ok()); + assert!(graph + .add_dep(crate2, Dependency::new(CrateName::new("crate3").unwrap(), crate3)) + .is_ok()); } #[test] @@ -648,14 +677,14 @@ mod tests { Default::default(), ); assert!(graph - .add_dep(crate1, CrateName::normalize_dashes("crate-name-with-dashes"), crate2) + .add_dep( + crate1, + Dependency::new(CrateName::normalize_dashes("crate-name-with-dashes"), crate2) + ) .is_ok()); assert_eq!( graph[crate1].dependencies, - vec![Dependency { - crate_id: crate2, - name: CrateName::new("crate_name_with_dashes").unwrap() - }] + vec![Dependency::new(CrateName::new("crate_name_with_dashes").unwrap(), crate2)] ); } } |