From c40fa3271a939ee34662482052be64929978ca6a Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 4 Feb 2019 12:38:26 +0100 Subject: [PATCH] sort elements in the sidebar --- src/librustdoc/html/render.rs | 156 ++++++++++++++++++---------------- 1 file changed, 84 insertions(+), 72 deletions(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 86fb51419c2..c4c3b635b59 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -4470,15 +4470,17 @@ fn sidebar_assoc_items(it: &clean::Item) -> String { { let used_links_bor = Rc::new(RefCell::new(&mut used_links)); - let ret = v.iter() - .filter(|i| i.inner_impl().trait_.is_none()) - .flat_map(move |i| get_methods(i.inner_impl(), - false, - &mut used_links_bor.borrow_mut())) - .collect::(); + let mut ret = v.iter() + .filter(|i| i.inner_impl().trait_.is_none()) + .flat_map(move |i| get_methods(i.inner_impl(), + false, + &mut used_links_bor.borrow_mut())) + .collect::>(); + // We want links' order to be reproducible so we don't use unstable sort. + ret.sort(); if !ret.is_empty() { out.push_str(&format!("Methods\ -
{}
", ret)); +
{}
", ret.join(""))); } } @@ -4502,40 +4504,47 @@ fn sidebar_assoc_items(it: &clean::Item) -> String { impl_.inner_impl().trait_.as_ref().unwrap())), Escape(&format!("{:#}", target)))); out.push_str(""); - let ret = impls.iter() - .filter(|i| i.inner_impl().trait_.is_none()) - .flat_map(|i| get_methods(i.inner_impl(), - true, - &mut used_links)) - .collect::(); - out.push_str(&format!("
{}
", ret)); + let mut ret = impls.iter() + .filter(|i| i.inner_impl().trait_.is_none()) + .flat_map(|i| get_methods(i.inner_impl(), + true, + &mut used_links)) + .collect::>(); + // We want links' order to be reproducible so we don't use unstable sort. + ret.sort(); + if !ret.is_empty() { + out.push_str(&format!("
{}
", + ret.join(""))); + } } } } let format_impls = |impls: Vec<&Impl>| { let mut links = FxHashSet::default(); - impls.iter() - .filter_map(|i| { - let is_negative_impl = is_negative_impl(i.inner_impl()); - if let Some(ref i) = i.inner_impl().trait_ { - let i_display = format!("{:#}", i); - let out = Escape(&i_display); - let encoded = small_url_encode(&format!("{:#}", i)); - let generated = format!("{}{}", - encoded, - if is_negative_impl { "!" } else { "" }, - out); - if links.insert(generated.clone()) { - Some(generated) - } else { - None - } - } else { - None - } - }) - .collect::() + let mut ret = impls.iter() + .filter_map(|i| { + let is_negative_impl = is_negative_impl(i.inner_impl()); + if let Some(ref i) = i.inner_impl().trait_ { + let i_display = format!("{:#}", i); + let out = Escape(&i_display); + let encoded = small_url_encode(&format!("{:#}", i)); + let generated = format!("{}{}", + encoded, + if is_negative_impl { "!" } else { "" }, + out); + if links.insert(generated.clone()) { + Some(generated) + } else { + None + } + } else { + None + } + }) + .collect::>(); + ret.sort(); + ret.join("") }; let (synthetic, concrete): (Vec<&Impl>, Vec<&Impl>) = v @@ -4637,29 +4646,29 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item, } }) .collect::(); - let required = t.items - .iter() - .filter_map(|m| { - match m.name { - Some(ref name) if m.is_ty_method() => { - Some(format!("{name}", - name=name)) + let mut required = t.items + .iter() + .filter_map(|m| { + match m.name { + Some(ref name) if m.is_ty_method() => { + Some(format!("{name}", + name=name)) + } + _ => None, } - _ => None, - } - }) - .collect::(); - let provided = t.items - .iter() - .filter_map(|m| { - match m.name { - Some(ref name) if m.is_method() => { - Some(format!("{name}", name=name)) + }) + .collect::>(); + let mut provided = t.items + .iter() + .filter_map(|m| { + match m.name { + Some(ref name) if m.is_method() => { + Some(format!("{0}", name)) + } + _ => None, } - _ => None, - } - }) - .collect::(); + }) + .collect::>(); if !types.is_empty() { sidebar.push_str(&format!("\ @@ -4672,38 +4681,41 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item, consts)); } if !required.is_empty() { + required.sort(); sidebar.push_str(&format!("\ Required Methods
{}
", - required)); + required.join(""))); } if !provided.is_empty() { + provided.sort(); sidebar.push_str(&format!("\ Provided Methods
{}
", - provided)); + provided.join(""))); } let c = cache(); if let Some(implementors) = c.implementors.get(&it.def_id) { - let res = implementors.iter() - .filter(|i| i.inner_impl().for_.def_id() - .map_or(false, |d| !c.paths.contains_key(&d))) - .filter_map(|i| { - match extract_for_impl_name(&i.impl_item) { - Some((ref name, ref url)) => { - Some(format!("{}", - small_url_encode(url), - Escape(name))) + let mut res = implementors.iter() + .filter(|i| i.inner_impl().for_.def_id() + .map_or(false, |d| !c.paths.contains_key(&d))) + .filter_map(|i| { + match extract_for_impl_name(&i.impl_item) { + Some((ref name, ref url)) => { + Some(format!("{}", + small_url_encode(url), + Escape(name))) + } + _ => None, } - _ => None, - } - }) - .collect::(); + }) + .collect::>(); if !res.is_empty() { + res.sort(); sidebar.push_str(&format!("\ Implementations on Foreign Types
{}
", - res)); + res.join(""))); } } -- 2.44.0