about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <jtitor@2k36.org>2022-05-11 00:09:35 +0900
committerGitHub <noreply@github.com>2022-05-11 00:09:35 +0900
commitd34915f691ca78596f57fcb73bbc9de08675d65a (patch)
tree427f33b804831917de064889cf9cbe7477b04a4b
parent7274447c36949bb63bef0a78bc23f8842d8c7320 (diff)
parenta9a90d450d11a06dff8bc49a89352e733e904fcf (diff)
downloadrust-d34915f691ca78596f57fcb73bbc9de08675d65a.tar.gz
rust-d34915f691ca78596f57fcb73bbc9de08675d65a.zip
Rollup merge of #96879 - notriddle:notriddle/search-ranking, r=GuillaumeGomez
rustdoc: search result ranking fix

# Before

![image](https://user-images.githubusercontent.com/1593513/167477286-91049761-67f9-4a73-8fb7-09dbb19ca76c.png)

# After

![image](https://user-images.githubusercontent.com/1593513/167477345-6733bc0f-4bb2-4625-9f7f-094031e36414.png)
-rw-r--r--src/librustdoc/html/static/js/search.js2
-rw-r--r--src/test/rustdoc-js-std/path-ordering.js12
-rw-r--r--src/test/rustdoc-js/path-ordering.js14
-rw-r--r--src/test/rustdoc-js/path-ordering.rs9
4 files changed, 36 insertions, 1 deletions
diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 677e9b5f03a..7754d626e20 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -1323,7 +1323,6 @@ window.initSearch = rawSearchIndex => {
                 }
             }
             lev = levenshtein(searchWord, elem.pathLast);
-            lev += lev_add;
             if (lev > 0 && elem.pathLast.length > 2 && searchWord.indexOf(elem.pathLast) > -1)
             {
                 if (elem.pathLast.length < 6) {
@@ -1332,6 +1331,7 @@ window.initSearch = rawSearchIndex => {
                     lev = 0;
                 }
             }
+            lev += lev_add;
             if (lev > MAX_LEV_DISTANCE) {
                 return;
             } else if (index !== -1 && elem.fullPath.length < 2) {
diff --git a/src/test/rustdoc-js-std/path-ordering.js b/src/test/rustdoc-js-std/path-ordering.js
new file mode 100644
index 00000000000..7dcdd402312
--- /dev/null
+++ b/src/test/rustdoc-js-std/path-ordering.js
@@ -0,0 +1,12 @@
+const QUERY = 'hashset::insert';
+
+const EXPECTED = {
+    'others': [
+        // ensure hashset::insert comes first
+        { 'path': 'std::collections::hash_set::HashSet', 'name': 'insert' },
+        { 'path': 'std::collections::hash_set::HashSet', 'name': 'get_or_insert' },
+        { 'path': 'std::collections::hash_set::HashSet', 'name': 'get_or_insert_with' },
+        { 'path': 'std::collections::hash_set::HashSet', 'name': 'get_or_insert_owned' },
+        { 'path': 'std::collections::hash_map::HashMap', 'name': 'insert' },
+    ],
+};
diff --git a/src/test/rustdoc-js/path-ordering.js b/src/test/rustdoc-js/path-ordering.js
new file mode 100644
index 00000000000..4aee569b0f4
--- /dev/null
+++ b/src/test/rustdoc-js/path-ordering.js
@@ -0,0 +1,14 @@
+// exact-check
+
+const QUERY = 'b::ccccccc';
+
+const EXPECTED = {
+    'others': [
+        // `ccccccc` is an exact match for all three of these.
+        // However `b` is a closer match for `bb` than for any
+        // of the others, so it ought to go first.
+        { 'path': 'path_ordering::bb', 'name': 'Ccccccc' },
+        { 'path': 'path_ordering::aa', 'name': 'Ccccccc' },
+        { 'path': 'path_ordering::dd', 'name': 'Ccccccc' },
+    ],
+};
diff --git a/src/test/rustdoc-js/path-ordering.rs b/src/test/rustdoc-js/path-ordering.rs
new file mode 100644
index 00000000000..7843cf7f9dc
--- /dev/null
+++ b/src/test/rustdoc-js/path-ordering.rs
@@ -0,0 +1,9 @@
+pub mod dd {
+    pub struct Ccccccc;
+}
+pub mod aa {
+    pub struct Ccccccc;
+}
+pub mod bb {
+    pub struct Ccccccc;
+}