diff options
-rw-r--r-- | crates/ra_ide_api/src/display.rs | 10 | ||||
-rw-r--r-- | crates/ra_ide_api/src/hover.rs | 42 |
2 files changed, 35 insertions, 17 deletions
diff --git a/crates/ra_ide_api/src/display.rs b/crates/ra_ide_api/src/display.rs index b81f4db0c..882518838 100644 --- a/crates/ra_ide_api/src/display.rs +++ b/crates/ra_ide_api/src/display.rs | |||
@@ -73,13 +73,3 @@ where | |||
73 | format!("```rust\n{}\n```", val.as_ref()) | 73 | format!("```rust\n{}\n```", val.as_ref()) |
74 | } | 74 | } |
75 | } | 75 | } |
76 | |||
77 | // FIXME: this should not really use navigation target. Rather, approximately | ||
78 | // resolved symbol should return a `DefId`. | ||
79 | pub(crate) fn doc_text_for(nav: NavigationTarget) -> Option<String> { | ||
80 | match (nav.description(), nav.docs()) { | ||
81 | (Some(desc), docs) => Some(rust_code_markup_with_doc(desc, docs)), | ||
82 | (None, Some(docs)) => Some(docs.to_string()), | ||
83 | _ => None, | ||
84 | } | ||
85 | } | ||
diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 1f454be21..fbabeb194 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs | |||
@@ -1,14 +1,14 @@ | |||
1 | use ra_db::SourceDatabase; | 1 | use ra_db::SourceDatabase; |
2 | use ra_syntax::{ | 2 | use ra_syntax::{ |
3 | AstNode, ast::{self, DocCommentsOwner}, | 3 | AstNode, ast::{self, DocCommentsOwner}, |
4 | algo::{find_covering_element, find_node_at_offset, ancestors_at_offset}, | 4 | algo::{find_covering_element, find_node_at_offset, ancestors_at_offset, visit::{visitor, Visitor}}, |
5 | }; | 5 | }; |
6 | use hir::HirDisplay; | 6 | use hir::HirDisplay; |
7 | 7 | ||
8 | use crate::{ | 8 | use crate::{ |
9 | db::RootDatabase, | 9 | db::RootDatabase, |
10 | RangeInfo, FilePosition, FileRange, | 10 | RangeInfo, FilePosition, FileRange, |
11 | display::{rust_code_markup, doc_text_for, rust_code_markup_with_doc, ShortLabel, docs_from_symbol, description_from_symbol}, | 11 | display::{rust_code_markup, rust_code_markup_with_doc, ShortLabel, docs_from_symbol, description_from_symbol}, |
12 | name_ref_kind::{NameRefKind::*, classify_name_ref}, | 12 | name_ref_kind::{NameRefKind::*, classify_name_ref}, |
13 | }; | 13 | }; |
14 | 14 | ||
@@ -216,11 +216,39 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn | |||
216 | range = Some(name_ref.syntax().range()) | 216 | range = Some(name_ref.syntax().range()) |
217 | } | 217 | } |
218 | } else if let Some(name) = find_node_at_offset::<ast::Name>(file.syntax(), position.offset) { | 218 | } else if let Some(name) = find_node_at_offset::<ast::Name>(file.syntax(), position.offset) { |
219 | let navs = crate::goto_definition::name_definition(db, position.file_id, name); | 219 | if let Some(parent) = name.syntax().parent() { |
220 | 220 | let text = visitor() | |
221 | if let Some(navs) = navs { | 221 | .visit(|node: &ast::StructDef| { |
222 | for nav in navs { | 222 | hover_text(node.doc_comment_text(), node.short_label()) |
223 | res.extend(doc_text_for(nav)) | 223 | }) |
224 | .visit(|node: &ast::EnumDef| { | ||
225 | hover_text(node.doc_comment_text(), node.short_label()) | ||
226 | }) | ||
227 | .visit(|node: &ast::EnumVariant| { | ||
228 | hover_text(node.doc_comment_text(), node.short_label()) | ||
229 | }) | ||
230 | .visit(|node: &ast::FnDef| hover_text(node.doc_comment_text(), node.short_label())) | ||
231 | .visit(|node: &ast::TypeAliasDef| { | ||
232 | hover_text(node.doc_comment_text(), node.short_label()) | ||
233 | }) | ||
234 | .visit(|node: &ast::ConstDef| { | ||
235 | hover_text(node.doc_comment_text(), node.short_label()) | ||
236 | }) | ||
237 | .visit(|node: &ast::StaticDef| { | ||
238 | hover_text(node.doc_comment_text(), node.short_label()) | ||
239 | }) | ||
240 | .visit(|node: &ast::TraitDef| { | ||
241 | hover_text(node.doc_comment_text(), node.short_label()) | ||
242 | }) | ||
243 | .visit(|node: &ast::NamedFieldDef| { | ||
244 | hover_text(node.doc_comment_text(), node.short_label()) | ||
245 | }) | ||
246 | .visit(|node: &ast::Module| hover_text(node.doc_comment_text(), node.short_label())) | ||
247 | .visit(|node: &ast::MacroCall| hover_text(node.doc_comment_text(), None)) | ||
248 | .accept(parent); | ||
249 | |||
250 | if let Some(text) = text { | ||
251 | res.extend(text); | ||
224 | } | 252 | } |
225 | } | 253 | } |
226 | 254 | ||