diff options
author | Florian Diebold <[email protected]> | 2019-09-16 21:01:13 +0100 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2019-09-17 18:47:45 +0100 |
commit | a040fde3ae5e339199237f24a7461812e74475bf (patch) | |
tree | 007e93e160cd6f0c5e62a4ed4ac72e8f6f8bf76b /crates/ra_hir/src/code_model.rs | |
parent | 53a932509dbb9dfdaabb27a0d7fc3fe87e44ec55 (diff) |
Remove TraitItem and ImplItem in favor of AssocItem
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 33 |
1 files changed, 9 insertions, 24 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 892208c1a..706d24c32 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -23,7 +23,7 @@ use crate::{ | |||
23 | }, | 23 | }, |
24 | nameres::{CrateModuleId, ImportId, ModuleScope, Namespace}, | 24 | nameres::{CrateModuleId, ImportId, ModuleScope, Namespace}, |
25 | resolve::{Resolver, TypeNs}, | 25 | resolve::{Resolver, TypeNs}, |
26 | traits::{TraitData, TraitItem}, | 26 | traits::TraitData, |
27 | ty::{ | 27 | ty::{ |
28 | primitive::{FloatBitness, FloatTy, IntBitness, IntTy, Signedness}, | 28 | primitive::{FloatBitness, FloatTy, IntBitness, IntTy, Signedness}, |
29 | InferenceResult, TraitRef, | 29 | InferenceResult, TraitRef, |
@@ -269,7 +269,7 @@ impl Module { | |||
269 | 269 | ||
270 | for impl_block in self.impl_blocks(db) { | 270 | for impl_block in self.impl_blocks(db) { |
271 | for item in impl_block.items(db) { | 271 | for item in impl_block.items(db) { |
272 | if let crate::ImplItem::Method(f) = item { | 272 | if let AssocItem::Function(f) = item { |
273 | f.diagnostics(db, sink); | 273 | f.diagnostics(db, sink); |
274 | } | 274 | } |
275 | } | 275 | } |
@@ -853,7 +853,7 @@ impl Trait { | |||
853 | self.trait_data(db).name().clone() | 853 | self.trait_data(db).name().clone() |
854 | } | 854 | } |
855 | 855 | ||
856 | pub fn items(self, db: &impl DefDatabase) -> Vec<TraitItem> { | 856 | pub fn items(self, db: &impl DefDatabase) -> Vec<AssocItem> { |
857 | self.trait_data(db).items().to_vec() | 857 | self.trait_data(db).items().to_vec() |
858 | } | 858 | } |
859 | 859 | ||
@@ -906,7 +906,7 @@ impl Trait { | |||
906 | .items() | 906 | .items() |
907 | .iter() | 907 | .iter() |
908 | .filter_map(|item| match item { | 908 | .filter_map(|item| match item { |
909 | TraitItem::TypeAlias(t) => Some(*t), | 909 | AssocItem::TypeAlias(t) => Some(*t), |
910 | _ => None, | 910 | _ => None, |
911 | }) | 911 | }) |
912 | .find(|t| &t.name(db) == name) | 912 | .find(|t| &t.name(db) == name) |
@@ -1030,23 +1030,8 @@ pub enum AssocItem { | |||
1030 | Const(Const), | 1030 | Const(Const), |
1031 | TypeAlias(TypeAlias), | 1031 | TypeAlias(TypeAlias), |
1032 | } | 1032 | } |
1033 | 1033 | // FIXME: not every function, ... is actually an assoc item. maybe we should make | |
1034 | impl From<TraitItem> for AssocItem { | 1034 | // sure that you can only turn actual assoc items into AssocItems. This would |
1035 | fn from(t: TraitItem) -> Self { | 1035 | // require not implementing From, and instead having some checked way of |
1036 | match t { | 1036 | // casting them, and somehow making the constructors private, which would be annoying. |
1037 | TraitItem::Function(f) => AssocItem::Function(f), | 1037 | impl_froms!(AssocItem: Function, Const, TypeAlias); |
1038 | TraitItem::Const(c) => AssocItem::Const(c), | ||
1039 | TraitItem::TypeAlias(t) => AssocItem::TypeAlias(t), | ||
1040 | } | ||
1041 | } | ||
1042 | } | ||
1043 | |||
1044 | impl From<crate::ImplItem> for AssocItem { | ||
1045 | fn from(i: crate::ImplItem) -> Self { | ||
1046 | match i { | ||
1047 | crate::ImplItem::Method(f) => AssocItem::Function(f), | ||
1048 | crate::ImplItem::Const(c) => AssocItem::Const(c), | ||
1049 | crate::ImplItem::TypeAlias(t) => AssocItem::TypeAlias(t), | ||
1050 | } | ||
1051 | } | ||
1052 | } | ||