aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/traits.rs
diff options
context:
space:
mode:
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}