diff options
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 830aea1f3..4fbb1fc8f 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -779,6 +779,19 @@ 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 | .filter(|t| t.name(db) == name) | ||
792 | .next() | ||
793 | } | ||
794 | |||
782 | pub(crate) fn trait_data(self, db: &impl DefDatabase) -> Arc<TraitData> { | 795 | pub(crate) fn trait_data(self, db: &impl DefDatabase) -> Arc<TraitData> { |
783 | db.trait_data(self) | 796 | db.trait_data(self) |
784 | } | 797 | } |
@@ -831,8 +844,12 @@ impl TypeAlias { | |||
831 | } | 844 | } |
832 | } | 845 | } |
833 | 846 | ||
834 | pub fn type_ref(self, db: &impl DefDatabase) -> Arc<TypeRef> { | 847 | pub fn type_ref(self, db: &impl DefDatabase) -> Option<TypeRef> { |
835 | db.type_alias_ref(self) | 848 | db.type_alias_data(self).type_ref.clone() |
849 | } | ||
850 | |||
851 | pub fn name(self, db: &impl DefDatabase) -> Name { | ||
852 | db.type_alias_data(self).name.clone() | ||
836 | } | 853 | } |
837 | 854 | ||
838 | /// Builds a resolver for the type references in this type alias. | 855 | /// Builds a resolver for the type references in this type alias. |