summaryrefslogtreecommitdiffstats
path: root/src/tools/rust-analyzer/crates/ide/src/call_hierarchy.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide/src/call_hierarchy.rs')
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/call_hierarchy.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/ide/src/call_hierarchy.rs b/src/tools/rust-analyzer/crates/ide/src/call_hierarchy.rs
index 5a8cda8fb..48bcd37b6 100644
--- a/src/tools/rust-analyzer/crates/ide/src/call_hierarchy.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/call_hierarchy.rs
@@ -57,7 +57,8 @@ pub(crate) fn incoming_calls(
.flat_map(|func| func.usages(sema).all());
for (_, references) in references {
- let references = references.into_iter().map(|FileReference { name, .. }| name);
+ let references =
+ references.iter().filter_map(|FileReference { name, .. }| name.as_name_ref());
for name in references {
// This target is the containing function
let nav = sema.ancestors_with_macros(name.syntax().clone()).find_map(|node| {
@@ -457,4 +458,28 @@ fn caller$0() {
expect![[]],
);
}
+
+ #[test]
+ fn test_trait_method_call_hierarchy() {
+ check_hierarchy(
+ r#"
+trait T1 {
+ fn call$0ee();
+}
+
+struct S1;
+
+impl T1 for S1 {
+ fn callee() {}
+}
+
+fn caller() {
+ S1::callee();
+}
+"#,
+ expect![["callee Function FileId(0) 15..27 18..24"]],
+ expect![["caller Function FileId(0) 82..115 85..91 : [104..110]"]],
+ expect![[]],
+ );
+ }
}