WIP: This doesn't currently work but I also don't think it's the right abstraction

This commit is contained in:
Jeremy A. Kolb 2018-10-05 15:21:40 -04:00
parent 91312a9ff9
commit 1d4c767879
3 changed files with 25 additions and 3 deletions

View file

@ -9,7 +9,7 @@ use std::{
};
use relative_path::RelativePath;
use ra_editor::{self, FileSymbol, LineIndex, find_node_at_offset, LocalEdit};
use ra_editor::{self, FileSymbol, LineIndex, find_node_at_offset, LocalEdit, resolve_local_name};
use ra_syntax::{
TextUnit, TextRange, SmolStr, File, AstNode,
SyntaxKind::*,
@ -197,7 +197,21 @@ impl AnalysisImpl {
let file = root.syntax(file_id);
let syntax = file.syntax();
if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(syntax, offset) {
return self.index_resolve(name_ref, token);
// First try to resolve the symbol locally
if let Some(name) = resolve_local_name(&file, offset, name_ref) {
let vec: Vec<(FileId, FileSymbol)>::new();
vec.push((file_id, FileSymbol {
name: name.text(),
node_range: name.syntax().range(),
kind : NAME
}));
return vec;
} else {
// If that fails try the index based approach.
return self.index_resolve(name_ref, token);
}
}
if let Some(name) = find_node_at_offset::<ast::Name>(syntax, offset) {
if let Some(module) = name.syntax().parent().and_then(ast::Module::cast) {