aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/traits.rs
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-09-17 22:16:28 +0100
committerGitHub <[email protected]>2019-09-17 22:16:28 +0100
commit54379ec6f8f82a470a275771e70825634d3d553b (patch)
tree498719aafe633f9eb9cb65ba65932076981e4632 /crates/ra_hir/src/traits.rs
parentd505ee968b2a99eed65dfe7be27940ad9b2647c1 (diff)
parentc2f9558e1af8dbf73ff86eeffcb9ea6940947dd6 (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.rs23
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)]
16pub struct TraitData { 16pub 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)]
61pub 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.
71impl_froms!(TraitItem: Function, Const, TypeAlias);
72
73#[derive(Debug, Clone, PartialEq, Eq)] 60#[derive(Debug, Clone, PartialEq, Eq)]
74pub struct TraitItemsIndex { 61pub struct TraitItemsIndex {
75 traits_by_def: FxHashMap<TraitItem, Trait>, 62 traits_by_def: FxHashMap<AssocItem, Trait>,
76} 63}
77 64
78impl TraitItemsIndex { 65impl 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}