Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/call_hierarchy.rs')
-rw-r--r--crates/ide/src/call_hierarchy.rs23
1 files changed, 13 insertions, 10 deletions
diff --git a/crates/ide/src/call_hierarchy.rs b/crates/ide/src/call_hierarchy.rs
index 242b7b40e1..e83210f4f9 100644
--- a/crates/ide/src/call_hierarchy.rs
+++ b/crates/ide/src/call_hierarchy.rs
@@ -4,7 +4,6 @@ use indexmap::IndexMap;
use hir::Semantics;
use ide_db::{
- call_info::FnCallNode,
defs::{Definition, NameClass, NameRefClass},
helpers::pick_best_token,
search::FileReference,
@@ -101,23 +100,27 @@ pub(crate) fn outgoing_calls(db: &RootDatabase, position: FilePosition) -> Optio
_ => None,
})
.flatten()
- .filter_map(|node| FnCallNode::with_node_exact(&node))
+ .filter_map(ast::CallableExpr::cast)
.filter_map(|call_node| {
- let name_ref = call_node.name_ref()?;
- let func_target = match call_node {
- FnCallNode::CallExpr(expr) => {
- let callable = sema.type_of_expr(&expr.expr()?)?.original.as_callable(db)?;
+ let (nav_target, range) = match call_node {
+ ast::CallableExpr::Call(call) => {
+ let expr = call.expr()?;
+ let callable = sema.type_of_expr(&expr)?.original.as_callable(db)?;
match callable.kind() {
- hir::CallableKind::Function(it) => it.try_to_nav(db),
+ hir::CallableKind::Function(it) => {
+ let range = expr.syntax().text_range();
+ it.try_to_nav(db).zip(Some(range))
+ }
_ => None,
}
}
- FnCallNode::MethodCallExpr(expr) => {
+ ast::CallableExpr::MethodCall(expr) => {
+ let range = expr.name_ref()?.syntax().text_range();
let function = sema.resolve_method_call(&expr)?;
- function.try_to_nav(db)
+ function.try_to_nav(db).zip(Some(range))
}
}?;
- Some((func_target, name_ref.syntax().text_range()))
+ Some((nav_target, range))
})
.for_each(|(nav, range)| calls.add(nav, range));