diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-09-17 22:16:28 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2019-09-17 22:16:28 +0100 |
commit | 54379ec6f8f82a470a275771e70825634d3d553b (patch) | |
tree | 498719aafe633f9eb9cb65ba65932076981e4632 /crates/ra_hir/src/traits.rs | |
parent | d505ee968b2a99eed65dfe7be27940ad9b2647c1 (diff) | |
parent | c2f9558e1af8dbf73ff86eeffcb9ea6940947dd6 (diff) |
Merge #1862
1862: Assoc item resolution refactoring (again) r=flodiebold a=flodiebold
This is #1849, with the associated type selection code removed for now. Handling cycles there will need some more thought.
Co-authored-by: Florian Diebold <[email protected]>
Diffstat (limited to 'crates/ra_hir/src/traits.rs')
-rw-r--r-- | crates/ra_hir/src/traits.rs | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/crates/ra_hir/src/traits.rs b/crates/ra_hir/src/traits.rs index 4c2f7980d..e39511518 100644 --- a/crates/ra_hir/src/traits.rs +++ b/crates/ra_hir/src/traits.rs | |||
@@ -9,13 +9,13 @@ use crate::{ | |||
9 | db::{AstDatabase, DefDatabase}, | 9 | db::{AstDatabase, DefDatabase}, |
10 | ids::LocationCtx, | 10 | ids::LocationCtx, |
11 | name::AsName, | 11 | name::AsName, |
12 | Const, Function, HasSource, Module, Name, Trait, TypeAlias, | 12 | AssocItem, Const, Function, HasSource, Module, Name, Trait, TypeAlias, |
13 | }; | 13 | }; |
14 | 14 | ||
15 | #[derive(Debug, Clone, PartialEq, Eq)] | 15 | #[derive(Debug, Clone, PartialEq, Eq)] |
16 | pub struct TraitData { | 16 | pub struct TraitData { |
17 | name: Option<Name>, | 17 | name: Option<Name>, |
18 | items: Vec<TraitItem>, | 18 | items: Vec<AssocItem>, |
19 | auto: bool, | 19 | auto: bool, |
20 | } | 20 | } |
21 | 21 | ||
@@ -48,7 +48,7 @@ impl TraitData { | |||
48 | &self.name | 48 | &self.name |
49 | } | 49 | } |
50 | 50 | ||
51 | pub(crate) fn items(&self) -> &[TraitItem] { | 51 | pub(crate) fn items(&self) -> &[AssocItem] { |
52 | &self.items | 52 | &self.items |
53 | } | 53 | } |
54 | 54 | ||
@@ -57,22 +57,9 @@ impl TraitData { | |||
57 | } | 57 | } |
58 | } | 58 | } |
59 | 59 | ||
60 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
61 | pub enum TraitItem { | ||
62 | Function(Function), | ||
63 | Const(Const), | ||
64 | TypeAlias(TypeAlias), | ||
65 | // Existential | ||
66 | } | ||
67 | // FIXME: not every function, ... is actually a trait item. maybe we should make | ||
68 | // sure that you can only turn actual trait items into TraitItems. This would | ||
69 | // require not implementing From, and instead having some checked way of | ||
70 | // casting them. | ||
71 | impl_froms!(TraitItem: Function, Const, TypeAlias); | ||
72 | |||
73 | #[derive(Debug, Clone, PartialEq, Eq)] | 60 | #[derive(Debug, Clone, PartialEq, Eq)] |
74 | pub struct TraitItemsIndex { | 61 | pub struct TraitItemsIndex { |
75 | traits_by_def: FxHashMap<TraitItem, Trait>, | 62 | traits_by_def: FxHashMap<AssocItem, Trait>, |
76 | } | 63 | } |
77 | 64 | ||
78 | impl TraitItemsIndex { | 65 | impl TraitItemsIndex { |
@@ -88,7 +75,7 @@ impl TraitItemsIndex { | |||
88 | index | 75 | index |
89 | } | 76 | } |
90 | 77 | ||
91 | pub(crate) fn get_parent_trait(&self, item: TraitItem) -> Option<Trait> { | 78 | pub(crate) fn get_parent_trait(&self, item: AssocItem) -> Option<Trait> { |
92 | self.traits_by_def.get(&item).cloned() | 79 | self.traits_by_def.get(&item).cloned() |
93 | } | 80 | } |
94 | } | 81 | } |