aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 830aea1f3..6602d1220 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -779,6 +779,18 @@ impl Trait {
779 self.trait_data(db).items().to_vec() 779 self.trait_data(db).items().to_vec()
780 } 780 }
781 781
782 pub fn associated_type_by_name(self, db: &impl DefDatabase, name: Name) -> Option<TypeAlias> {
783 let trait_data = self.trait_data(db);
784 trait_data
785 .items()
786 .iter()
787 .filter_map(|item| match item {
788 TraitItem::TypeAlias(t) => Some(*t),
789 _ => None,
790 })
791 .find(|t| t.name(db) == name)
792 }
793
782 pub(crate) fn trait_data(self, db: &impl DefDatabase) -> Arc<TraitData> { 794 pub(crate) fn trait_data(self, db: &impl DefDatabase) -> Arc<TraitData> {
783 db.trait_data(self) 795 db.trait_data(self)
784 } 796 }
@@ -831,8 +843,12 @@ impl TypeAlias {
831 } 843 }
832 } 844 }
833 845
834 pub fn type_ref(self, db: &impl DefDatabase) -> Arc<TypeRef> { 846 pub fn type_ref(self, db: &impl DefDatabase) -> Option<TypeRef> {
835 db.type_alias_ref(self) 847 db.type_alias_data(self).type_ref.clone()
848 }
849
850 pub fn name(self, db: &impl DefDatabase) -> Name {
851 db.type_alias_data(self).name.clone()
836 } 852 }
837 853
838 /// Builds a resolver for the type references in this type alias. 854 /// Builds a resolver for the type references in this type alias.