diff options
Diffstat (limited to 'crates/ide/src/hover.rs')
-rw-r--r-- | crates/ide/src/hover.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index 5a497e92d..1e66219e4 100644 --- a/crates/ide/src/hover.rs +++ b/crates/ide/src/hover.rs | |||
@@ -1,6 +1,6 @@ | |||
1 | use either::Either; | 1 | use either::Either; |
2 | use hir::{ | 2 | use hir::{ |
3 | AsAssocItem, AssocItemContainer, GenericParam, HasAttrs, HasSource, HirDisplay, Module, | 3 | AsAssocItem, AssocItemContainer, GenericParam, HasAttrs, HasSource, HirDisplay, InFile, Module, |
4 | ModuleDef, Semantics, | 4 | ModuleDef, Semantics, |
5 | }; | 5 | }; |
6 | use ide_db::{ | 6 | use ide_db::{ |
@@ -16,8 +16,8 @@ use syntax::{ast, match_ast, AstNode, AstToken, SyntaxKind::*, SyntaxToken, Toke | |||
16 | use crate::{ | 16 | use crate::{ |
17 | display::{macro_label, TryToNav}, | 17 | display::{macro_label, TryToNav}, |
18 | doc_links::{ | 18 | doc_links::{ |
19 | doc_owner_to_def, extract_positioned_link_from_comment, remove_links, | 19 | doc_attributes, extract_definitions_from_markdown, remove_links, resolve_doc_path_for_def, |
20 | resolve_doc_path_for_def, rewrite_links, | 20 | rewrite_links, |
21 | }, | 21 | }, |
22 | markdown_remove::remove_markdown, | 22 | markdown_remove::remove_markdown, |
23 | markup::Markup, | 23 | markup::Markup, |
@@ -114,11 +114,18 @@ pub(crate) fn hover( | |||
114 | ), | 114 | ), |
115 | 115 | ||
116 | _ => ast::Comment::cast(token.clone()) | 116 | _ => ast::Comment::cast(token.clone()) |
117 | .and_then(|comment| { | 117 | .and_then(|_| { |
118 | let def = doc_owner_to_def(&sema, &node)?; | 118 | let (attributes, def) = doc_attributes(&sema, &node)?; |
119 | let docs = def.docs(db)?; | 119 | let (docs, doc_mapping) = attributes.docs_with_rangemap(db)?; |
120 | let (idl_range, link, ns) = | 120 | let (idl_range, link, ns) = |
121 | extract_positioned_link_from_comment(position.offset, &comment, docs)?; | 121 | extract_definitions_from_markdown(docs.as_str()).into_iter().find_map(|(range, link, ns)| { |
122 | let InFile { file_id, value: range } = doc_mapping.map(range.clone())?; | ||
123 | if file_id == position.file_id.into() && range.contains(position.offset) { | ||
124 | Some((range, link, ns)) | ||
125 | } else { | ||
126 | None | ||
127 | } | ||
128 | })?; | ||
122 | range = Some(idl_range); | 129 | range = Some(idl_range); |
123 | resolve_doc_path_for_def(db, def, &link, ns) | 130 | resolve_doc_path_for_def(db, def, &link, ns) |
124 | }) | 131 | }) |