@@ -4480,15 +4480,17 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
44804480
44814481 {
44824482 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 ( ) ;
44894491 if !ret. is_empty ( ) {
44904492 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 ( "" ) ) ) ;
44924494 }
44934495 }
44944496
@@ -4512,40 +4514,47 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
45124514 impl_. inner_impl( ) . trait_. as_ref( ) . unwrap( ) ) ) ,
45134515 Escape ( & format!( "{:#}" , target) ) ) ) ;
45144516 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+ }
45224529 }
45234530 }
45244531 }
45254532 let format_impls = |impls : Vec < & Impl > | {
45264533 let mut links = FxHashSet :: default ( ) ;
45274534
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 ( "" )
45494558 } ;
45504559
45514560 let ( synthetic, concrete) : ( Vec < & Impl > , Vec < & Impl > ) = v
@@ -4647,29 +4656,29 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
46474656 }
46484657 } )
46494658 . 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 ,
46574668 }
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 ,
46684679 }
4669- _ => None ,
4670- }
4671- } )
4672- . collect :: < String > ( ) ;
4680+ } )
4681+ . collect :: < Vec < String > > ( ) ;
46734682
46744683 if !types. is_empty ( ) {
46754684 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,
46824691 consts) ) ;
46834692 }
46844693 if !required. is_empty ( ) {
4694+ required. sort ( ) ;
46854695 sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #required-methods\" >\
46864696 Required Methods</a><div class=\" sidebar-links\" >{}</div>",
4687- required) ) ;
4697+ required. join ( "" ) ) ) ;
46884698 }
46894699 if !provided. is_empty ( ) {
4700+ provided. sort ( ) ;
46904701 sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #provided-methods\" >\
46914702 Provided Methods</a><div class=\" sidebar-links\" >{}</div>",
4692- provided) ) ;
4703+ provided. join ( "" ) ) ) ;
46934704 }
46944705
46954706 let c = cache ( ) ;
46964707
46974708 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 ,
47074720 }
4708- _ => None ,
4709- }
4710- } )
4711- . collect :: < String > ( ) ;
4721+ } )
4722+ . collect :: < Vec < String > > ( ) ;
47124723 if !res. is_empty ( ) {
4724+ res. sort ( ) ;
47134725 sidebar. push_str ( & format ! ( "<a class=\" sidebar-title\" href=\" #foreign-impls\" >\
47144726 Implementations on Foreign Types</a><div \
47154727 class=\" sidebar-links\" >{}</div>",
4716- res) ) ;
4728+ res. join ( "" ) ) ) ;
47174729 }
47184730 }
47194731
0 commit comments