@@ -4470,15 +4470,17 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
44704470
44714471 {
44724472 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 ( ) ;
44794481 if !ret. is_empty ( ) {
44804482 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 ( "" ) ) ) ;
44824484 }
44834485 }
44844486
@@ -4502,40 +4504,47 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
45024504 impl_. inner_impl( ) . trait_. as_ref( ) . unwrap( ) ) ) ,
45034505 Escape ( & format!( "{:#}" , target) ) ) ) ;
45044506 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+ }
45124519 }
45134520 }
45144521 }
45154522 let format_impls = |impls : Vec < & Impl > | {
45164523 let mut links = FxHashSet :: default ( ) ;
45174524
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 ( "" )
45394548 } ;
45404549
45414550 let ( synthetic, concrete) : ( Vec < & Impl > , Vec < & Impl > ) = v
@@ -4637,29 +4646,29 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
46374646 }
46384647 } )
46394648 . 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 ,
46474658 }
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 ,
46584669 }
4659- _ => None ,
4660- }
4661- } )
4662- . collect :: < String > ( ) ;
4670+ } )
4671+ . collect :: < Vec < String > > ( ) ;
46634672
46644673 if !types. is_empty ( ) {
46654674 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,
46724681 consts) ) ;
46734682 }
46744683 if !required. is_empty ( ) {
4684+ required. sort ( ) ;
46754685 sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #required-methods\" >\
46764686 Required Methods</a><div class=\" sidebar-links\" >{}</div>",
4677- required) ) ;
4687+ required. join ( "" ) ) ) ;
46784688 }
46794689 if !provided. is_empty ( ) {
4690+ provided. sort ( ) ;
46804691 sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #provided-methods\" >\
46814692 Provided Methods</a><div class=\" sidebar-links\" >{}</div>",
4682- provided) ) ;
4693+ provided. join ( "" ) ) ) ;
46834694 }
46844695
46854696 let c = cache ( ) ;
46864697
46874698 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 ,
46974710 }
4698- _ => None ,
4699- }
4700- } )
4701- . collect :: < String > ( ) ;
4711+ } )
4712+ . collect :: < Vec < String > > ( ) ;
47024713 if !res. is_empty ( ) {
4714+ res. sort ( ) ;
47034715 sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #foreign-impls\" >\
47044716 Implementations on Foreign Types</a><div \
47054717 class=\" sidebar-links\" >{}</div>",
4706- res) ) ;
4718+ res. join ( "" ) ) ) ;
47074719 }
47084720 }
47094721
0 commit comments