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