diff options
Diffstat (limited to 'crates/ide/src/call_hierarchy.rs')
-rw-r--r-- | crates/ide/src/call_hierarchy.rs | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/crates/ide/src/call_hierarchy.rs b/crates/ide/src/call_hierarchy.rs index b29d1fef9..90d3b9a31 100644 --- a/crates/ide/src/call_hierarchy.rs +++ b/crates/ide/src/call_hierarchy.rs | |||
@@ -3,8 +3,8 @@ | |||
3 | use indexmap::IndexMap; | 3 | use indexmap::IndexMap; |
4 | 4 | ||
5 | use hir::Semantics; | 5 | use hir::Semantics; |
6 | use ide_db::call_info::FnCallNode; | ||
7 | use ide_db::RootDatabase; | 6 | use ide_db::RootDatabase; |
7 | use ide_db::{call_info::FnCallNode, search::FileReferences}; | ||
8 | use syntax::{ast, AstNode, TextRange}; | 8 | use syntax::{ast, AstNode, TextRange}; |
9 | 9 | ||
10 | use crate::{ | 10 | use crate::{ |
@@ -47,22 +47,23 @@ pub(crate) fn incoming_calls(db: &RootDatabase, position: FilePosition) -> Optio | |||
47 | 47 | ||
48 | let mut calls = CallLocations::default(); | 48 | let mut calls = CallLocations::default(); |
49 | 49 | ||
50 | for reference in refs.info.references() { | 50 | for &FileReferences { file_id, ref references } in refs.info.references() { |
51 | let file_id = reference.file_range.file_id; | ||
52 | let file = sema.parse(file_id); | 51 | let file = sema.parse(file_id); |
53 | let file = file.syntax(); | 52 | let file = file.syntax(); |
54 | let token = file.token_at_offset(reference.file_range.range.start()).next()?; | 53 | for reference in references { |
55 | let token = sema.descend_into_macros(token); | 54 | let token = file.token_at_offset(reference.range.start()).next()?; |
56 | let syntax = token.parent(); | 55 | let token = sema.descend_into_macros(token); |
57 | 56 | let syntax = token.parent(); | |
58 | // This target is the containing function | 57 | |
59 | if let Some(nav) = syntax.ancestors().find_map(|node| { | 58 | // This target is the containing function |
60 | let fn_ = ast::Fn::cast(node)?; | 59 | if let Some(nav) = syntax.ancestors().find_map(|node| { |
61 | let def = sema.to_def(&fn_)?; | 60 | let fn_ = ast::Fn::cast(node)?; |
62 | def.try_to_nav(sema.db) | 61 | let def = sema.to_def(&fn_)?; |
63 | }) { | 62 | def.try_to_nav(sema.db) |
64 | let relative_range = reference.file_range.range; | 63 | }) { |
65 | calls.add(&nav, relative_range); | 64 | let relative_range = reference.range; |
65 | calls.add(&nav, relative_range); | ||
66 | } | ||
66 | } | 67 | } |
67 | } | 68 | } |
68 | 69 | ||