@@ -710,11 +710,15 @@ fn render_impls(
710
710
containing_item,
711
711
assoc_link,
712
712
RenderMode :: Normal ,
713
- true ,
714
713
None ,
715
- false ,
716
- true ,
717
714
& [ ] ,
715
+ ImplRenderingParameters {
716
+ show_def_docs : true ,
717
+ is_on_foreign_type : false ,
718
+ show_default_items : true ,
719
+ show_non_assoc_items : true ,
720
+ toggle_open_by_default : true ,
721
+ } ,
718
722
) ;
719
723
buffer. into_inner ( )
720
724
} )
@@ -1049,11 +1053,15 @@ fn render_assoc_items(
1049
1053
containing_item,
1050
1054
AssocItemLink :: Anchor ( None ) ,
1051
1055
render_mode,
1052
- true ,
1053
1056
None ,
1054
- false ,
1055
- true ,
1056
1057
& [ ] ,
1058
+ ImplRenderingParameters {
1059
+ show_def_docs : true ,
1060
+ is_on_foreign_type : false ,
1061
+ show_default_items : true ,
1062
+ show_non_assoc_items : true ,
1063
+ toggle_open_by_default : true ,
1064
+ } ,
1057
1065
) ;
1058
1066
}
1059
1067
}
@@ -1243,20 +1251,26 @@ fn notable_traits_decl(decl: &clean::FnDecl, cx: &Context<'_>) -> String {
1243
1251
out. into_inner ( )
1244
1252
}
1245
1253
1254
+ #[ derive( Clone , Copy , Debug ) ]
1255
+ struct ImplRenderingParameters {
1256
+ show_def_docs : bool ,
1257
+ is_on_foreign_type : bool ,
1258
+ show_default_items : bool ,
1259
+ /// Whether or not to show methods.
1260
+ show_non_assoc_items : bool ,
1261
+ toggle_open_by_default : bool ,
1262
+ }
1263
+
1246
1264
fn render_impl (
1247
1265
w : & mut Buffer ,
1248
1266
cx : & Context < ' _ > ,
1249
1267
i : & Impl ,
1250
1268
parent : & clean:: Item ,
1251
1269
link : AssocItemLink < ' _ > ,
1252
1270
render_mode : RenderMode ,
1253
- show_def_docs : bool ,
1254
1271
use_absolute : Option < bool > ,
1255
- is_on_foreign_type : bool ,
1256
- show_default_items : bool ,
1257
- // This argument is used to reference same type with different paths to avoid duplication
1258
- // in documentation pages for trait with automatic implementations like "Send" and "Sync".
1259
1272
aliases : & [ String ] ,
1273
+ rendering_params : ImplRenderingParameters ,
1260
1274
) {
1261
1275
let cache = cx. cache ( ) ;
1262
1276
let traits = & cache. traits ;
@@ -1279,17 +1293,18 @@ fn render_impl(
1279
1293
render_mode : RenderMode ,
1280
1294
is_default_item : bool ,
1281
1295
trait_ : Option < & clean:: Trait > ,
1282
- show_def_docs : bool ,
1296
+ rendering_params : ImplRenderingParameters ,
1283
1297
) {
1284
1298
let item_type = item. type_ ( ) ;
1285
1299
let name = item. name . as_ref ( ) . unwrap ( ) ;
1286
1300
1287
- let render_method_item = match render_mode {
1288
- RenderMode :: Normal => true ,
1289
- RenderMode :: ForDeref { mut_ : deref_mut_ } => {
1290
- should_render_item ( & item, deref_mut_, cx. cache ( ) )
1291
- }
1292
- } ;
1301
+ let render_method_item = rendering_params. show_non_assoc_items
1302
+ && match render_mode {
1303
+ RenderMode :: Normal => true ,
1304
+ RenderMode :: ForDeref { mut_ : deref_mut_ } => {
1305
+ should_render_item ( & item, deref_mut_, cx. cache ( ) )
1306
+ }
1307
+ } ;
1293
1308
1294
1309
let in_trait_class = if trait_. is_some ( ) { " trait-impl" } else { "" } ;
1295
1310
@@ -1312,18 +1327,32 @@ fn render_impl(
1312
1327
} else {
1313
1328
// In case the item isn't documented,
1314
1329
// provide short documentation from the trait.
1315
- document_short ( & mut doc_buffer, it, cx, link, parent, show_def_docs) ;
1330
+ document_short (
1331
+ & mut doc_buffer,
1332
+ it,
1333
+ cx,
1334
+ link,
1335
+ parent,
1336
+ rendering_params. show_def_docs ,
1337
+ ) ;
1316
1338
}
1317
1339
}
1318
1340
} else {
1319
1341
document_item_info ( & mut info_buffer, cx, item, Some ( parent) ) ;
1320
- if show_def_docs {
1342
+ if rendering_params . show_def_docs {
1321
1343
document_full ( & mut doc_buffer, item, cx) ;
1322
1344
short_documented = false ;
1323
1345
}
1324
1346
}
1325
1347
} else {
1326
- document_short ( & mut doc_buffer, item, cx, link, parent, show_def_docs) ;
1348
+ document_short (
1349
+ & mut doc_buffer,
1350
+ item,
1351
+ cx,
1352
+ link,
1353
+ parent,
1354
+ rendering_params. show_def_docs ,
1355
+ ) ;
1327
1356
}
1328
1357
}
1329
1358
let w = if short_documented && trait_. is_some ( ) { interesting } else { boring } ;
@@ -1455,7 +1484,7 @@ fn render_impl(
1455
1484
render_mode,
1456
1485
false ,
1457
1486
trait_. map ( |t| & t. trait_ ) ,
1458
- show_def_docs ,
1487
+ rendering_params ,
1459
1488
) ;
1460
1489
}
1461
1490
@@ -1468,7 +1497,7 @@ fn render_impl(
1468
1497
parent : & clean:: Item ,
1469
1498
containing_item : & clean:: Item ,
1470
1499
render_mode : RenderMode ,
1471
- show_def_docs : bool ,
1500
+ rendering_params : ImplRenderingParameters ,
1472
1501
) {
1473
1502
for trait_item in & t. items {
1474
1503
let n = trait_item. name ;
@@ -1490,7 +1519,7 @@ fn render_impl(
1490
1519
render_mode,
1491
1520
true ,
1492
1521
Some ( t) ,
1493
- show_def_docs ,
1522
+ rendering_params ,
1494
1523
) ;
1495
1524
}
1496
1525
}
@@ -1499,7 +1528,7 @@ fn render_impl(
1499
1528
// default items which weren't overridden in the implementation block.
1500
1529
// We don't emit documentation for default items if they appear in the
1501
1530
// Implementations on Foreign Types or Implementors sections.
1502
- if show_default_items {
1531
+ if rendering_params . show_default_items {
1503
1532
if let Some ( t) = trait_ {
1504
1533
render_default_items (
1505
1534
& mut default_impl_items,
@@ -1510,15 +1539,19 @@ fn render_impl(
1510
1539
& i. impl_item ,
1511
1540
parent,
1512
1541
render_mode,
1513
- show_def_docs ,
1542
+ rendering_params ,
1514
1543
) ;
1515
1544
}
1516
1545
}
1517
1546
if render_mode == RenderMode :: Normal {
1518
1547
let toggled = !( impl_items. is_empty ( ) && default_impl_items. is_empty ( ) ) ;
1519
1548
if toggled {
1520
1549
close_tags. insert_str ( 0 , "</details>" ) ;
1521
- write ! ( w, "<details class=\" rustdoc-toggle implementors-toggle\" open>" ) ;
1550
+ write ! (
1551
+ w,
1552
+ "<details class=\" rustdoc-toggle implementors-toggle\" {}>" ,
1553
+ if rendering_params. toggle_open_by_default { " open" } else { "" }
1554
+ ) ;
1522
1555
write ! ( w, "<summary>" )
1523
1556
}
1524
1557
render_impl_summary (
@@ -1527,9 +1560,9 @@ fn render_impl(
1527
1560
i,
1528
1561
parent,
1529
1562
parent,
1530
- show_def_docs,
1563
+ rendering_params . show_def_docs ,
1531
1564
use_absolute,
1532
- is_on_foreign_type,
1565
+ rendering_params . is_on_foreign_type ,
1533
1566
aliases,
1534
1567
) ;
1535
1568
if toggled {
0 commit comments