diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index f14001e849..bf08f5203a 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -195,6 +195,7 @@ impl NavigationTarget { .visit(doc_comments::) .visit(doc_comments::) .visit(doc_comments::) + .visit(doc_comments::) .accept(&node)? } @@ -226,7 +227,7 @@ impl NavigationTarget { let mut string = node.visibility().map(|v| format!("{} ", v.syntax().text())).unwrap_or_default(); string.push_str(label); - node.name()?.syntax().text().push_to(&mut string); + string.push_str(node.name()?.text().as_str()); Some(string) } @@ -240,6 +241,7 @@ impl NavigationTarget { .visit(|node: &ast::ConstDef| visit_ascribed_node(node, "const ")) .visit(|node: &ast::StaticDef| visit_ascribed_node(node, "static ")) .visit(|node: &ast::NamedFieldDef| visit_ascribed_node(node, "")) + .visit(|node: &ast::EnumVariant| Some(node.name()?.text().to_string())) .accept(&node)? } } @@ -428,8 +430,60 @@ mod tests { ", ); let hover = analysis.hover(position).unwrap().unwrap(); - // not the nicest way to show it currently - assert_eq!(trim_markup_opt(hover.info.first()), Some("Some(T) -> Option")); + assert_eq!(trim_markup_opt(hover.info.first()), Some("Some")); + + let (analysis, position) = single_file_with_position( + " + enum Option { Some(T) } + use Option::Some; + + fn main() { + let b<|>ar = Some(12); + } + ", + ); + let hover = analysis.hover(position).unwrap().unwrap(); + assert_eq!(trim_markup_opt(hover.info.first()), Some("Option")); + } + + #[test] + fn hover_enum_variant() { + check_hover_result( + r#" + //- /main.rs + enum Option { + /// The None variant + Non<|>e + } + "#, + &[" +None +``` + +The None variant + " + .trim()], + ); + + check_hover_result( + r#" + //- /main.rs + enum Option { + /// The Some variant + Some(T) + } + fn main() { + let s = Option::Som<|>e(12); + } + "#, + &[" +Some +``` + +The Some variant + " + .trim()], + ); } #[test]