1
1
use eyre:: { Context , OptionExt , Result } ;
2
2
use std:: { fs, path:: Path } ;
3
3
4
- use crate :: {
5
- parse:: { Footnote , Tier , TriStateBool } ,
6
- RustcTargetInfo , TargetDocs ,
7
- } ;
8
-
9
- impl TargetDocs {
10
- fn has_host_tools ( & self ) -> bool {
11
- self . metadata . as_ref ( ) . map_or ( false , |meta| meta. host == TriStateBool :: True )
12
- }
13
- }
4
+ use crate :: { RustcTargetInfo , TargetDocs } ;
14
5
15
6
/// Renders a single target markdown file from the information obtained.
16
7
pub fn render_target_md ( target : & TargetDocs , rustc_info : & RustcTargetInfo ) -> String {
17
8
let mut doc = format ! (
18
9
"# {}\n \n **Tier: {}**\n \n " ,
19
10
target. name,
20
- match target . tier {
21
- Some ( Tier :: One ) => "1" ,
22
- Some ( Tier :: Two ) => "2" ,
23
- Some ( Tier :: Three ) => "3" ,
24
- None => "UNKNOWN" ,
11
+ match rustc_info . metadata . tier {
12
+ Some ( 1 ) => "1" ,
13
+ Some ( 2 ) => "2" ,
14
+ Some ( 3 ) => "3" ,
15
+ _ => "UNKNOWN" ,
25
16
}
26
17
) ;
27
18
@@ -61,7 +52,10 @@ pub fn render_target_md(target: &TargetDocs, rustc_info: &RustcTargetInfo) -> St
61
52
section ( "Maintainers" , & maintainers_content) ;
62
53
63
54
for section_name in crate :: SECTIONS {
64
- let value = target. sections . iter ( ) . find ( |( name, _) | name == section_name) ;
55
+ let value = target
56
+ . sections
57
+ . iter ( )
58
+ . find ( |( name, _) | name == section_name) ;
65
59
66
60
let section_content = match value {
67
61
Some ( ( _, value) ) => value. clone ( ) ,
@@ -141,12 +135,6 @@ pub fn render_static(
141
135
Ok ( ( ) )
142
136
}
143
137
144
- impl Footnote {
145
- fn reference ( & self ) -> String {
146
- format ! ( "[^{}]" , self . name)
147
- }
148
- }
149
-
150
138
fn render_platform_support_tables (
151
139
content : & str ,
152
140
targets : & [ ( TargetDocs , RustcTargetInfo ) ] ,
@@ -160,7 +148,7 @@ fn render_platform_support_tables(
160
148
content,
161
149
"TIER1HOST" ,
162
150
TierTable {
163
- filter : |target| target. tier == Some ( Tier :: One ) ,
151
+ filter : |target| target. 1 . metadata . tier == Some ( 1 ) ,
164
152
include_host : false ,
165
153
include_std : false ,
166
154
} ,
@@ -169,7 +157,9 @@ fn render_platform_support_tables(
169
157
& content,
170
158
"TIER2HOST" ,
171
159
TierTable {
172
- filter : |target| target. tier == Some ( Tier :: Two ) && target. has_host_tools ( ) ,
160
+ filter : |target| {
161
+ target. 1 . metadata . tier == Some ( 2 ) && target. 1 . metadata . host_tools . unwrap_or ( false )
162
+ } ,
173
163
include_host : false ,
174
164
include_std : false ,
175
165
} ,
@@ -178,7 +168,9 @@ fn render_platform_support_tables(
178
168
& content,
179
169
"TIER2" ,
180
170
TierTable {
181
- filter : |target| target. tier == Some ( Tier :: Two ) && !target. has_host_tools ( ) ,
171
+ filter : |target| {
172
+ target. 1 . metadata . tier == Some ( 2 ) && !target. 1 . metadata . host_tools . unwrap_or ( false )
173
+ } ,
182
174
include_host : false ,
183
175
include_std : true ,
184
176
} ,
@@ -187,7 +179,7 @@ fn render_platform_support_tables(
187
179
& content,
188
180
"TIER3" ,
189
181
TierTable {
190
- filter : |target| target. tier == Some ( Tier :: Three ) ,
182
+ filter : |target| target. 1 . metadata . tier == Some ( 3 ) ,
191
183
include_host : true ,
192
184
include_std : true ,
193
185
} ,
@@ -196,49 +188,50 @@ fn render_platform_support_tables(
196
188
Ok ( content)
197
189
}
198
190
199
- fn render_table_tri_state_bool ( bool : TriStateBool ) -> & ' static str {
191
+ fn render_table_option_bool ( bool : Option < bool > ) -> & ' static str {
200
192
match bool {
201
- TriStateBool :: True => "✓" ,
202
- TriStateBool :: False => " " ,
203
- TriStateBool :: Unknown => "?" ,
193
+ Some ( true ) => "✓" ,
194
+ Some ( false ) => " " ,
195
+ None => "?" ,
204
196
}
205
197
}
206
198
207
199
struct TierTable {
208
- filter : fn ( & TargetDocs ) -> bool ,
200
+ filter : fn ( & ( TargetDocs , RustcTargetInfo ) ) -> bool ,
209
201
include_std : bool ,
210
202
include_host : bool ,
211
203
}
212
204
213
205
fn render_table ( targets : & [ ( TargetDocs , RustcTargetInfo ) ] , table : TierTable ) -> Result < String > {
214
206
let mut rows = Vec :: new ( ) ;
215
- let mut all_footnotes = Vec :: new ( ) ;
216
207
217
- let targets = targets. into_iter ( ) . filter ( |target| ( table. filter ) ( & target. 0 ) ) ;
208
+ let targets = targets. into_iter ( ) . filter ( |target| ( table. filter ) ( & target) ) ;
218
209
219
- for ( target, _ ) in targets {
220
- let meta = target . metadata . as_ref ( ) ;
210
+ for ( target, rustc_info ) in targets {
211
+ let meta = & rustc_info . metadata ;
221
212
222
- let mut notes = meta. map ( |meta| meta . notes . as_str ( ) ) . unwrap_or ( "unknown" ) . to_owned ( ) ;
213
+ let mut notes = meta. description . as_deref ( ) . unwrap_or ( "unknown" ) . to_owned ( ) ;
223
214
224
- if meta. map_or ( false , |meta| !meta. footnotes . is_empty ( ) ) {
225
- let footnotes = & meta. unwrap ( ) . footnotes ;
226
- all_footnotes. extend ( footnotes) ;
227
- let footnotes_str =
228
- footnotes. iter ( ) . map ( |footnote| footnote. reference ( ) ) . collect :: < Vec < _ > > ( ) . join ( " " ) ;
215
+ if !target. footnotes . is_empty ( ) {
216
+ let footnotes_str = target
217
+ . footnotes
218
+ . iter ( )
219
+ . map ( |footnote| format ! ( "[^{}]" , footnote) )
220
+ . collect :: < Vec < _ > > ( )
221
+ . join ( " " ) ;
229
222
230
223
notes = format ! ( "{notes} {footnotes_str}" ) ;
231
224
}
232
225
233
226
let std = if table. include_std {
234
- let std = meta . map ( | meta| render_table_tri_state_bool ( meta . std ) ) . unwrap_or ( "?" ) ;
227
+ let std = render_table_option_bool ( meta. std ) ;
235
228
format ! ( " | {std}" )
236
229
} else {
237
230
String :: new ( )
238
231
} ;
239
232
240
233
let host = if table. include_host {
241
- let host = meta . map ( | meta| render_table_tri_state_bool ( meta . host ) ) . unwrap_or ( "?" ) ;
234
+ let host = render_table_option_bool ( meta. host_tools ) ;
242
235
format ! ( " | {host}" )
243
236
} else {
244
237
String :: new ( )
@@ -250,14 +243,7 @@ fn render_table(targets: &[(TargetDocs, RustcTargetInfo)], table: TierTable) ->
250
243
) ) ;
251
244
}
252
245
253
- let mut result = rows. join ( "\n " ) ;
254
-
255
- for footnote in all_footnotes {
256
- result. push_str ( "\n \n " ) ;
257
- result. push_str ( & footnote. reference ( ) ) ;
258
- result. push_str ( ": " ) ;
259
- result. push_str ( & footnote. content ) ;
260
- }
246
+ let result = rows. join ( "\n " ) ;
261
247
262
248
Ok ( result)
263
249
}
0 commit comments