diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs
index 4cde868201eef..fd620d467de48 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 e245764b30209..86e5efbd7b3a4 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 {