aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/hover.rs
diff options
context:
space:
mode:
authorLukas Wirth <[email protected]>2021-03-30 17:27:16 +0100
committerLukas Wirth <[email protected]>2021-03-30 17:27:16 +0100
commitbb56b7a75cfae8297535d55fbddbee9875cbc756 (patch)
treed367c18dddc65d4442679680ea728f5b06280ea5 /crates/ide/src/hover.rs
parent9a327311e4a9b9102528751e052c63266c00c6bd (diff)
Use new new docs string source mapping in goto_def and hover
Diffstat (limited to 'crates/ide/src/hover.rs')
-rw-r--r--crates/ide/src/hover.rs21
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 @@
1use either::Either; 1use either::Either;
2use hir::{ 2use 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};
6use ide_db::{ 6use ide_db::{
@@ -16,8 +16,8 @@ use syntax::{ast, match_ast, AstNode, AstToken, SyntaxKind::*, SyntaxToken, Toke
16use crate::{ 16use 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 })