diff options
Diffstat (limited to 'crates/ra_hir/src/resolve.rs')
-rw-r--r-- | crates/ra_hir/src/resolve.rs | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/crates/ra_hir/src/resolve.rs b/crates/ra_hir/src/resolve.rs index 30cf9c69e..871f7d8f7 100644 --- a/crates/ra_hir/src/resolve.rs +++ b/crates/ra_hir/src/resolve.rs | |||
@@ -9,7 +9,7 @@ use crate::{ | |||
9 | name::{Name, KnownName}, | 9 | name::{Name, KnownName}, |
10 | nameres::{PerNs, ItemMap}, | 10 | nameres::{PerNs, ItemMap}, |
11 | generics::GenericParams, | 11 | generics::GenericParams, |
12 | expr::{scope::{ExprScopes, ScopeId}, PatId}, | 12 | expr::{scope::{ExprScopes, ScopeId}, PatId, Body}, |
13 | impl_block::ImplBlock, | 13 | impl_block::ImplBlock, |
14 | path::Path, | 14 | path::Path, |
15 | }; | 15 | }; |
@@ -106,15 +106,21 @@ impl Resolver { | |||
106 | } | 106 | } |
107 | 107 | ||
108 | fn module(&self) -> Option<(&ItemMap, Module)> { | 108 | fn module(&self) -> Option<(&ItemMap, Module)> { |
109 | for scope in self.scopes.iter().rev() { | 109 | self.scopes.iter().rev().find_map(|scope| match scope { |
110 | match scope { | 110 | Scope::ModuleScope(m) => Some((&*m.item_map, m.module.clone())), |
111 | Scope::ModuleScope(m) => { | 111 | |
112 | return Some((&m.item_map, m.module.clone())); | 112 | Scope::ModuleScopeRef(m) => Some((m.item_map, m.module.clone())), |
113 | } | 113 | |
114 | _ => {} | 114 | _ => None, |
115 | } | 115 | }) |
116 | } | 116 | } |
117 | None | 117 | |
118 | /// The body from which any `LocalBinding` resolutions in this resolver come. | ||
119 | pub fn body(&self) -> Option<Arc<Body>> { | ||
120 | self.scopes.iter().rev().find_map(|scope| match scope { | ||
121 | Scope::ExprScope(expr_scope) => Some(expr_scope.expr_scopes.body()), | ||
122 | _ => None, | ||
123 | }) | ||
118 | } | 124 | } |
119 | } | 125 | } |
120 | 126 | ||