about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbinarycat <binarycat@envs.net>2024-08-22 17:13:13 -0400
committerbinarycat <binarycat@envs.net>2024-08-23 13:05:24 -0400
commit4c5e888eb6846d4c777bd05cbc6af06a50faeb6a (patch)
tree70256db7d1a5d0728aeb7702a83340842ffd65df
parent5ad98b4026d5172f27615b105658bc8bfd677be8 (diff)
downloadrust-4c5e888eb6846d4c777bd05cbc6af06a50faeb6a.tar.gz
rust-4c5e888eb6846d4c777bd05cbc6af06a50faeb6a.zip
rustdoc: show exact case-sensitive matches first
fixes #119480
-rw-r--r--src/librustdoc/html/static/js/search.js8
-rw-r--r--tests/rustdoc-js-std/exact-case.js7
2 files changed, 15 insertions, 0 deletions
diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 3eb27ea087c..63f492d5ac1 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -1393,6 +1393,7 @@ function initSearch(rawSearchIndex) {
          */
         async function sortResults(results, isType, preferredCrate) {
             const userQuery = parsedQuery.userQuery;
+            const casedUserQuery = parsedQuery.original;
             const result_list = [];
             for (const result of results.values()) {
                 result.item = searchIndex[result.id];
@@ -1403,6 +1404,13 @@ function initSearch(rawSearchIndex) {
             result_list.sort((aaa, bbb) => {
                 let a, b;
 
+                // sort by exact case-sensitive match
+                a = (aaa.item.name !== casedUserQuery);
+                b = (bbb.item.name !== casedUserQuery);
+                if (a !== b) {
+                    return a - b;
+                }
+
                 // sort by exact match with regard to the last word (mismatch goes later)
                 a = (aaa.word !== userQuery);
                 b = (bbb.word !== userQuery);
diff --git a/tests/rustdoc-js-std/exact-case.js b/tests/rustdoc-js-std/exact-case.js
new file mode 100644
index 00000000000..d9faff22fff
--- /dev/null
+++ b/tests/rustdoc-js-std/exact-case.js
@@ -0,0 +1,7 @@
+const EXPECTED = {
+    'query': 'Copy',
+    'others': [
+        { 'path': 'std::marker', 'name': 'Copy' },
+        { 'path': 'std::fs', 'name': 'copy' },
+    ],
+}