aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/source_binder.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/source_binder.rs')
-rw-r--r--crates/ra_hir/src/source_binder.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs
index 0d2746ac0..bdb300311 100644
--- a/crates/ra_hir/src/source_binder.rs
+++ b/crates/ra_hir/src/source_binder.rs
@@ -17,6 +17,7 @@ use ra_syntax::{
17use crate::{ 17use crate::{
18 HirDatabase, Function, Struct, Enum, Const, Static, Either, DefWithBody, 18 HirDatabase, Function, Struct, Enum, Const, Static, Either, DefWithBody,
19 AsName, Module, HirFileId, Crate, Trait, Resolver, 19 AsName, Module, HirFileId, Crate, Trait, Resolver,
20 expr::scope::{ReferenceDescriptor, ScopeEntryWithSyntax},
20 ids::LocationCtx, 21 ids::LocationCtx,
21 expr, AstId 22 expr, AstId
22}; 23};
@@ -222,6 +223,7 @@ pub struct SourceAnalyzer {
222 resolver: Resolver, 223 resolver: Resolver,
223 body_source_map: Option<Arc<crate::expr::BodySourceMap>>, 224 body_source_map: Option<Arc<crate::expr::BodySourceMap>>,
224 infer: Option<Arc<crate::ty::InferenceResult>>, 225 infer: Option<Arc<crate::ty::InferenceResult>>,
226 scopes: Option<crate::expr::ScopesWithSourceMap>,
225} 227}
226 228
227#[derive(Debug, Clone, PartialEq, Eq)] 229#[derive(Debug, Clone, PartialEq, Eq)]
@@ -248,6 +250,7 @@ impl SourceAnalyzer {
248 resolver: resolver_for_node(db, file_id, node, offset), 250 resolver: resolver_for_node(db, file_id, node, offset),
249 body_source_map: def_with_body.map(|it| it.body_source_map(db)), 251 body_source_map: def_with_body.map(|it| it.body_source_map(db)),
250 infer: def_with_body.map(|it| it.infer(db)), 252 infer: def_with_body.map(|it| it.infer(db)),
253 scopes: def_with_body.map(|it| it.scopes(db)),
251 } 254 }
252 } 255 }
253 256
@@ -302,6 +305,14 @@ impl SourceAnalyzer {
302 Some(res) 305 Some(res)
303 } 306 }
304 307
308 pub fn find_all_refs(&self, pat: &ast::BindPat) -> Option<Vec<ReferenceDescriptor>> {
309 self.scopes.as_ref().map(|it| it.find_all_refs(pat))
310 }
311
312 pub fn resolve_local_name(&self, name_ref: &ast::NameRef) -> Option<ScopeEntryWithSyntax> {
313 self.scopes.as_ref()?.resolve_local_name(name_ref)
314 }
315
305 #[cfg(test)] 316 #[cfg(test)]
306 pub(crate) fn body_source_map(&self) -> Arc<crate::expr::BodySourceMap> { 317 pub(crate) fn body_source_map(&self) -> Arc<crate::expr::BodySourceMap> {
307 self.body_source_map.clone().unwrap() 318 self.body_source_map.clone().unwrap()