@@ -708,11 +708,15 @@ fn render_impls(
708708 containing_item,
709709 assoc_link,
710710 RenderMode :: Normal ,
711- true ,
712711 None ,
713- false ,
714- true ,
715712 & [ ] ,
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+ } ,
716720 ) ;
717721 buffer. into_inner ( )
718722 } )
@@ -1047,11 +1051,15 @@ fn render_assoc_items(
10471051 containing_item,
10481052 AssocItemLink :: Anchor ( None ) ,
10491053 render_mode,
1050- true ,
10511054 None ,
1052- false ,
1053- true ,
10541055 & [ ] ,
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+ } ,
10551063 ) ;
10561064 }
10571065 }
@@ -1240,20 +1248,26 @@ fn notable_traits_decl(decl: &clean::FnDecl, cx: &Context<'_>) -> String {
12401248 out. into_inner ( )
12411249}
12421250
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+
12431261fn render_impl (
12441262 w : & mut Buffer ,
12451263 cx : & Context < ' _ > ,
12461264 i : & Impl ,
12471265 parent : & clean:: Item ,
12481266 link : AssocItemLink < ' _ > ,
12491267 render_mode : RenderMode ,
1250- show_def_docs : bool ,
12511268 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".
12561269 aliases : & [ String ] ,
1270+ rendering_params : ImplRenderingParameters ,
12571271) {
12581272 let cache = cx. cache ( ) ;
12591273 let traits = & cache. traits ;
@@ -1276,17 +1290,18 @@ fn render_impl(
12761290 render_mode : RenderMode ,
12771291 is_default_item : bool ,
12781292 trait_ : Option < & clean:: Trait > ,
1279- show_def_docs : bool ,
1293+ rendering_params : ImplRenderingParameters ,
12801294 ) {
12811295 let item_type = item. type_ ( ) ;
12821296 let name = item. name . as_ref ( ) . unwrap ( ) ;
12831297
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+ } ;
12901305
12911306 let in_trait_class = if trait_. is_some ( ) { " trait-impl" } else { "" } ;
12921307
@@ -1309,18 +1324,32 @@ fn render_impl(
13091324 } else {
13101325 // In case the item isn't documented,
13111326 // 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+ ) ;
13131335 }
13141336 }
13151337 } else {
13161338 document_item_info ( & mut info_buffer, cx, item, Some ( parent) ) ;
1317- if show_def_docs {
1339+ if rendering_params . show_def_docs {
13181340 document_full ( & mut doc_buffer, item, cx) ;
13191341 short_documented = false ;
13201342 }
13211343 }
13221344 } 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+ ) ;
13241353 }
13251354 }
13261355 let w = if short_documented && trait_. is_some ( ) { interesting } else { boring } ;
@@ -1452,7 +1481,7 @@ fn render_impl(
14521481 render_mode,
14531482 false ,
14541483 trait_. map ( |t| & t. trait_ ) ,
1455- show_def_docs ,
1484+ rendering_params ,
14561485 ) ;
14571486 }
14581487
@@ -1465,7 +1494,7 @@ fn render_impl(
14651494 parent : & clean:: Item ,
14661495 containing_item : & clean:: Item ,
14671496 render_mode : RenderMode ,
1468- show_def_docs : bool ,
1497+ rendering_params : ImplRenderingParameters ,
14691498 ) {
14701499 for trait_item in & t. items {
14711500 let n = trait_item. name ;
@@ -1487,7 +1516,7 @@ fn render_impl(
14871516 render_mode,
14881517 true ,
14891518 Some ( t) ,
1490- show_def_docs ,
1519+ rendering_params ,
14911520 ) ;
14921521 }
14931522 }
@@ -1496,7 +1525,7 @@ fn render_impl(
14961525 // default items which weren't overridden in the implementation block.
14971526 // We don't emit documentation for default items if they appear in the
14981527 // Implementations on Foreign Types or Implementors sections.
1499- if show_default_items {
1528+ if rendering_params . show_default_items {
15001529 if let Some ( t) = trait_ {
15011530 render_default_items (
15021531 & mut default_impl_items,
@@ -1507,15 +1536,19 @@ fn render_impl(
15071536 & i. impl_item ,
15081537 parent,
15091538 render_mode,
1510- show_def_docs ,
1539+ rendering_params ,
15111540 ) ;
15121541 }
15131542 }
15141543 if render_mode == RenderMode :: Normal {
15151544 let toggled = !( impl_items. is_empty ( ) && default_impl_items. is_empty ( ) ) ;
15161545 if toggled {
15171546 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+ ) ;
15191552 write ! ( w, "<summary>" )
15201553 }
15211554 render_impl_summary (
@@ -1524,9 +1557,9 @@ fn render_impl(
15241557 i,
15251558 parent,
15261559 parent,
1527- show_def_docs,
1560+ rendering_params . show_def_docs ,
15281561 use_absolute,
1529- is_on_foreign_type,
1562+ rendering_params . is_on_foreign_type ,
15301563 aliases,
15311564 ) ;
15321565 if toggled {
0 commit comments