diff options
-rw-r--r-- | crates/ra_ide/src/call_hierarchy.rs | 37 | ||||
-rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 4 |
2 files changed, 39 insertions, 2 deletions
diff --git a/crates/ra_ide/src/call_hierarchy.rs b/crates/ra_ide/src/call_hierarchy.rs index 1e3a31602..bd0e48834 100644 --- a/crates/ra_ide/src/call_hierarchy.rs +++ b/crates/ra_ide/src/call_hierarchy.rs | |||
@@ -355,4 +355,41 @@ fn caller3() { | |||
355 | &["caller3 FN_DEF FileId(1) 66..83 69..76 : [52..59]"], | 355 | &["caller3 FN_DEF FileId(1) 66..83 69..76 : [52..59]"], |
356 | ); | 356 | ); |
357 | } | 357 | } |
358 | |||
359 | #[test] | ||
360 | fn test_call_hierarchy_issue_5103() { | ||
361 | check_hierarchy( | ||
362 | r#" | ||
363 | fn a() { | ||
364 | b() | ||
365 | } | ||
366 | |||
367 | fn b() {} | ||
368 | |||
369 | fn main() { | ||
370 | a<|>() | ||
371 | } | ||
372 | "#, | ||
373 | "a FN_DEF FileId(1) 0..18 3..4", | ||
374 | &["main FN_DEF FileId(1) 31..52 34..38 : [47..48]"], | ||
375 | &["b FN_DEF FileId(1) 20..29 23..24 : [13..14]"], | ||
376 | ); | ||
377 | |||
378 | check_hierarchy( | ||
379 | r#" | ||
380 | fn a() { | ||
381 | b<|>() | ||
382 | } | ||
383 | |||
384 | fn b() {} | ||
385 | |||
386 | fn main() { | ||
387 | a() | ||
388 | } | ||
389 | "#, | ||
390 | "b FN_DEF FileId(1) 20..29 23..24", | ||
391 | &["a FN_DEF FileId(1) 0..18 3..4 : [13..14]"], | ||
392 | &[], | ||
393 | ); | ||
394 | } | ||
358 | } | 395 | } |
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 607a95682..3cb532b62 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs | |||
@@ -1045,7 +1045,7 @@ pub(crate) fn handle_call_hierarchy_incoming( | |||
1045 | let item = params.item; | 1045 | let item = params.item; |
1046 | 1046 | ||
1047 | let doc = TextDocumentIdentifier::new(item.uri); | 1047 | let doc = TextDocumentIdentifier::new(item.uri); |
1048 | let frange = from_proto::file_range(&snap, doc, item.range)?; | 1048 | let frange = from_proto::file_range(&snap, doc, item.selection_range)?; |
1049 | let fpos = FilePosition { file_id: frange.file_id, offset: frange.range.start() }; | 1049 | let fpos = FilePosition { file_id: frange.file_id, offset: frange.range.start() }; |
1050 | 1050 | ||
1051 | let call_items = match snap.analysis.incoming_calls(fpos)? { | 1051 | let call_items = match snap.analysis.incoming_calls(fpos)? { |
@@ -1080,7 +1080,7 @@ pub(crate) fn handle_call_hierarchy_outgoing( | |||
1080 | let item = params.item; | 1080 | let item = params.item; |
1081 | 1081 | ||
1082 | let doc = TextDocumentIdentifier::new(item.uri); | 1082 | let doc = TextDocumentIdentifier::new(item.uri); |
1083 | let frange = from_proto::file_range(&snap, doc, item.range)?; | 1083 | let frange = from_proto::file_range(&snap, doc, item.selection_range)?; |
1084 | let fpos = FilePosition { file_id: frange.file_id, offset: frange.range.start() }; | 1084 | let fpos = FilePosition { file_id: frange.file_id, offset: frange.range.start() }; |
1085 | 1085 | ||
1086 | let call_items = match snap.analysis.outgoing_calls(fpos)? { | 1086 | let call_items = match snap.analysis.outgoing_calls(fpos)? { |