aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model.rs')
-rw-r--r--crates/ra_hir/src/code_model.rs24
1 files changed, 20 insertions, 4 deletions
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 84e15385c..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 }
@@ -749,6 +749,10 @@ impl Const {
749 db.const_data(self) 749 db.const_data(self)
750 } 750 }
751 751
752 pub fn name(&self, db: &impl HirDatabase) -> Option<Name> {
753 self.data(db).name().cloned()
754 }
755
752 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> { 756 pub fn infer(self, db: &impl HirDatabase) -> Arc<InferenceResult> {
753 db.infer(self.into()) 757 db.infer(self.into())
754 } 758 }
@@ -849,7 +853,7 @@ impl Trait {
849 self.trait_data(db).name().clone() 853 self.trait_data(db).name().clone()
850 } 854 }
851 855
852 pub fn items(self, db: &impl DefDatabase) -> Vec<TraitItem> { 856 pub fn items(self, db: &impl DefDatabase) -> Vec<AssocItem> {
853 self.trait_data(db).items().to_vec() 857 self.trait_data(db).items().to_vec()
854 } 858 }
855 859
@@ -902,7 +906,7 @@ impl Trait {
902 .items() 906 .items()
903 .iter() 907 .iter()
904 .filter_map(|item| match item { 908 .filter_map(|item| match item {
905 TraitItem::TypeAlias(t) => Some(*t), 909 AssocItem::TypeAlias(t) => Some(*t),
906 _ => None, 910 _ => None,
907 }) 911 })
908 .find(|t| &t.name(db) == name) 912 .find(|t| &t.name(db) == name)
@@ -1019,3 +1023,15 @@ impl Container {
1019 } 1023 }
1020 } 1024 }
1021} 1025}
1026
1027#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
1028pub enum AssocItem {
1029 Function(Function),
1030 Const(Const),
1031 TypeAlias(TypeAlias),
1032}
1033// FIXME: not every function, ... is actually an assoc item. maybe we should make
1034// sure that you can only turn actual assoc items into AssocItems. This would
1035// require not implementing From, and instead having some checked way of
1036// casting them, and somehow making the constructors private, which would be annoying.
1037impl_froms!(AssocItem: Function, Const, TypeAlias);