Add DeclarationDescriptor and ReferenceDescriptor

Fixes #142
Fixes #146
This commit is contained in:
Jeremy A. Kolb 2018-10-24 14:24:32 -04:00 committed by Aleksey Kladov
parent 55ebe6380a
commit 406f366ccc
3 changed files with 77 additions and 4 deletions

View file

@ -22,7 +22,7 @@ use crate::{
},
input::{SourceRootId, FilesDatabase, SourceRoot, WORKSPACE},
descriptors::{
DescriptorDatabase,
DescriptorDatabase, DeclarationDescriptor,
module::{ModuleTree, Problem},
function::{FnDescriptor, FnId},
},
@ -327,6 +327,17 @@ impl AnalysisImpl {
let mut ret = vec![];
if let Some(binding) = find_node_at_offset::<ast::BindPat>(syntax, offset) {
let decl = DeclarationDescriptor::new(binding);
ret.push((file_id, decl.range));
ret.extend(decl.find_all_refs().into_iter()
.map(|ref_desc| (file_id, ref_desc.range )));
return ret;
}
// Find the symbol we are looking for
if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(syntax, offset) {