@@ -137,17 +137,14 @@ fn should_hide_fields(n_fields: usize) -> bool {
137
137
n_fields > 5
138
138
}
139
139
140
- fn toggle_open ( w : & mut Buffer , text : & str )
141
- {
140
+ fn toggle_open ( w : & mut Buffer , text : & str ) {
142
141
write ! ( w, "<div class=\" docblock type-contents-toggle\" data-toggle-text=\" {}\" >" , text) ;
143
142
}
144
143
145
- fn toggle_close ( w : & mut Buffer )
146
- {
144
+ fn toggle_close ( w : & mut Buffer ) {
147
145
w. write_str ( "</div>" ) ;
148
146
}
149
147
150
-
151
148
fn item_module ( w : & mut Buffer , cx : & Context < ' _ > , item : & clean:: Item , items : & [ clean:: Item ] ) {
152
149
document ( w, cx, item, None ) ;
153
150
@@ -1285,6 +1282,17 @@ fn render_union(
1285
1282
}
1286
1283
1287
1284
write ! ( w, " {{\n {}" , tab) ;
1285
+ let count_fields = fields
1286
+ . iter ( )
1287
+ . filter (
1288
+ |f| if let clean:: StructFieldItem ( ..) = * f. kind { true } else { false } ,
1289
+ )
1290
+ . count ( ) ;
1291
+ let toggle = should_hide_fields ( count_fields) ;
1292
+ if toggle {
1293
+ toggle_open ( w, "fields" ) ;
1294
+ }
1295
+
1288
1296
for field in fields {
1289
1297
if let clean:: StructFieldItem ( ref ty) = * field. kind {
1290
1298
write ! (
@@ -1301,6 +1309,9 @@ fn render_union(
1301
1309
if it. has_stripped_fields ( ) . unwrap ( ) {
1302
1310
write ! ( w, " // some fields omitted\n {}" , tab) ;
1303
1311
}
1312
+ if toggle {
1313
+ toggle_close ( w) ;
1314
+ }
1304
1315
w. write_str ( "}" ) ;
1305
1316
}
1306
1317
@@ -1329,8 +1340,18 @@ fn render_struct(
1329
1340
if let Some ( g) = g {
1330
1341
write ! ( w, "{}" , print_where_clause( g, cx. cache( ) , cx. tcx( ) , 0 , true ) , )
1331
1342
}
1332
- let mut has_visible_fields = false ;
1333
1343
w. write_str ( " {" ) ;
1344
+ let count_fields = fields
1345
+ . iter ( )
1346
+ . filter (
1347
+ |f| if let clean:: StructFieldItem ( ..) = * f. kind { true } else { false } ,
1348
+ )
1349
+ . count ( ) ;
1350
+ let has_visible_fields = count_fields > 0 ;
1351
+ let toggle = should_hide_fields ( count_fields) ;
1352
+ if toggle {
1353
+ toggle_open ( w, "fields" ) ;
1354
+ }
1334
1355
for field in fields {
1335
1356
if let clean:: StructFieldItem ( ref ty) = * field. kind {
1336
1357
write ! (
@@ -1341,7 +1362,6 @@ fn render_struct(
1341
1362
field. name. as_ref( ) . unwrap( ) ,
1342
1363
ty. print( cx. cache( ) , cx. tcx( ) ) ,
1343
1364
) ;
1344
- has_visible_fields = true ;
1345
1365
}
1346
1366
}
1347
1367
@@ -1355,6 +1375,9 @@ fn render_struct(
1355
1375
// `{ /* fields omitted */ }` to save space.
1356
1376
write ! ( w, " /* fields omitted */ " ) ;
1357
1377
}
1378
+ if toggle {
1379
+ toggle_close ( w) ;
1380
+ }
1358
1381
w. write_str ( "}" ) ;
1359
1382
}
1360
1383
CtorKind :: Fn => {
0 commit comments