mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 04:19:13 +00:00
Group references by FileId
This commit is contained in:
parent
52fa926f00
commit
fbdb32adfc
10 changed files with 322 additions and 254 deletions
|
@ -3,8 +3,8 @@
|
|||
use indexmap::IndexMap;
|
||||
|
||||
use hir::Semantics;
|
||||
use ide_db::call_info::FnCallNode;
|
||||
use ide_db::RootDatabase;
|
||||
use ide_db::{call_info::FnCallNode, search::FileReferences};
|
||||
use syntax::{ast, AstNode, TextRange};
|
||||
|
||||
use crate::{
|
||||
|
@ -47,22 +47,23 @@ pub(crate) fn incoming_calls(db: &RootDatabase, position: FilePosition) -> Optio
|
|||
|
||||
let mut calls = CallLocations::default();
|
||||
|
||||
for reference in refs.info.references() {
|
||||
let file_id = reference.file_range.file_id;
|
||||
for &FileReferences { file_id, ref references } in refs.info.references() {
|
||||
let file = sema.parse(file_id);
|
||||
let file = file.syntax();
|
||||
let token = file.token_at_offset(reference.file_range.range.start()).next()?;
|
||||
let token = sema.descend_into_macros(token);
|
||||
let syntax = token.parent();
|
||||
for reference in references {
|
||||
let token = file.token_at_offset(reference.range.start()).next()?;
|
||||
let token = sema.descend_into_macros(token);
|
||||
let syntax = token.parent();
|
||||
|
||||
// This target is the containing function
|
||||
if let Some(nav) = syntax.ancestors().find_map(|node| {
|
||||
let fn_ = ast::Fn::cast(node)?;
|
||||
let def = sema.to_def(&fn_)?;
|
||||
def.try_to_nav(sema.db)
|
||||
}) {
|
||||
let relative_range = reference.file_range.range;
|
||||
calls.add(&nav, relative_range);
|
||||
// This target is the containing function
|
||||
if let Some(nav) = syntax.ancestors().find_map(|node| {
|
||||
let fn_ = ast::Fn::cast(node)?;
|
||||
let def = sema.to_def(&fn_)?;
|
||||
def.try_to_nav(sema.db)
|
||||
}) {
|
||||
let relative_range = reference.range;
|
||||
calls.add(&nav, relative_range);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue