@@ -15,6 +15,7 @@ use test_utils::mark;
1515use crate :: {
1616 display:: { macro_label, ShortLabel , ToNav , TryToNav } ,
1717 link_rewrite:: { remove_links, rewrite_links} ,
18+ markdown_remove:: remove_markdown,
1819 markup:: Markup ,
1920 runnables:: runnable,
2021 FileId , FilePosition , NavigationTarget , RangeInfo , Runnable ,
@@ -27,6 +28,7 @@ pub struct HoverConfig {
2728 pub debug : bool ,
2829 pub goto_type_def : bool ,
2930 pub links_in_hover : bool ,
31+ pub markdown : bool ,
3032}
3133
3234impl Default for HoverConfig {
@@ -37,6 +39,7 @@ impl Default for HoverConfig {
3739 debug : true ,
3840 goto_type_def : true ,
3941 links_in_hover : true ,
42+ markdown : true ,
4043 }
4144 }
4245}
@@ -48,6 +51,7 @@ impl HoverConfig {
4851 debug : false ,
4952 goto_type_def : false ,
5053 links_in_hover : true ,
54+ markdown : true ,
5155 } ;
5256
5357 pub fn any ( & self ) -> bool {
@@ -91,6 +95,7 @@ pub(crate) fn hover(
9195 db : & RootDatabase ,
9296 position : FilePosition ,
9397 links_in_hover : bool ,
98+ markdown : bool ,
9499) -> Option < RangeInfo < HoverResult > > {
95100 let sema = Semantics :: new ( db) ;
96101 let file = sema. parse ( position. file_id ) . syntax ( ) . clone ( ) ;
@@ -109,7 +114,9 @@ pub(crate) fn hover(
109114 } ;
110115 if let Some ( definition) = definition {
111116 if let Some ( markup) = hover_for_definition ( db, definition) {
112- let markup = if links_in_hover {
117+ let markup = if !markdown {
118+ remove_markdown ( & markup. as_str ( ) )
119+ } else if links_in_hover {
113120 rewrite_links ( db, & markup. as_str ( ) , & definition)
114121 } else {
115122 remove_links ( & markup. as_str ( ) )
@@ -147,7 +154,11 @@ pub(crate) fn hover(
147154 }
148155 } ;
149156
150- res. markup = Markup :: fenced_block ( & ty. display ( db) ) ;
157+ res. markup = if markdown {
158+ Markup :: fenced_block ( & ty. display ( db) )
159+ } else {
160+ ty. display ( db) . to_string ( ) . into ( )
161+ } ;
151162 let range = sema. original_range ( & node) . range ;
152163 Some ( RangeInfo :: new ( range, res) )
153164}
@@ -383,12 +394,12 @@ mod tests {
383394
384395 fn check_hover_no_result ( ra_fixture : & str ) {
385396 let ( analysis, position) = fixture:: position ( ra_fixture) ;
386- assert ! ( analysis. hover( position, true ) . unwrap( ) . is_none( ) ) ;
397+ assert ! ( analysis. hover( position, true , true ) . unwrap( ) . is_none( ) ) ;
387398 }
388399
389400 fn check ( ra_fixture : & str , expect : Expect ) {
390401 let ( analysis, position) = fixture:: position ( ra_fixture) ;
391- let hover = analysis. hover ( position, true ) . unwrap ( ) . unwrap ( ) ;
402+ let hover = analysis. hover ( position, true , true ) . unwrap ( ) . unwrap ( ) ;
392403
393404 let content = analysis. db . file_text ( position. file_id ) ;
394405 let hovered_element = & content[ hover. range ] ;
@@ -399,7 +410,18 @@ mod tests {
399410
400411 fn check_hover_no_links ( ra_fixture : & str , expect : Expect ) {
401412 let ( analysis, position) = fixture:: position ( ra_fixture) ;
402- let hover = analysis. hover ( position, false ) . unwrap ( ) . unwrap ( ) ;
413+ let hover = analysis. hover ( position, false , true ) . unwrap ( ) . unwrap ( ) ;
414+
415+ let content = analysis. db . file_text ( position. file_id ) ;
416+ let hovered_element = & content[ hover. range ] ;
417+
418+ let actual = format ! ( "*{}*\n {}\n " , hovered_element, hover. info. markup) ;
419+ expect. assert_eq ( & actual)
420+ }
421+
422+ fn check_hover_no_markdown ( ra_fixture : & str , expect : Expect ) {
423+ let ( analysis, position) = fixture:: position ( ra_fixture) ;
424+ let hover = analysis. hover ( position, true , false ) . unwrap ( ) . unwrap ( ) ;
403425
404426 let content = analysis. db . file_text ( position. file_id ) ;
405427 let hovered_element = & content[ hover. range ] ;
@@ -410,7 +432,7 @@ mod tests {
410432
411433 fn check_actions ( ra_fixture : & str , expect : Expect ) {
412434 let ( analysis, position) = fixture:: position ( ra_fixture) ;
413- let hover = analysis. hover ( position, true ) . unwrap ( ) . unwrap ( ) ;
435+ let hover = analysis. hover ( position, true , true ) . unwrap ( ) . unwrap ( ) ;
414436 expect. assert_debug_eq ( & hover. info . actions )
415437 }
416438
@@ -433,6 +455,23 @@ fn main() {
433455 ) ;
434456 }
435457
458+ #[ test]
459+ fn hover_remove_markdown_if_configured ( ) {
460+ check_hover_no_markdown (
461+ r#"
462+ pub fn foo() -> u32 { 1 }
463+
464+ fn main() {
465+ let foo_test = foo()<|>;
466+ }
467+ "# ,
468+ expect ! [ [ r#"
469+ *foo()*
470+ u32
471+ "# ] ] ,
472+ ) ;
473+ }
474+
436475 #[ test]
437476 fn hover_shows_long_type_of_an_expression ( ) {
438477 check (
0 commit comments