diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index 128eac8cb0a51..05d30187aa853 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -2122,22 +2122,22 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean
items: &[clean::Item],
before: &str,
filter: impl Fn(&clean::Item) -> bool,
- write: impl Fn(&mut Buffer, &Symbol),
+ write: impl Fn(&mut Buffer, &str),
after: &str,
) {
let mut items = items
.iter()
.filter_map(|m| match m.name {
- Some(ref name) if filter(m) => Some(name),
+ Some(ref name) if filter(m) => Some(name.as_str()),
_ => None,
})
.collect::>();
if !items.is_empty() {
- items.sort();
+ items.sort_unstable();
out.push_str(before);
for item in items.into_iter() {
- write(out, item);
+ write(out, &item);
}
out.push_str(after);
}
diff --git a/src/test/rustdoc-gui/lib.rs b/src/test/rustdoc-gui/lib.rs
index 15d8dcc6e8444..c5d9f0c5a6806 100644
--- a/src/test/rustdoc-gui/lib.rs
+++ b/src/test/rustdoc-gui/lib.rs
@@ -47,14 +47,19 @@ pub fn some_more_function(t: &T) -> String {
/// Woohoo! A trait!
pub trait AnotherOne {
+ /// Some func 3.
+ fn func3();
+
/// Some func 1.
fn func1();
+ fn another();
+ fn why_not();
+
/// Some func 2.
fn func2();
- /// Some func 3.
- fn func3();
+ fn hello();
}
/// Check for "i" signs in lists!
diff --git a/src/test/rustdoc-gui/trait-sidebar-item-order.goml b/src/test/rustdoc-gui/trait-sidebar-item-order.goml
new file mode 100644
index 0000000000000..914486e1c281d
--- /dev/null
+++ b/src/test/rustdoc-gui/trait-sidebar-item-order.goml
@@ -0,0 +1,7 @@
+goto: file://|DOC_PATH|/trait.AnotherOne.html
+assert: (".sidebar-links a:nth-of-type(1)", "another")
+assert: (".sidebar-links a:nth-of-type(2)", "func1")
+assert: (".sidebar-links a:nth-of-type(3)", "func2")
+assert: (".sidebar-links a:nth-of-type(4)", "func3")
+assert: (".sidebar-links a:nth-of-type(5)", "hello")
+assert: (".sidebar-links a:nth-of-type(6)", "why_not")