@@ -137,17 +137,14 @@ fn should_hide_fields(n_fields: usize) -> bool {
137137 n_fields > 5
138138}
139139
140- fn toggle_open ( w : & mut Buffer , text : & str )
141- {
140+ fn toggle_open ( w : & mut Buffer , text : & str ) {
142141 write ! ( w, "<div class=\" docblock type-contents-toggle\" data-toggle-text=\" {}\" >" , text) ;
143142}
144143
145- fn toggle_close ( w : & mut Buffer )
146- {
144+ fn toggle_close ( w : & mut Buffer ) {
147145 w. write_str ( "</div>" ) ;
148146}
149147
150-
151148fn item_module ( w : & mut Buffer , cx : & Context < ' _ > , item : & clean:: Item , items : & [ clean:: Item ] ) {
152149 document ( w, cx, item, None ) ;
153150
@@ -1285,6 +1282,17 @@ fn render_union(
12851282 }
12861283
12871284 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+
12881296 for field in fields {
12891297 if let clean:: StructFieldItem ( ref ty) = * field. kind {
12901298 write ! (
@@ -1301,6 +1309,9 @@ fn render_union(
13011309 if it. has_stripped_fields ( ) . unwrap ( ) {
13021310 write ! ( w, " // some fields omitted\n {}" , tab) ;
13031311 }
1312+ if toggle {
1313+ toggle_close ( w) ;
1314+ }
13041315 w. write_str ( "}" ) ;
13051316}
13061317
@@ -1329,8 +1340,18 @@ fn render_struct(
13291340 if let Some ( g) = g {
13301341 write ! ( w, "{}" , print_where_clause( g, cx. cache( ) , cx. tcx( ) , 0 , true ) , )
13311342 }
1332- let mut has_visible_fields = false ;
13331343 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+ }
13341355 for field in fields {
13351356 if let clean:: StructFieldItem ( ref ty) = * field. kind {
13361357 write ! (
@@ -1341,7 +1362,6 @@ fn render_struct(
13411362 field. name. as_ref( ) . unwrap( ) ,
13421363 ty. print( cx. cache( ) , cx. tcx( ) ) ,
13431364 ) ;
1344- has_visible_fields = true ;
13451365 }
13461366 }
13471367
@@ -1355,6 +1375,9 @@ fn render_struct(
13551375 // `{ /* fields omitted */ }` to save space.
13561376 write ! ( w, " /* fields omitted */ " ) ;
13571377 }
1378+ if toggle {
1379+ toggle_close ( w) ;
1380+ }
13581381 w. write_str ( "}" ) ;
13591382 }
13601383 CtorKind :: Fn => {
0 commit comments