Skip to content

Commit 2c9f1f5

Browse files
Rollup merge of rust-lang#58143 - GuillaumeGomez:sort-elements-in-sidebar, r=QuietMisdreavus
Sort elements in the sidebar Fixes rust-lang#57448. Not sorting fields or variants though. r? @QuietMisdreavus
2 parents f22c445 + c40fa32 commit 2c9f1f5

File tree

1 file changed

+84
-72
lines changed

1 file changed

+84
-72
lines changed

src/librustdoc/html/render.rs

+84-72
Original file line numberDiff line numberDiff line change
@@ -4480,15 +4480,17 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
44804480

44814481
{
44824482
let used_links_bor = Rc::new(RefCell::new(&mut used_links));
4483-
let ret = v.iter()
4484-
.filter(|i| i.inner_impl().trait_.is_none())
4485-
.flat_map(move |i| get_methods(i.inner_impl(),
4486-
false,
4487-
&mut used_links_bor.borrow_mut()))
4488-
.collect::<String>();
4483+
let mut ret = v.iter()
4484+
.filter(|i| i.inner_impl().trait_.is_none())
4485+
.flat_map(move |i| get_methods(i.inner_impl(),
4486+
false,
4487+
&mut used_links_bor.borrow_mut()))
4488+
.collect::<Vec<_>>();
4489+
// We want links' order to be reproducible so we don't use unstable sort.
4490+
ret.sort();
44894491
if !ret.is_empty() {
44904492
out.push_str(&format!("<a class=\"sidebar-title\" href=\"#methods\">Methods\
4491-
</a><div class=\"sidebar-links\">{}</div>", ret));
4493+
</a><div class=\"sidebar-links\">{}</div>", ret.join("")));
44924494
}
44934495
}
44944496

@@ -4512,40 +4514,47 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
45124514
impl_.inner_impl().trait_.as_ref().unwrap())),
45134515
Escape(&format!("{:#}", target))));
45144516
out.push_str("</a>");
4515-
let ret = impls.iter()
4516-
.filter(|i| i.inner_impl().trait_.is_none())
4517-
.flat_map(|i| get_methods(i.inner_impl(),
4518-
true,
4519-
&mut used_links))
4520-
.collect::<String>();
4521-
out.push_str(&format!("<div class=\"sidebar-links\">{}</div>", ret));
4517+
let mut ret = impls.iter()
4518+
.filter(|i| i.inner_impl().trait_.is_none())
4519+
.flat_map(|i| get_methods(i.inner_impl(),
4520+
true,
4521+
&mut used_links))
4522+
.collect::<Vec<_>>();
4523+
// We want links' order to be reproducible so we don't use unstable sort.
4524+
ret.sort();
4525+
if !ret.is_empty() {
4526+
out.push_str(&format!("<div class=\"sidebar-links\">{}</div>",
4527+
ret.join("")));
4528+
}
45224529
}
45234530
}
45244531
}
45254532
let format_impls = |impls: Vec<&Impl>| {
45264533
let mut links = FxHashSet::default();
45274534

4528-
impls.iter()
4529-
.filter_map(|i| {
4530-
let is_negative_impl = is_negative_impl(i.inner_impl());
4531-
if let Some(ref i) = i.inner_impl().trait_ {
4532-
let i_display = format!("{:#}", i);
4533-
let out = Escape(&i_display);
4534-
let encoded = small_url_encode(&format!("{:#}", i));
4535-
let generated = format!("<a href=\"#impl-{}\">{}{}</a>",
4536-
encoded,
4537-
if is_negative_impl { "!" } else { "" },
4538-
out);
4539-
if links.insert(generated.clone()) {
4540-
Some(generated)
4541-
} else {
4542-
None
4543-
}
4544-
} else {
4545-
None
4546-
}
4547-
})
4548-
.collect::<String>()
4535+
let mut ret = impls.iter()
4536+
.filter_map(|i| {
4537+
let is_negative_impl = is_negative_impl(i.inner_impl());
4538+
if let Some(ref i) = i.inner_impl().trait_ {
4539+
let i_display = format!("{:#}", i);
4540+
let out = Escape(&i_display);
4541+
let encoded = small_url_encode(&format!("{:#}", i));
4542+
let generated = format!("<a href=\"#impl-{}\">{}{}</a>",
4543+
encoded,
4544+
if is_negative_impl { "!" } else { "" },
4545+
out);
4546+
if links.insert(generated.clone()) {
4547+
Some(generated)
4548+
} else {
4549+
None
4550+
}
4551+
} else {
4552+
None
4553+
}
4554+
})
4555+
.collect::<Vec<String>>();
4556+
ret.sort();
4557+
ret.join("")
45494558
};
45504559

45514560
let (synthetic, concrete): (Vec<&Impl>, Vec<&Impl>) = v
@@ -4647,29 +4656,29 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
46474656
}
46484657
})
46494658
.collect::<String>();
4650-
let required = t.items
4651-
.iter()
4652-
.filter_map(|m| {
4653-
match m.name {
4654-
Some(ref name) if m.is_ty_method() => {
4655-
Some(format!("<a href=\"#tymethod.{name}\">{name}</a>",
4656-
name=name))
4659+
let mut required = t.items
4660+
.iter()
4661+
.filter_map(|m| {
4662+
match m.name {
4663+
Some(ref name) if m.is_ty_method() => {
4664+
Some(format!("<a href=\"#tymethod.{name}\">{name}</a>",
4665+
name=name))
4666+
}
4667+
_ => None,
46574668
}
4658-
_ => None,
4659-
}
4660-
})
4661-
.collect::<String>();
4662-
let provided = t.items
4663-
.iter()
4664-
.filter_map(|m| {
4665-
match m.name {
4666-
Some(ref name) if m.is_method() => {
4667-
Some(format!("<a href=\"#method.{name}\">{name}</a>", name=name))
4669+
})
4670+
.collect::<Vec<String>>();
4671+
let mut provided = t.items
4672+
.iter()
4673+
.filter_map(|m| {
4674+
match m.name {
4675+
Some(ref name) if m.is_method() => {
4676+
Some(format!("<a href=\"#method.{0}\">{0}</a>", name))
4677+
}
4678+
_ => None,
46684679
}
4669-
_ => None,
4670-
}
4671-
})
4672-
.collect::<String>();
4680+
})
4681+
.collect::<Vec<String>>();
46734682

46744683
if !types.is_empty() {
46754684
sidebar.push_str(&format!("<a class=\"sidebar-title\" href=\"#associated-types\">\
@@ -4682,38 +4691,41 @@ fn sidebar_trait(fmt: &mut fmt::Formatter, it: &clean::Item,
46824691
consts));
46834692
}
46844693
if !required.is_empty() {
4694+
required.sort();
46854695
sidebar.push_str(&format!("<a class=\"sidebar-title\" href=\"#required-methods\">\
46864696
Required Methods</a><div class=\"sidebar-links\">{}</div>",
4687-
required));
4697+
required.join("")));
46884698
}
46894699
if !provided.is_empty() {
4700+
provided.sort();
46904701
sidebar.push_str(&format!("<a class=\"sidebar-title\" href=\"#provided-methods\">\
46914702
Provided Methods</a><div class=\"sidebar-links\">{}</div>",
4692-
provided));
4703+
provided.join("")));
46934704
}
46944705

46954706
let c = cache();
46964707

46974708
if let Some(implementors) = c.implementors.get(&it.def_id) {
4698-
let res = implementors.iter()
4699-
.filter(|i| i.inner_impl().for_.def_id()
4700-
.map_or(false, |d| !c.paths.contains_key(&d)))
4701-
.filter_map(|i| {
4702-
match extract_for_impl_name(&i.impl_item) {
4703-
Some((ref name, ref url)) => {
4704-
Some(format!("<a href=\"#impl-{}\">{}</a>",
4705-
small_url_encode(url),
4706-
Escape(name)))
4709+
let mut res = implementors.iter()
4710+
.filter(|i| i.inner_impl().for_.def_id()
4711+
.map_or(false, |d| !c.paths.contains_key(&d)))
4712+
.filter_map(|i| {
4713+
match extract_for_impl_name(&i.impl_item) {
4714+
Some((ref name, ref url)) => {
4715+
Some(format!("<a href=\"#impl-{}\">{}</a>",
4716+
small_url_encode(url),
4717+
Escape(name)))
4718+
}
4719+
_ => None,
47074720
}
4708-
_ => None,
4709-
}
4710-
})
4711-
.collect::<String>();
4721+
})
4722+
.collect::<Vec<String>>();
47124723
if !res.is_empty() {
4724+
res.sort();
47134725
sidebar.push_str(&format!("<a class=\"sidebar-title\" href=\"#foreign-impls\">\
47144726
Implementations on Foreign Types</a><div \
47154727
class=\"sidebar-links\">{}</div>",
4716-
res));
4728+
res.join("")));
47174729
}
47184730
}
47194731

0 commit comments

Comments
 (0)