From 9e3e421ab3203387836c273dca69b9d77f85d486 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 8 Dec 2019 13:56:26 +0100 Subject: [PATCH] Sort auto trait and blanket implementations display --- src/librustdoc/html/format.rs | 11 +++++++++++ src/librustdoc/html/render.rs | 23 +++++++++++++++++------ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 4cde868201e..fd620d467de 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -63,6 +63,13 @@ impl Buffer { } } + crate fn new() -> Buffer { + Buffer { + for_html: false, + buffer: String::new(), + } + } + crate fn is_empty(&self) -> bool { self.buffer.is_empty() } @@ -106,6 +113,10 @@ impl Buffer { write!(self, "{:#}", t); } } + + crate fn is_for_html(&self) -> bool { + self.for_html + } } /// Wrapper struct for properly emitting a function or method declaration. diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index e245764b302..86e5efbd7b3 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -2282,12 +2282,23 @@ fn render_implementor(cx: &Context, implementor: &Impl, w: &mut Buffer, fn render_impls(cx: &Context, w: &mut Buffer, traits: &[&&Impl], containing_item: &clean::Item) { - for i in traits { - let did = i.trait_did().unwrap(); - let assoc_link = AssocItemLink::GotoSource(did, &i.inner_impl().provided_trait_methods); - render_impl(w, cx, i, assoc_link, - RenderMode::Normal, containing_item.stable_since(), true, None, false, true); - } + let mut impls = traits.iter() + .map(|i| { + let did = i.trait_did().unwrap(); + let assoc_link = AssocItemLink::GotoSource(did, &i.inner_impl().provided_trait_methods); + let mut buffer = if w.is_for_html() { + Buffer::html() + } else { + Buffer::new() + }; + render_impl(&mut buffer, cx, i, assoc_link, + RenderMode::Normal, containing_item.stable_since(), + true, None, false, true); + buffer.into_inner() + }) + .collect::>(); + impls.sort(); + w.write_str(&impls.join("")); } fn bounds(t_bounds: &[clean::GenericBound], trait_alias: bool) -> String {