rustdoc: Optimize impl sorting during rendering
This commit is contained in:
parent
13b7aa4d7f
commit
4d55affc12
1 changed files with 20 additions and 7 deletions
|
@ -880,8 +880,8 @@ fn item_trait(w: &mut Buffer, cx: &mut Context<'_>, it: &clean::Item, t: &clean:
|
||||||
let (mut synthetic, mut concrete): (Vec<&&Impl>, Vec<&&Impl>) =
|
let (mut synthetic, mut concrete): (Vec<&&Impl>, Vec<&&Impl>) =
|
||||||
local.iter().partition(|i| i.inner_impl().kind.is_auto());
|
local.iter().partition(|i| i.inner_impl().kind.is_auto());
|
||||||
|
|
||||||
synthetic.sort_by(|a, b| compare_impl(a, b, cx));
|
synthetic.sort_by_cached_key(|i| ImplString::new(i, cx));
|
||||||
concrete.sort_by(|a, b| compare_impl(a, b, cx));
|
concrete.sort_by_cached_key(|i| ImplString::new(i, cx));
|
||||||
|
|
||||||
if !foreign.is_empty() {
|
if !foreign.is_empty() {
|
||||||
write_small_section_header(w, "foreign-impls", "Implementations on Foreign Types", "");
|
write_small_section_header(w, "foreign-impls", "Implementations on Foreign Types", "");
|
||||||
|
@ -1597,12 +1597,25 @@ where
|
||||||
w.write_str("</code></pre>");
|
w.write_str("</code></pre>");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compare_impl<'a, 'b>(lhs: &'a &&Impl, rhs: &'b &&Impl, cx: &Context<'_>) -> Ordering {
|
#[derive(PartialEq, Eq)]
|
||||||
let lhss = format!("{}", lhs.inner_impl().print(false, cx));
|
struct ImplString(String);
|
||||||
let rhss = format!("{}", rhs.inner_impl().print(false, cx));
|
|
||||||
|
|
||||||
// lhs and rhs are formatted as HTML, which may be unnecessary
|
impl ImplString {
|
||||||
compare_names(&lhss, &rhss)
|
fn new(i: &Impl, cx: &Context<'_>) -> ImplString {
|
||||||
|
ImplString(format!("{}", i.inner_impl().print(false, cx)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PartialOrd for ImplString {
|
||||||
|
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||||
|
Some(Ord::cmp(self, other))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Ord for ImplString {
|
||||||
|
fn cmp(&self, other: &Self) -> Ordering {
|
||||||
|
compare_names(&self.0, &other.0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_implementor(
|
fn render_implementor(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue