@@ -15,6 +15,7 @@ use test_utils::mark;
15
15
use crate :: {
16
16
display:: { macro_label, ShortLabel , ToNav , TryToNav } ,
17
17
link_rewrite:: { remove_links, rewrite_links} ,
18
+ markdown_remove:: remove_markdown,
18
19
markup:: Markup ,
19
20
runnables:: runnable,
20
21
FileId , FilePosition , NavigationTarget , RangeInfo , Runnable ,
@@ -27,6 +28,7 @@ pub struct HoverConfig {
27
28
pub debug : bool ,
28
29
pub goto_type_def : bool ,
29
30
pub links_in_hover : bool ,
31
+ pub markdown : bool ,
30
32
}
31
33
32
34
impl Default for HoverConfig {
@@ -37,6 +39,7 @@ impl Default for HoverConfig {
37
39
debug : true ,
38
40
goto_type_def : true ,
39
41
links_in_hover : true ,
42
+ markdown : true ,
40
43
}
41
44
}
42
45
}
@@ -48,6 +51,7 @@ impl HoverConfig {
48
51
debug : false ,
49
52
goto_type_def : false ,
50
53
links_in_hover : true ,
54
+ markdown : true ,
51
55
} ;
52
56
53
57
pub fn any ( & self ) -> bool {
@@ -91,6 +95,7 @@ pub(crate) fn hover(
91
95
db : & RootDatabase ,
92
96
position : FilePosition ,
93
97
links_in_hover : bool ,
98
+ markdown : bool ,
94
99
) -> Option < RangeInfo < HoverResult > > {
95
100
let sema = Semantics :: new ( db) ;
96
101
let file = sema. parse ( position. file_id ) . syntax ( ) . clone ( ) ;
@@ -109,7 +114,9 @@ pub(crate) fn hover(
109
114
} ;
110
115
if let Some ( definition) = definition {
111
116
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 {
113
120
rewrite_links ( db, & markup. as_str ( ) , & definition)
114
121
} else {
115
122
remove_links ( & markup. as_str ( ) )
@@ -147,7 +154,11 @@ pub(crate) fn hover(
147
154
}
148
155
} ;
149
156
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
+ } ;
151
162
let range = sema. original_range ( & node) . range ;
152
163
Some ( RangeInfo :: new ( range, res) )
153
164
}
@@ -383,12 +394,12 @@ mod tests {
383
394
384
395
fn check_hover_no_result ( ra_fixture : & str ) {
385
396
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( ) ) ;
387
398
}
388
399
389
400
fn check ( ra_fixture : & str , expect : Expect ) {
390
401
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 ( ) ;
392
403
393
404
let content = analysis. db . file_text ( position. file_id ) ;
394
405
let hovered_element = & content[ hover. range ] ;
@@ -399,7 +410,18 @@ mod tests {
399
410
400
411
fn check_hover_no_links ( ra_fixture : & str , expect : Expect ) {
401
412
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 ( ) ;
403
425
404
426
let content = analysis. db . file_text ( position. file_id ) ;
405
427
let hovered_element = & content[ hover. range ] ;
@@ -410,7 +432,7 @@ mod tests {
410
432
411
433
fn check_actions ( ra_fixture : & str , expect : Expect ) {
412
434
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 ( ) ;
414
436
expect. assert_debug_eq ( & hover. info . actions )
415
437
}
416
438
@@ -433,6 +455,23 @@ fn main() {
433
455
) ;
434
456
}
435
457
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
+
436
475
#[ test]
437
476
fn hover_shows_long_type_of_an_expression ( ) {
438
477
check (
0 commit comments