@@ -4470,15 +4470,17 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
4470
4470
4471
4471
{
4472
4472
let used_links_bor = Rc :: new ( RefCell :: new ( & mut used_links) ) ;
4473
- let ret = v. iter ( )
4474
- . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
4475
- . flat_map ( move |i| get_methods ( i. inner_impl ( ) ,
4476
- false ,
4477
- & mut used_links_bor. borrow_mut ( ) ) )
4478
- . collect :: < String > ( ) ;
4473
+ let mut ret = v. iter ( )
4474
+ . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
4475
+ . flat_map ( move |i| get_methods ( i. inner_impl ( ) ,
4476
+ false ,
4477
+ & mut used_links_bor. borrow_mut ( ) ) )
4478
+ . collect :: < Vec < _ > > ( ) ;
4479
+ // We want links' order to be reproducible so we don't use unstable sort.
4480
+ ret. sort ( ) ;
4479
4481
if !ret. is_empty ( ) {
4480
4482
out. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #methods\" >Methods\
4481
- </a><div class=\" sidebar-links\" >{}</div>", ret) ) ;
4483
+ </a><div class=\" sidebar-links\" >{}</div>", ret. join ( "" ) ) ) ;
4482
4484
}
4483
4485
}
4484
4486
@@ -4502,40 +4504,47 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
4502
4504
impl_. inner_impl( ) . trait_. as_ref( ) . unwrap( ) ) ) ,
4503
4505
Escape ( & format!( "{:#}" , target) ) ) ) ;
4504
4506
out. push_str ( "</a>" ) ;
4505
- let ret = impls. iter ( )
4506
- . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
4507
- . flat_map ( |i| get_methods ( i. inner_impl ( ) ,
4508
- true ,
4509
- & mut used_links) )
4510
- . collect :: < String > ( ) ;
4511
- out. push_str ( & format ! ( "<div class=\" sidebar-links\" >{}</div>" , ret) ) ;
4507
+ let mut ret = impls. iter ( )
4508
+ . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
4509
+ . flat_map ( |i| get_methods ( i. inner_impl ( ) ,
4510
+ true ,
4511
+ & mut used_links) )
4512
+ . collect :: < Vec < _ > > ( ) ;
4513
+ // We want links' order to be reproducible so we don't use unstable sort.
4514
+ ret. sort ( ) ;
4515
+ if !ret. is_empty ( ) {
4516
+ out. push_str ( & format ! ( "<div class=\" sidebar-links\" >{}</div>" ,
4517
+ ret. join( "" ) ) ) ;
4518
+ }
4512
4519
}
4513
4520
}
4514
4521
}
4515
4522
let format_impls = |impls : Vec < & Impl > | {
4516
4523
let mut links = FxHashSet :: default ( ) ;
4517
4524
4518
- impls. iter ( )
4519
- . filter_map ( |i| {
4520
- let is_negative_impl = is_negative_impl ( i. inner_impl ( ) ) ;
4521
- if let Some ( ref i) = i. inner_impl ( ) . trait_ {
4522
- let i_display = format ! ( "{:#}" , i) ;
4523
- let out = Escape ( & i_display) ;
4524
- let encoded = small_url_encode ( & format ! ( "{:#}" , i) ) ;
4525
- let generated = format ! ( "<a href=\" #impl-{}\" >{}{}</a>" ,
4526
- encoded,
4527
- if is_negative_impl { "!" } else { "" } ,
4528
- out) ;
4529
- if links. insert ( generated. clone ( ) ) {
4530
- Some ( generated)
4531
- } else {
4532
- None
4533
- }
4534
- } else {
4535
- None
4536
- }
4537
- } )
4538
- . collect :: < String > ( )
4525
+ let mut ret = impls. iter ( )
4526
+ . filter_map ( |i| {
4527
+ let is_negative_impl = is_negative_impl ( i. inner_impl ( ) ) ;
4528
+ if let Some ( ref i) = i. inner_impl ( ) . trait_ {
4529
+ let i_display = format ! ( "{:#}" , i) ;
4530
+ let out = Escape ( & i_display) ;
4531
+ let encoded = small_url_encode ( & format ! ( "{:#}" , i) ) ;
4532
+ let generated = format ! ( "<a href=\" #impl-{}\" >{}{}</a>" ,
4533
+ encoded,
4534
+ if is_negative_impl { "!" } else { "" } ,
4535
+ out) ;
4536
+ if links. insert ( generated. clone ( ) ) {
4537
+ Some ( generated)
4538
+ } else {
4539
+ None
4540
+ }
4541
+ } else {
4542
+ None
4543
+ }
4544
+ } )
4545
+ . collect :: < Vec < String > > ( ) ;
4546
+ ret. sort ( ) ;
4547
+ ret. join ( "" )
4539
4548
} ;
4540
4549
4541
4550
let ( synthetic, concrete) : ( Vec < & Impl > , Vec < & Impl > ) = v
@@ -4637,29 +4646,29 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
4637
4646
}
4638
4647
} )
4639
4648
. collect :: < String > ( ) ;
4640
- let required = t. items
4641
- . iter ( )
4642
- . filter_map ( |m| {
4643
- match m. name {
4644
- Some ( ref name) if m. is_ty_method ( ) => {
4645
- Some ( format ! ( "<a href=\" #tymethod.{name}\" >{name}</a>" ,
4646
- name=name) )
4649
+ let mut required = t. items
4650
+ . iter ( )
4651
+ . filter_map ( |m| {
4652
+ match m. name {
4653
+ Some ( ref name) if m. is_ty_method ( ) => {
4654
+ Some ( format ! ( "<a href=\" #tymethod.{name}\" >{name}</a>" ,
4655
+ name=name) )
4656
+ }
4657
+ _ => None ,
4647
4658
}
4648
- _ => None ,
4649
- }
4650
- } )
4651
- . collect :: < String > ( ) ;
4652
- let provided = t . items
4653
- . iter ( )
4654
- . filter_map ( |m| {
4655
- match m . name {
4656
- Some ( ref name ) if m . is_method ( ) => {
4657
- Some ( format ! ( "<a href= \" #method.{name} \" >{name}</a>" , name=name ) )
4659
+ } )
4660
+ . collect :: < Vec < String > > ( ) ;
4661
+ let mut provided = t . items
4662
+ . iter ( )
4663
+ . filter_map ( |m| {
4664
+ match m . name {
4665
+ Some ( ref name ) if m . is_method ( ) => {
4666
+ Some ( format ! ( "<a href= \" #method.{0} \" >{0}</a>" , name ) )
4667
+ }
4668
+ _ => None ,
4658
4669
}
4659
- _ => None ,
4660
- }
4661
- } )
4662
- . collect :: < String > ( ) ;
4670
+ } )
4671
+ . collect :: < Vec < String > > ( ) ;
4663
4672
4664
4673
if !types. is_empty ( ) {
4665
4674
sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #associated-types\" >\
@@ -4672,38 +4681,41 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
4672
4681
consts) ) ;
4673
4682
}
4674
4683
if !required. is_empty ( ) {
4684
+ required. sort ( ) ;
4675
4685
sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #required-methods\" >\
4676
4686
Required Methods</a><div class=\" sidebar-links\" >{}</div>",
4677
- required) ) ;
4687
+ required. join ( "" ) ) ) ;
4678
4688
}
4679
4689
if !provided. is_empty ( ) {
4690
+ provided. sort ( ) ;
4680
4691
sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #provided-methods\" >\
4681
4692
Provided Methods</a><div class=\" sidebar-links\" >{}</div>",
4682
- provided) ) ;
4693
+ provided. join ( "" ) ) ) ;
4683
4694
}
4684
4695
4685
4696
let c = cache ( ) ;
4686
4697
4687
4698
if let Some ( implementors) = c. implementors . get ( & it. def_id ) {
4688
- let res = implementors. iter ( )
4689
- . filter ( |i| i. inner_impl ( ) . for_ . def_id ( )
4690
- . map_or ( false , |d| !c. paths . contains_key ( & d) ) )
4691
- . filter_map ( |i| {
4692
- match extract_for_impl_name ( & i. impl_item ) {
4693
- Some ( ( ref name, ref url) ) => {
4694
- Some ( format ! ( "<a href=\" #impl-{}\" >{}</a>" ,
4695
- small_url_encode( url) ,
4696
- Escape ( name) ) )
4699
+ let mut res = implementors. iter ( )
4700
+ . filter ( |i| i. inner_impl ( ) . for_ . def_id ( )
4701
+ . map_or ( false , |d| !c. paths . contains_key ( & d) ) )
4702
+ . filter_map ( |i| {
4703
+ match extract_for_impl_name ( & i. impl_item ) {
4704
+ Some ( ( ref name, ref url) ) => {
4705
+ Some ( format ! ( "<a href=\" #impl-{}\" >{}</a>" ,
4706
+ small_url_encode( url) ,
4707
+ Escape ( name) ) )
4708
+ }
4709
+ _ => None ,
4697
4710
}
4698
- _ => None ,
4699
- }
4700
- } )
4701
- . collect :: < String > ( ) ;
4711
+ } )
4712
+ . collect :: < Vec < String > > ( ) ;
4702
4713
if !res. is_empty ( ) {
4714
+ res. sort ( ) ;
4703
4715
sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #foreign-impls\" >\
4704
4716
Implementations on Foreign Types</a><div \
4705
4717
class=\" sidebar-links\" >{}</div>",
4706
- res) ) ;
4718
+ res. join ( "" ) ) ) ;
4707
4719
}
4708
4720
}
4709
4721
0 commit comments