diff options
Diffstat (limited to 'crates/ra_hir/src/impl_block.rs')
-rw-r--r-- | crates/ra_hir/src/impl_block.rs | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs index d26a024ed..c463d351c 100644 --- a/crates/ra_hir/src/impl_block.rs +++ b/crates/ra_hir/src/impl_block.rs | |||
@@ -15,7 +15,7 @@ use crate::{ | |||
15 | resolve::Resolver, | 15 | resolve::Resolver, |
16 | ty::Ty, | 16 | ty::Ty, |
17 | type_ref::TypeRef, | 17 | type_ref::TypeRef, |
18 | Const, Function, HasSource, HirFileId, Source, TraitRef, TypeAlias, | 18 | AssocItem, Const, Function, HasSource, HirFileId, Source, TraitRef, TypeAlias, |
19 | }; | 19 | }; |
20 | 20 | ||
21 | #[derive(Debug, Default, PartialEq, Eq)] | 21 | #[derive(Debug, Default, PartialEq, Eq)] |
@@ -56,7 +56,7 @@ impl HasSource for ImplBlock { | |||
56 | impl ImplBlock { | 56 | impl ImplBlock { |
57 | pub(crate) fn containing( | 57 | pub(crate) fn containing( |
58 | module_impl_blocks: Arc<ModuleImplBlocks>, | 58 | module_impl_blocks: Arc<ModuleImplBlocks>, |
59 | item: ImplItem, | 59 | item: AssocItem, |
60 | ) -> Option<ImplBlock> { | 60 | ) -> Option<ImplBlock> { |
61 | let impl_id = *module_impl_blocks.impls_by_def.get(&item)?; | 61 | let impl_id = *module_impl_blocks.impls_by_def.get(&item)?; |
62 | Some(ImplBlock { module: module_impl_blocks.module, impl_id }) | 62 | Some(ImplBlock { module: module_impl_blocks.module, impl_id }) |
@@ -91,7 +91,7 @@ impl ImplBlock { | |||
91 | TraitRef::from_hir(db, &self.resolver(db), &self.target_trait(db)?, Some(target_ty)) | 91 | TraitRef::from_hir(db, &self.resolver(db), &self.target_trait(db)?, Some(target_ty)) |
92 | } | 92 | } |
93 | 93 | ||
94 | pub fn items(&self, db: &impl DefDatabase) -> Vec<ImplItem> { | 94 | pub fn items(&self, db: &impl DefDatabase) -> Vec<AssocItem> { |
95 | db.impls_in_module(self.module).impls[self.impl_id].items().to_vec() | 95 | db.impls_in_module(self.module).impls[self.impl_id].items().to_vec() |
96 | } | 96 | } |
97 | 97 | ||
@@ -113,7 +113,7 @@ impl ImplBlock { | |||
113 | pub struct ImplData { | 113 | pub struct ImplData { |
114 | target_trait: Option<TypeRef>, | 114 | target_trait: Option<TypeRef>, |
115 | target_type: TypeRef, | 115 | target_type: TypeRef, |
116 | items: Vec<ImplItem>, | 116 | items: Vec<AssocItem>, |
117 | negative: bool, | 117 | negative: bool, |
118 | } | 118 | } |
119 | 119 | ||
@@ -151,27 +151,11 @@ impl ImplData { | |||
151 | &self.target_type | 151 | &self.target_type |
152 | } | 152 | } |
153 | 153 | ||
154 | pub fn items(&self) -> &[ImplItem] { | 154 | pub fn items(&self) -> &[AssocItem] { |
155 | &self.items | 155 | &self.items |
156 | } | 156 | } |
157 | } | 157 | } |
158 | 158 | ||
159 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
160 | //FIXME: rename to ImplDef? | ||
161 | pub enum ImplItem { | ||
162 | Method(Function), | ||
163 | Const(Const), | ||
164 | TypeAlias(TypeAlias), | ||
165 | // Existential | ||
166 | } | ||
167 | impl_froms!(ImplItem: Const, TypeAlias); | ||
168 | |||
169 | impl From<Function> for ImplItem { | ||
170 | fn from(func: Function) -> ImplItem { | ||
171 | ImplItem::Method(func) | ||
172 | } | ||
173 | } | ||
174 | |||
175 | #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] | 159 | #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] |
176 | pub struct ImplId(pub RawId); | 160 | pub struct ImplId(pub RawId); |
177 | impl_arena_id!(ImplId); | 161 | impl_arena_id!(ImplId); |
@@ -185,7 +169,7 @@ impl_arena_id!(ImplId); | |||
185 | pub struct ModuleImplBlocks { | 169 | pub struct ModuleImplBlocks { |
186 | pub(crate) module: Module, | 170 | pub(crate) module: Module, |
187 | pub(crate) impls: Arena<ImplId, ImplData>, | 171 | pub(crate) impls: Arena<ImplId, ImplData>, |
188 | impls_by_def: FxHashMap<ImplItem, ImplId>, | 172 | impls_by_def: FxHashMap<AssocItem, ImplId>, |
189 | } | 173 | } |
190 | 174 | ||
191 | impl ModuleImplBlocks { | 175 | impl ModuleImplBlocks { |