aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_editor/src/scope/fn_scope.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_editor/src/scope/fn_scope.rs')
-rw-r--r--crates/ra_editor/src/scope/fn_scope.rs11
1 files changed, 5 insertions, 6 deletions
diff --git a/crates/ra_editor/src/scope/fn_scope.rs b/crates/ra_editor/src/scope/fn_scope.rs
index 03f9df094..67eb8e2ab 100644
--- a/crates/ra_editor/src/scope/fn_scope.rs
+++ b/crates/ra_editor/src/scope/fn_scope.rs
@@ -89,7 +89,7 @@ impl ScopeEntry {
89 .unwrap() 89 .unwrap()
90 .text() 90 .text()
91 } 91 }
92 fn ast(&self) -> ast::BindPat { 92 pub fn ast(&self) -> ast::BindPat {
93 ast::BindPat::cast(self.syntax.borrowed()) 93 ast::BindPat::cast(self.syntax.borrowed())
94 .unwrap() 94 .unwrap()
95 } 95 }
@@ -241,16 +241,15 @@ struct ScopeData {
241 entries: Vec<ScopeEntry> 241 entries: Vec<ScopeEntry>
242} 242}
243 243
244pub fn resolve_local_name<'a>(name_ref: ast::NameRef, scopes: &'a FnScopes) -> Option<ast::Name<'a>> { 244pub fn resolve_local_name<'a>(name_ref: ast::NameRef, scopes: &'a FnScopes) -> Option<&'a ScopeEntry> {
245 use std::collections::HashSet; 245 use std::collections::HashSet;
246 246
247 let mut shadowed = HashSet::new(); 247 let mut shadowed = HashSet::new();
248 let names = scopes.scope_chain(name_ref.syntax()) 248 scopes.scope_chain(name_ref.syntax())
249 .flat_map(|scope| scopes.entries(scope).iter()) 249 .flat_map(|scope| scopes.entries(scope).iter())
250 .filter(|entry| shadowed.insert(entry.name())) 250 .filter(|entry| shadowed.insert(entry.name()))
251 .filter(|entry| entry.name() == name_ref.text()) 251 .filter(|entry| entry.name() == name_ref.text())
252 .nth(0)?; 252 .nth(0)
253 names.ast().name()
254} 253}
255 254
256#[cfg(test)] 255#[cfg(test)]
@@ -365,7 +364,7 @@ mod tests {
365 364
366 let scopes = FnScopes::new(fn_def); 365 let scopes = FnScopes::new(fn_def);
367 366
368 let local_name = resolve_local_name(name_ref, &scopes).unwrap(); 367 let local_name = resolve_local_name(name_ref, &scopes).unwrap().ast().name().unwrap();
369 368
370 let expected_name = find_node_at_offset::<ast::Name>(file.syntax(), expected_offset.into()).unwrap(); 369 let expected_name = find_node_at_offset::<ast::Name>(file.syntax(), expected_offset.into()).unwrap();
371 assert_eq!(local_name.syntax().range(), expected_name.syntax().range()); 370 assert_eq!(local_name.syntax().range(), expected_name.syntax().range());