diff options
Diffstat (limited to 'crates/ra_hir/src/ty/utils.rs')
-rw-r--r-- | crates/ra_hir/src/ty/utils.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/crates/ra_hir/src/ty/utils.rs b/crates/ra_hir/src/ty/utils.rs index 672804787..52994b9e3 100644 --- a/crates/ra_hir/src/ty/utils.rs +++ b/crates/ra_hir/src/ty/utils.rs | |||
@@ -5,9 +5,9 @@ use hir_def::{ | |||
5 | db::DefDatabase, | 5 | db::DefDatabase, |
6 | resolver::{HasResolver, TypeNs}, | 6 | resolver::{HasResolver, TypeNs}, |
7 | type_ref::TypeRef, | 7 | type_ref::TypeRef, |
8 | TraitId, | 8 | TraitId, TypeAliasId, |
9 | }; | 9 | }; |
10 | use hir_expand::name; | 10 | use hir_expand::name::{self, Name}; |
11 | 11 | ||
12 | // FIXME: this is wrong, b/c it can't express `trait T: PartialEq<()>`. | 12 | // FIXME: this is wrong, b/c it can't express `trait T: PartialEq<()>`. |
13 | // We should return a `TraitREf` here. | 13 | // We should return a `TraitREf` here. |
@@ -51,3 +51,13 @@ pub(crate) fn all_super_traits(db: &impl DefDatabase, trait_: TraitId) -> Vec<Tr | |||
51 | } | 51 | } |
52 | result | 52 | result |
53 | } | 53 | } |
54 | |||
55 | pub(crate) fn associated_type_by_name_including_super_traits( | ||
56 | db: &impl DefDatabase, | ||
57 | trait_: TraitId, | ||
58 | name: &Name, | ||
59 | ) -> Option<TypeAliasId> { | ||
60 | all_super_traits(db, trait_) | ||
61 | .into_iter() | ||
62 | .find_map(|t| db.trait_data(t).associated_type_by_name(name)) | ||
63 | } | ||