6
6
//! Use the `render_with_highlighting` to highlight some rust code.
7
7
8
8
use std:: collections:: VecDeque ;
9
- use std:: fmt:: { Display , Write } ;
9
+ use std:: fmt:: { self , Display , Write } ;
10
10
11
11
use rustc_data_structures:: fx:: FxIndexMap ;
12
12
use rustc_lexer:: { Cursor , FrontmatterAllowed , LiteralKind , TokenKind } ;
@@ -36,9 +36,10 @@ pub(crate) struct HrefContext<'a, 'tcx> {
36
36
#[ derive( Default ) ]
37
37
pub ( crate ) struct DecorationInfo ( pub ( crate ) FxIndexMap < & ' static str , Vec < ( u32 , u32 ) > > ) ;
38
38
39
- #[ derive( Eq , PartialEq , Clone , Copy ) ]
39
+ #[ derive( Eq , PartialEq , Clone ) ]
40
40
pub ( crate ) enum Tooltip {
41
- Ignore ,
41
+ IgnoreAll ,
42
+ IgnoreSome ( Vec < String > ) ,
42
43
CompileFail ,
43
44
ShouldPanic ,
44
45
Edition ( Edition ) ,
@@ -70,7 +71,7 @@ fn write_header(
70
71
format_args ! (
71
72
"<div class=\" example-wrap{}\" >" ,
72
73
match tooltip {
73
- Tooltip :: Ignore => " ignore" ,
74
+ Tooltip :: IgnoreAll | Tooltip :: IgnoreSome ( _ ) => " ignore" ,
74
75
Tooltip :: CompileFail => " compile_fail" ,
75
76
Tooltip :: ShouldPanic => " should_panic" ,
76
77
Tooltip :: Edition ( _) => " edition" ,
@@ -80,23 +81,29 @@ fn write_header(
80
81
) ;
81
82
82
83
if tooltip != Tooltip :: None {
83
- let edition_code;
84
- write_str (
85
- out,
86
- format_args ! (
87
- "<a href=\" #\" class=\" tooltip\" title=\" {}\" >ⓘ</a>" ,
88
- match tooltip {
89
- Tooltip :: Ignore => "This example is not tested" ,
90
- Tooltip :: CompileFail => "This example deliberately fails to compile" ,
91
- Tooltip :: ShouldPanic => "This example panics" ,
92
- Tooltip :: Edition ( edition) => {
93
- edition_code = format!( "This example runs with edition {edition}" ) ;
94
- & edition_code
84
+ let tooltip = fmt:: from_fn ( |f| match & tooltip {
85
+ Tooltip :: IgnoreAll => f. write_str ( "This example is not tested" ) ,
86
+ Tooltip :: IgnoreSome ( platforms) => {
87
+ f. write_str ( "This example is not tested on " ) ?;
88
+ match & platforms[ ..] {
89
+ [ ] => unreachable ! ( ) ,
90
+ [ platform] => f. write_str ( platform) ?,
91
+ [ first, second] => write ! ( f, "{first} or {second}" ) ?,
92
+ [ platforms @ .., last] => {
93
+ for platform in platforms {
94
+ write ! ( f, "{platform}, " ) ?;
95
+ }
96
+ write ! ( f, "or {last}" ) ?;
95
97
}
96
- Tooltip :: None => unreachable!( ) ,
97
98
}
98
- ) ,
99
- ) ;
99
+ Ok ( ( ) )
100
+ }
101
+ Tooltip :: CompileFail => f. write_str ( "This example deliberately fails to compile" ) ,
102
+ Tooltip :: ShouldPanic => f. write_str ( "This example panics" ) ,
103
+ Tooltip :: Edition ( edition) => write ! ( f, "This example runs with edition {edition}" ) ,
104
+ Tooltip :: None => unreachable ! ( ) ,
105
+ } ) ;
106
+ write_str ( out, format_args ! ( "<a href=\" #\" class=\" tooltip\" title=\" {tooltip}\" >ⓘ</a>" ) ) ;
100
107
}
101
108
102
109
if let Some ( extra) = extra_content {
0 commit comments