Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/references.rs')
-rw-r--r--crates/ide/src/references.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs
index ffae7bf6c7..4918fe4ff9 100644
--- a/crates/ide/src/references.rs
+++ b/crates/ide/src/references.rs
@@ -38,7 +38,8 @@ use syntax::{
};
use crate::{
- Analysis, FilePosition, HighlightedRange, NavigationTarget, TryToNav, highlight_related,
+ Analysis, FilePosition, HighlightedRange, NavigationTarget, TryToNav,
+ doc_links::token_as_doc_comment, highlight_related,
};
/// Result of a reference search operation.
@@ -211,6 +212,13 @@ pub(crate) fn find_defs(
syntax: &SyntaxNode,
offset: TextSize,
) -> Option<Vec<Definition>> {
+ if let Some(token) = syntax.token_at_offset(offset).left_biased()
+ && let Some(doc_comment) = token_as_doc_comment(&token)
+ {
+ return doc_comment
+ .get_definition_with_descend_at(sema, offset, |def, _, _| Some(vec![def]));
+ }
+
let token = syntax.token_at_offset(offset).find(|t| {
matches!(
t.kind(),
@@ -786,6 +794,23 @@ fn main() {
}
#[test]
+ fn test_find_all_refs_in_comments() {
+ check(
+ r#"
+struct Foo;
+
+/// $0[`Foo`] is just above
+struct Bar;
+"#,
+ expect![[r#"
+ Foo Struct FileId(0) 0..11 7..10
+
+ (no references)
+ "#]],
+ );
+ }
+
+ #[test]
fn search_filters_by_range() {
check(
r#"