diff options
Diffstat (limited to 'crates/ra_hir/src/impl_block.rs')
-rw-r--r-- | crates/ra_hir/src/impl_block.rs | 27 |
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::{ | |||
7 | ast::{self, AstNode}}; | 7 | ast::{self, AstNode}}; |
8 | 8 | ||
9 | use crate::{ | 9 | use 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 | ||
19 | use crate::code_model_api::{Module, ModuleSource}; | 19 | use 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 | } |