aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/impl_block.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-02-16 20:19:24 +0000
committerFlorian Diebold <[email protected]>2019-02-16 22:06:41 +0000
commitda7056245d9b59a4b3af7266dd271bab58cb6527 (patch)
tree4f6f813e9c489311d3e402e2e664d248cde1f1ca /crates/ra_hir/src/impl_block.rs
parentccfc6b11c1e55e28e42bb79414d8349e8eb36086 (diff)
Add generic params to impl blocks
Diffstat (limited to 'crates/ra_hir/src/impl_block.rs')
-rw-r--r--crates/ra_hir/src/impl_block.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs
index 4d8bdf33a..7d862882d 100644
--- a/crates/ra_hir/src/impl_block.rs
+++ b/crates/ra_hir/src/impl_block.rs
@@ -13,7 +13,7 @@ use crate::{
13 type_ref::TypeRef, 13 type_ref::TypeRef,
14 ids::LocationCtx, 14 ids::LocationCtx,
15 resolve::Resolver, 15 resolve::Resolver,
16 ty::Ty, 16 ty::Ty, generics::GenericParams
17}; 17};
18 18
19use crate::code_model_api::{Module, ModuleSource}; 19use crate::code_model_api::{Module, ModuleSource};
@@ -38,7 +38,7 @@ impl ImplSourceMap {
38 } 38 }
39} 39}
40 40
41#[derive(Debug, Clone, Copy, PartialEq, Eq)] 41#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
42pub struct ImplBlock { 42pub struct ImplBlock {
43 module: Module, 43 module: Module,
44 impl_id: ImplId, 44 impl_id: ImplId,
@@ -58,7 +58,7 @@ impl ImplBlock {
58 } 58 }
59 59
60 /// Returns the syntax of the impl block 60 /// Returns the syntax of the impl block
61 pub fn source(&self, db: &impl HirDatabase) -> (HirFileId, TreeArc<ast::ImplBlock>) { 61 pub fn source(&self, db: &impl PersistentHirDatabase) -> (HirFileId, TreeArc<ast::ImplBlock>) {
62 let source_map = db.impls_in_module_source_map(self.module); 62 let source_map = db.impls_in_module_source_map(self.module);
63 let (file_id, source) = self.module.definition_source(db); 63 let (file_id, source) = self.module.definition_source(db);
64 (file_id, source_map.get(&source, self.impl_id)) 64 (file_id, source_map.get(&source, self.impl_id))
@@ -72,11 +72,11 @@ impl ImplBlock {
72 self.module 72 self.module
73 } 73 }
74 74
75 pub fn target_trait_ref(&self, db: &impl HirDatabase) -> Option<TypeRef> { 75 pub fn target_trait_ref(&self, db: &impl PersistentHirDatabase) -> Option<TypeRef> {
76 db.impls_in_module(self.module).impls[self.impl_id].target_trait().cloned() 76 db.impls_in_module(self.module).impls[self.impl_id].target_trait().cloned()
77 } 77 }
78 78
79 pub fn target_type(&self, db: &impl HirDatabase) -> TypeRef { 79 pub fn target_type(&self, db: &impl PersistentHirDatabase) -> TypeRef {
80 db.impls_in_module(self.module).impls[self.impl_id].target_type().clone() 80 db.impls_in_module(self.module).impls[self.impl_id].target_type().clone()
81 } 81 }
82 82
@@ -96,10 +96,14 @@ impl ImplBlock {
96 None 96 None
97 } 97 }
98 98
99 pub fn items(&self, db: &impl HirDatabase) -> Vec<ImplItem> { 99 pub fn items(&self, db: &impl PersistentHirDatabase) -> Vec<ImplItem> {
100 db.impls_in_module(self.module).impls[self.impl_id].items().to_vec() 100 db.impls_in_module(self.module).impls[self.impl_id].items().to_vec()
101 } 101 }
102 102
103 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
104 db.generic_params((*self).into())
105 }
106
103 pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { 107 pub fn resolver(&self, db: &impl HirDatabase) -> Resolver {
104 let r = self.module().resolver(db); 108 let r = self.module().resolver(db);
105 // TODO: add generics 109 // TODO: add generics