aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_analysis
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_analysis')
-rw-r--r--crates/ra_analysis/src/imp.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/crates/ra_analysis/src/imp.rs b/crates/ra_analysis/src/imp.rs
index 90184a4b9..517867e86 100644
--- a/crates/ra_analysis/src/imp.rs
+++ b/crates/ra_analysis/src/imp.rs
@@ -9,7 +9,7 @@ use std::{
9}; 9};
10 10
11use relative_path::RelativePath; 11use relative_path::RelativePath;
12use ra_editor::{self, FileSymbol, LineIndex, find_node_at_offset, LocalEdit}; 12use ra_editor::{self, FileSymbol, LineIndex, find_node_at_offset, LocalEdit, resolve_local_name};
13use ra_syntax::{ 13use ra_syntax::{
14 TextUnit, TextRange, SmolStr, File, AstNode, 14 TextUnit, TextRange, SmolStr, File, AstNode,
15 SyntaxKind::*, 15 SyntaxKind::*,
@@ -197,7 +197,21 @@ impl AnalysisImpl {
197 let file = root.syntax(file_id); 197 let file = root.syntax(file_id);
198 let syntax = file.syntax(); 198 let syntax = file.syntax();
199 if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(syntax, offset) { 199 if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(syntax, offset) {
200 return self.index_resolve(name_ref, token); 200
201 // First try to resolve the symbol locally
202 if let Some((name, range)) = resolve_local_name(&file, offset, name_ref) {
203 let mut vec = vec![];
204 vec.push((file_id, FileSymbol {
205 name,
206 node_range: range,
207 kind : NAME
208 }));
209
210 return vec;
211 } else {
212 // If that fails try the index based approach.
213 return self.index_resolve(name_ref, token);
214 }
201 } 215 }
202 if let Some(name) = find_node_at_offset::<ast::Name>(syntax, offset) { 216 if let Some(name) = find_node_at_offset::<ast::Name>(syntax, offset) {
203 if let Some(module) = name.syntax().parent().and_then(ast::Module::cast) { 217 if let Some(module) = name.syntax().parent().and_then(ast::Module::cast) {