@@ -1256,6 +1256,7 @@ fn render_assoc_items_inner(
1256
1256
let Some ( v) = cache. impls . get ( & it) else { return } ;
1257
1257
let ( non_trait, traits) : ( Vec < _ > , _ ) = v. iter ( ) . partition ( |i| i. inner_impl ( ) . trait_ . is_none ( ) ) ;
1258
1258
if !non_trait. is_empty ( ) {
1259
+ let mut close_tags = <Vec < & str > >:: with_capacity ( 1 ) ;
1259
1260
let mut tmp_buf = Buffer :: html ( ) ;
1260
1261
let ( render_mode, id, class_html) = match what {
1261
1262
AssocItemRender :: All => {
@@ -1266,6 +1267,8 @@ fn render_assoc_items_inner(
1266
1267
let id =
1267
1268
cx. derive_id ( small_url_encode ( format ! ( "deref-methods-{:#}" , type_. print( cx) ) ) ) ;
1268
1269
let derived_id = cx. derive_id ( & id) ;
1270
+ tmp_buf. write_str ( "<details class=\" toggle implementors-toggle\" open><summary>" ) ;
1271
+ close_tags. push ( "</details>" ) ;
1269
1272
write_impl_section_heading (
1270
1273
& mut tmp_buf,
1271
1274
& format ! (
@@ -1275,6 +1278,7 @@ fn render_assoc_items_inner(
1275
1278
) ,
1276
1279
& id,
1277
1280
) ;
1281
+ tmp_buf. write_str ( "</summary>" ) ;
1278
1282
if let Some ( def_id) = type_. def_id ( cx. cache ( ) ) {
1279
1283
cx. deref_id_map . insert ( def_id, id) ;
1280
1284
}
@@ -1308,6 +1312,9 @@ fn render_assoc_items_inner(
1308
1312
impls_buf. into_inner( )
1309
1313
)
1310
1314
. unwrap ( ) ;
1315
+ for tag in close_tags. into_iter ( ) . rev ( ) {
1316
+ w. write_str ( tag) . unwrap ( ) ;
1317
+ }
1311
1318
}
1312
1319
}
1313
1320
@@ -1565,7 +1572,7 @@ fn render_impl(
1565
1572
let cache = & shared. cache ;
1566
1573
let traits = & cache. traits ;
1567
1574
let trait_ = i. trait_did ( ) . map ( |did| & traits[ & did] ) ;
1568
- let mut close_tags = String :: new ( ) ;
1575
+ let mut close_tags = < Vec < & str > > :: with_capacity ( 2 ) ;
1569
1576
1570
1577
// For trait implementations, the `interesting` output contains all methods that have doc
1571
1578
// comments, and the `boring` output contains all methods that do not. The distinction is
@@ -1853,7 +1860,7 @@ fn render_impl(
1853
1860
if render_mode == RenderMode :: Normal {
1854
1861
let toggled = !( impl_items. is_empty ( ) && default_impl_items. is_empty ( ) ) ;
1855
1862
if toggled {
1856
- close_tags. insert_str ( 0 , "</details>" ) ;
1863
+ close_tags. push ( "</details>" ) ;
1857
1864
write ! (
1858
1865
w,
1859
1866
"<details class=\" toggle implementors-toggle\" {}>\
@@ -1899,14 +1906,16 @@ fn render_impl(
1899
1906
}
1900
1907
if !default_impl_items. is_empty ( ) || !impl_items. is_empty ( ) {
1901
1908
w. write_str ( "<div class=\" impl-items\" >" ) ;
1902
- close_tags. insert_str ( 0 , "</div>" ) ;
1909
+ close_tags. push ( "</div>" ) ;
1903
1910
}
1904
1911
}
1905
1912
if !default_impl_items. is_empty ( ) || !impl_items. is_empty ( ) {
1906
1913
w. push_buffer ( default_impl_items) ;
1907
1914
w. push_buffer ( impl_items) ;
1908
1915
}
1909
- w. write_str ( & close_tags) ;
1916
+ for tag in close_tags. into_iter ( ) . rev ( ) {
1917
+ w. write_str ( tag) ;
1918
+ }
1910
1919
}
1911
1920
1912
1921
// Render the items that appear on the right side of methods, impls, and
0 commit comments