@@ -3513,12 +3513,29 @@ impl<'a> fmt::Display for Sidebar<'a> {
3513
3513
}
3514
3514
}
3515
3515
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
+
3516
3528
fn sidebar_assoc_items ( it : & clean:: Item ) -> String {
3517
3529
let mut out = String :: new ( ) ;
3518
3530
let c = cache ( ) ;
3519
3531
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) ) ;
3522
3539
}
3523
3540
3524
3541
if v. iter ( ) . any ( |i| i. inner_impl ( ) . trait_ . is_some ( ) ) {
@@ -3534,16 +3551,33 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
3534
3551
let inner_impl = target. def_id ( ) . or ( target. primitive_type ( ) . and_then ( |prim| {
3535
3552
c. primitive_locations . get ( & prim) . cloned ( )
3536
3553
} ) ) . 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\" >" ) ;
3539
3556
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) ) ;
3543
3565
}
3544
3566
}
3545
3567
}
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
+ }
3547
3581
}
3548
3582
}
3549
3583
@@ -3564,7 +3598,7 @@ fn sidebar_struct(fmt: &mut fmt::Formatter, it: &clean::Item,
3564
3598
sidebar. push_str ( & sidebar_assoc_items ( it) ) ;
3565
3599
3566
3600
if !sidebar. is_empty ( ) {
3567
- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3601
+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
3568
3602
}
3569
3603
Ok ( ( ) )
3570
3604
}
@@ -3606,15 +3640,15 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
3606
3640
3607
3641
sidebar. push_str ( "<li><a href=\" #implementors\" >Implementors</a></li>" ) ;
3608
3642
3609
- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar)
3643
+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar)
3610
3644
}
3611
3645
3612
3646
fn sidebar_primitive ( fmt : & mut fmt:: Formatter , it : & clean:: Item ,
3613
3647
_p : & clean:: PrimitiveType ) -> fmt:: Result {
3614
3648
let sidebar = sidebar_assoc_items ( it) ;
3615
3649
3616
3650
if !sidebar. is_empty ( ) {
3617
- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3651
+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
3618
3652
}
3619
3653
Ok ( ( ) )
3620
3654
}
@@ -3624,7 +3658,7 @@ fn sidebar_typedef(fmt: &mut fmt::Formatter, it: &clean::Item,
3624
3658
let sidebar = sidebar_assoc_items ( it) ;
3625
3659
3626
3660
if !sidebar. is_empty ( ) {
3627
- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3661
+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
3628
3662
}
3629
3663
Ok ( ( ) )
3630
3664
}
@@ -3641,7 +3675,7 @@ fn sidebar_union(fmt: &mut fmt::Formatter, it: &clean::Item,
3641
3675
sidebar. push_str ( & sidebar_assoc_items ( it) ) ;
3642
3676
3643
3677
if !sidebar. is_empty ( ) {
3644
- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3678
+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
3645
3679
}
3646
3680
Ok ( ( ) )
3647
3681
}
@@ -3657,7 +3691,7 @@ fn sidebar_enum(fmt: &mut fmt::Formatter, it: &clean::Item,
3657
3691
sidebar. push_str ( & sidebar_assoc_items ( it) ) ;
3658
3692
3659
3693
if !sidebar. is_empty ( ) {
3660
- write ! ( fmt, "<div class=\" block items\" ><ul>{}</ul> </div>" , sidebar) ?;
3694
+ write ! ( fmt, "<div class=\" block items\" >{} </div>" , sidebar) ?;
3661
3695
}
3662
3696
Ok ( ( ) )
3663
3697
}
0 commit comments