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