diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 4e1bbbbf59d..a95a13aac47 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -2500,6 +2500,7 @@ class DocSearch {
const sortResults = async(results, typeInfo, preferredCrate) => {
const userQuery = parsedQuery.userQuery;
const normalizedUserQuery = parsedQuery.userQuery.toLowerCase();
+ const isMixedCase = normalizedUserQuery !== userQuery;
const result_list = [];
for (const result of results.values()) {
result.item = this.searchIndex[result.id];
@@ -2511,10 +2512,12 @@ class DocSearch {
let a, b;
// sort by exact case-sensitive match
- a = (aaa.item.name !== userQuery);
- b = (bbb.item.name !== userQuery);
- if (a !== b) {
- return a - b;
+ if (isMixedCase) {
+ a = (aaa.item.name !== userQuery);
+ b = (bbb.item.name !== userQuery);
+ if (a !== b) {
+ return a - b;
+ }
}
// sort by exact match with regard to the last word (mismatch goes later)
diff --git a/tests/rustdoc-js-std/write.js b/tests/rustdoc-js-std/write.js
new file mode 100644
index 00000000000..4a9475102a5
--- /dev/null
+++ b/tests/rustdoc-js-std/write.js
@@ -0,0 +1,24 @@
+const EXPECTED = [
+ {
+ 'query': 'write',
+ 'others': [
+ { 'path': 'std::fmt', 'name': 'write' },
+ { 'path': 'std::fs', 'name': 'write' },
+ { 'path': 'std::ptr', 'name': 'write' },
+ { 'path': 'std::fmt', 'name': 'Write' },
+ { 'path': 'std::io', 'name': 'Write' },
+ { 'path': 'std::hash::Hasher', 'name': 'write' },
+ ],
+ },
+ {
+ 'query': 'Write',
+ 'others': [
+ { 'path': 'std::fmt', 'name': 'Write' },
+ { 'path': 'std::io', 'name': 'Write' },
+ { 'path': 'std::fmt', 'name': 'write' },
+ { 'path': 'std::fs', 'name': 'write' },
+ { 'path': 'std::ptr', 'name': 'write' },
+ { 'path': 'std::hash::Hasher', 'name': 'write' },
+ ],
+ },
+];
diff --git a/tests/rustdoc-js/case.js b/tests/rustdoc-js/case.js
new file mode 100644
index 00000000000..22b970eb139
--- /dev/null
+++ b/tests/rustdoc-js/case.js
@@ -0,0 +1,17 @@
+const EXPECTED = [
+ {
+ 'query': 'Foo',
+ 'others': [
+ { 'path': 'case', 'name': 'Foo', 'desc': 'Docs for Foo' },
+ { 'path': 'case', 'name': 'foo', 'desc': 'Docs for foo' },
+ ],
+ },
+ {
+ 'query': 'foo',
+ 'others': [
+ // https://github.com/rust-lang/rust/issues/133017
+ { 'path': 'case', 'name': 'Foo', 'desc': 'Docs for Foo' },
+ { 'path': 'case', 'name': 'foo', 'desc': 'Docs for foo' },
+ ],
+ },
+];
diff --git a/tests/rustdoc-js/case.rs b/tests/rustdoc-js/case.rs
new file mode 100644
index 00000000000..532edd55f1d
--- /dev/null
+++ b/tests/rustdoc-js/case.rs
@@ -0,0 +1,7 @@
+#![allow(nonstandard_style)]
+
+/// Docs for Foo
+pub struct Foo;
+
+/// Docs for foo
+pub struct foo;