@@ -3513,12 +3513,29 @@ impl<'a> fmt::Display for Sidebar<'a> {
35133513 }
35143514}
35153515
3516+ fn get_methods ( i : & clean:: Impl ) -> Vec < String > {
3517+ i. items . iter ( ) . filter_map ( |item| {
3518+ match item. name {
3519+ // Maybe check with clean::Visibility::Public as well?
3520+ Some ( ref name) if !name. is_empty ( ) && item. visibility . is_some ( ) && item. is_method ( ) => {
3521+ Some ( format ! ( "<a href=\" #method.{name}\" >{name}</a>" , name = name) )
3522+ }
3523+ _ => None ,
3524+ }
3525+ } ) . collect :: < Vec < _ > > ( )
3526+ }
3527+
35163528fn sidebar_assoc_items ( it : & clean:: Item ) -> String {
35173529 let mut out = String :: new ( ) ;
35183530 let c = cache ( ) ;
35193531 if let Some ( v) = c. impls . get ( & it. def_id ) {
3520- if v. iter ( ) . any ( |i| i. inner_impl ( ) . trait_ . is_none ( ) ) {
3521- out. push_str ( "<li><a href=\" #methods\" >Methods</a></li>" ) ;
3532+ let ret = v. iter ( )
3533+ . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
3534+ . flat_map ( |i| get_methods ( i. inner_impl ( ) ) )
3535+ . collect :: < String > ( ) ;
3536+ if !ret. is_empty ( ) {
3537+ out. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #methods\" >Methods\
3538+ </a><div class=\" sidebar-links\" >{}</div>", ret) ) ;
35223539 }
35233540
35243541 if v. iter ( ) . any ( |i| i. inner_impl ( ) . trait_ . is_some ( ) ) {
@@ -3534,16 +3551,33 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
35343551 let inner_impl = target. def_id ( ) . or ( target. primitive_type ( ) . and_then ( |prim| {
35353552 c. primitive_locations . get ( & prim) . cloned ( )
35363553 } ) ) . and_then ( |did| c. impls . get ( & did) ) ;
3537- if inner_impl . is_some ( ) {
3538- out. push_str ( "<li><a href=\" #deref-methods\" >" ) ;
3554+ if let Some ( impls ) = inner_impl {
3555+ out. push_str ( "<a class= \" sidebar-title \" href=\" #deref-methods\" >" ) ;
35393556 out. push_str ( & format ! ( "Methods from {:#}<Target={:#}>" ,
3540- impl_. inner_impl( ) . trait_. as_ref( ) . unwrap( ) ,
3541- target) ) ;
3542- out. push_str ( "</a></li>" ) ;
3557+ impl_. inner_impl( ) . trait_. as_ref( ) . unwrap( ) ,
3558+ target) ) ;
3559+ out. push_str ( "</a>" ) ;
3560+ let ret = impls. iter ( )
3561+ . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
3562+ . flat_map ( |i| get_methods ( i. inner_impl ( ) ) )
3563+ . collect :: < String > ( ) ;
3564+ out. push_str ( & format ! ( "<div class=\" sidebar-links\" >{}</div>" , ret) ) ;
35433565 }
35443566 }
35453567 }
3546- out. push_str ( "<li><a href=\" #implementations\" >Trait Implementations</a></li>" ) ;
3568+ let ret = v. iter ( )
3569+ . filter_map ( |i| if let Some ( ref i) = i. inner_impl ( ) . trait_ {
3570+ let out = format ! ( "{:#}" , i) . replace ( "<" , "<" ) . replace ( ">" , ">" ) ;
3571+ Some ( format ! ( "<a href=\" #impl-{:#}\" >{name}</a>" , i, out) )
3572+ } else {
3573+ None
3574+ } )
3575+ . collect :: < String > ( ) ;
3576+ if !ret. is_empty ( ) {
3577+ out. push_str ( "<a class=\" sidebar-title\" href=\" #implementations\" >\
3578+ Trait Implementations</a>") ;
3579+ out. push_str ( & format ! ( "<div class=\" sidebar-links\" >{}</div>" , ret) ) ;
3580+ }
35473581 }
35483582 }
35493583
@@ -3564,7 +3598,7 @@ fn sidebar_struct(fmt: &mut fmt::Formatter, it: &clean::Item,
35643598 sidebar. push_str ( & sidebar_assoc_items ( it) ) ;
35653599
35663600 if !sidebar. is_empty ( ) {
3567- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3601+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
35683602 }
35693603 Ok ( ( ) )
35703604}
@@ -3606,15 +3640,15 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
36063640
36073641 sidebar. push_str ( "<li><a href=\" #implementors\" >Implementors</a></li>" ) ;
36083642
3609- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar)
3643+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar)
36103644}
36113645
36123646fn sidebar_primitive ( fmt : & mut fmt:: Formatter , it : & clean:: Item ,
36133647 _p : & clean:: PrimitiveType ) -> fmt:: Result {
36143648 let sidebar = sidebar_assoc_items ( it) ;
36153649
36163650 if !sidebar. is_empty ( ) {
3617- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3651+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
36183652 }
36193653 Ok ( ( ) )
36203654}
@@ -3624,7 +3658,7 @@ fn sidebar_typedef(fmt: &mut fmt::Formatter, it: &clean::Item,
36243658 let sidebar = sidebar_assoc_items ( it) ;
36253659
36263660 if !sidebar. is_empty ( ) {
3627- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3661+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
36283662 }
36293663 Ok ( ( ) )
36303664}
@@ -3641,7 +3675,7 @@ fn sidebar_union(fmt: &mut fmt::Formatter, it: &clean::Item,
36413675 sidebar. push_str ( & sidebar_assoc_items ( it) ) ;
36423676
36433677 if !sidebar. is_empty ( ) {
3644- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3678+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
36453679 }
36463680 Ok ( ( ) )
36473681}
@@ -3657,7 +3691,7 @@ fn sidebar_enum(fmt: &mut fmt::Formatter, it: &clean::Item,
36573691 sidebar. push_str ( & sidebar_assoc_items ( it) ) ;
36583692
36593693 if !sidebar. is_empty ( ) {
3660- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3694+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
36613695 }
36623696 Ok ( ( ) )
36633697}
0 commit comments