",
+ "{}
{impls}
",
write_impl_section_heading("Auto Trait Implementations", "synthetic-implementations",)
)?;
- render_impls(cx, &mut w, auto_trait_impls, containing_item, false)?;
- w.write_str("
")?;
}
if !blanket_impls.is_empty() {
+ let impls = render_impls(cx, blanket_impls, containing_item, false);
write!(
w,
- "{}",
+ "{}
{impls}
",
write_impl_section_heading("Blanket Implementations", "blanket-implementations")
)?;
- render_impls(cx, &mut w, blanket_impls, containing_item, false)?;
- w.write_str("
")?;
}
+
Ok(())
}
@@ -1588,14 +1588,7 @@ fn render_assoc_items_inner(
let (blanket_impls, concrete_impls): (Vec<&Impl>, _) =
trait_impls.into_iter().partition(|t| t.inner_impl().kind.is_blanket());
- render_all_impls(
- w,
- cx,
- containing_item,
- &concrete_impls,
- &auto_trait_impls,
- &blanket_impls,
- )?;
+ render_all_impls(w, cx, containing_item, concrete_impls, auto_trait_impls, blanket_impls)?;
}
Ok(())
}
diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs
index 8385e691ed385..7469b08b4b424 100644
--- a/src/librustdoc/html/render/print_item.rs
+++ b/src/librustdoc/html/render/print_item.rs
@@ -32,8 +32,8 @@ use crate::formats::item_type::ItemType;
use crate::html::escape::{Escape, EscapeBodyTextWithWbr};
use crate::html::format::{
Ending, PrintWithSpace, full_print_fn_decl, print_abi_with_space, print_constness_with_space,
- print_generic_bound, print_generics, print_impl, print_import, print_type, print_where_clause,
- visibility_print_with_space,
+ print_generic_bound, print_generics, print_impl, print_import, print_path, print_type,
+ print_where_clause, visibility_print_with_space,
};
use crate::html::markdown::{HeadingOffset, MarkdownSummaryLine};
use crate::html::render::sidebar::filters;
@@ -1016,9 +1016,9 @@ fn item_trait(cx: &Context<'_>, it: &clean::Item, t: &clean::Trait) -> impl fmt:
let (mut synthetic, mut concrete): (Vec<&&Impl>, Vec<&&Impl>) =
local.iter().partition(|i| i.inner_impl().kind.is_auto());
- synthetic.sort_by_cached_key(|i| ImplString::new(i, cx));
- concrete.sort_by_cached_key(|i| ImplString::new(i, cx));
- foreign.sort_by_cached_key(|i| ImplString::new(i, cx));
+ synthetic.sort_by_cached_key(|i| ImplString::new_impl(i, cx));
+ concrete.sort_by_cached_key(|i| ImplString::new_impl(i, cx));
+ foreign.sort_by_cached_key(|i| ImplString::new_impl(i, cx));
if !foreign.is_empty() {
write!(
@@ -1969,7 +1969,7 @@ fn item_primitive(cx: &Context<'_>, it: &clean::Item) -> impl fmt::Display {
let (concrete, synthetic, blanket_impl) =
get_filtered_impls_for_reference(&cx.shared, it);
- render_all_impls(w, cx, it, &concrete, &synthetic, &blanket_impl)
+ render_all_impls(w, cx, it, concrete, synthetic, blanket_impl)
}
})
}
@@ -2346,16 +2346,21 @@ where
}
#[derive(PartialEq, Eq)]
-struct ImplString {
+pub(super) struct ImplString {
// Plain text (not HTML text) because this is only used for sorting purposes, and the plain
// text is much shorter and thus faster to compare.
cmp_text: String,
}
impl ImplString {
- fn new(i: &Impl, cx: &Context<'_>) -> ImplString {
+ fn new_impl(i: &Impl, cx: &Context<'_>) -> Self {
let impl_ = i.inner_impl();
- ImplString { cmp_text: format!("{:#}", print_impl(impl_, false, cx)) }
+ Self { cmp_text: format!("{:#}", print_impl(impl_, false, cx)) }
+ }
+
+ pub(super) fn new_path(i: &Impl, cx: &Context<'_>) -> Option