diff options
author | Aleksey Kladov <[email protected]> | 2021-03-23 09:49:55 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2021-03-23 09:49:55 +0000 |
commit | 45a8f37b6ae230db6c30c013f17d8aebac98a5e1 (patch) | |
tree | ddd1d23321319816f932551c0d8b0c42e590e40b /crates/hir/src | |
parent | 4b997b86633b1c0ca134d89e8236d285422c04e3 (diff) |
Compute more mathematically well-rounded notion of transitive deps
By including the crate itself, we make the resulting set closed with
respect to `transitve_reveres_dependencies` operation, as it becomes a
proper transitive closure. This just feels more proper and mathy.
And, indeed, this actually allows us to simplify call sites somewhat.
Diffstat (limited to 'crates/hir/src')
-rw-r--r-- | crates/hir/src/lib.rs | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 30b96d7e2..aefebde06 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs | |||
@@ -1572,8 +1572,7 @@ impl Impl { | |||
1572 | pub fn all_for_trait(db: &dyn HirDatabase, trait_: Trait) -> Vec<Impl> { | 1572 | pub fn all_for_trait(db: &dyn HirDatabase, trait_: Trait) -> Vec<Impl> { |
1573 | let krate = trait_.module(db).krate(); | 1573 | let krate = trait_.module(db).krate(); |
1574 | let mut all = Vec::new(); | 1574 | let mut all = Vec::new(); |
1575 | for Crate { id } in krate.transitive_reverse_dependencies(db).into_iter().chain(Some(krate)) | 1575 | for Crate { id } in krate.transitive_reverse_dependencies(db).into_iter() { |
1576 | { | ||
1577 | let impls = db.trait_impls_in_crate(id); | 1576 | let impls = db.trait_impls_in_crate(id); |
1578 | all.extend(impls.for_trait(trait_.id).map(Self::from)) | 1577 | all.extend(impls.for_trait(trait_.id).map(Self::from)) |
1579 | } | 1578 | } |