diff options
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 20 |
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. |