aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/impl_block.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/impl_block.rs')
-rw-r--r--crates/ra_hir/src/impl_block.rs27
1 files changed, 22 insertions, 5 deletions
diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs
index 5fa49d456..a3908048b 100644
--- a/crates/ra_hir/src/impl_block.rs
+++ b/crates/ra_hir/src/impl_block.rs
@@ -7,13 +7,13 @@ use ra_syntax::{
7ast::{self, AstNode}}; 7ast::{self, AstNode}};
8 8
9use crate::{ 9use crate::{
10 Const, Type, 10 Const, Type, Function, HirFileId,
11 Function, HirFileId, 11 HirDatabase, PersistentHirDatabase,
12 HirDatabase, 12 ModuleDef, Trait, Resolution,
13 PersistentHirDatabase,
14 type_ref::TypeRef, 13 type_ref::TypeRef,
15 ids::LocationCtx, 14 ids::LocationCtx,
16 resolve::Resolver, 15 resolve::Resolver,
16 ty::Ty,
17}; 17};
18 18
19use crate::code_model_api::{Module, ModuleSource}; 19use crate::code_model_api::{Module, ModuleSource};
@@ -75,7 +75,7 @@ impl ImplBlock {
75 self.module_impl_blocks.module.clone() 75 self.module_impl_blocks.module.clone()
76 } 76 }
77 77
78 pub fn target_trait(&self) -> Option<&TypeRef> { 78 pub fn target_trait_ref(&self) -> Option<&TypeRef> {
79 self.impl_data().target_trait() 79 self.impl_data().target_trait()
80 } 80 }
81 81
@@ -83,6 +83,23 @@ impl ImplBlock {
83 self.impl_data().target_type() 83 self.impl_data().target_type()
84 } 84 }
85 85
86 pub fn target_ty(&self, db: &impl HirDatabase) -> Ty {
87 Ty::from_hir(db, &self.resolver(db), self.target_type())
88 }
89
90 pub fn target_trait(&self, db: &impl HirDatabase) -> Option<Trait> {
91 if let Some(TypeRef::Path(path)) = self.target_trait_ref() {
92 let resolver = self.resolver(db);
93 if let Some(Resolution::Def {
94 def: ModuleDef::Trait(tr),
95 }) = resolver.resolve_path(db, path).take_types()
96 {
97 return Some(tr);
98 }
99 }
100 None
101 }
102
86 pub fn items(&self) -> &[ImplItem] { 103 pub fn items(&self) -> &[ImplItem] {
87 self.impl_data().items() 104 self.impl_data().items()
88 } 105 }