aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-05-12 16:53:44 +0100
committerFlorian Diebold <[email protected]>2019-06-15 17:21:23 +0100
commit49489dc20cc9f340d43acb467677b9bc59495ed2 (patch)
treee8e76acb07e646957a20c8ce5262d893ea7b7b03 /crates/ra_hir/src/code_model.rs
parent6f946f96563bac1f214f86f463287d94968e3688 (diff)
Add basic infrastructure for assoc type projection
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs21
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.