about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2022-04-18 23:11:42 +0200
committerGuillaume Gomez <guillaume.gomez@huawei.com>2022-04-18 23:11:42 +0200
commit8d0e10cfbe9ca114a6470b6a26aa878ace5c03ba (patch)
tree0193dd1a97b7f80dfb19b936ce55e91f9c1d0eb4 /src
parent5c6c1e110f6c249ee21c6b4eebc39d9635d6d565 (diff)
downloadrust-8d0e10cfbe9ca114a6470b6a26aa878ace5c03ba.tar.gz
rust-8d0e10cfbe9ca114a6470b6a26aa878ace5c03ba.zip
Correctly handle single `:`
Diffstat (limited to 'src')
-rw-r--r--src/librustdoc/html/static/js/search.js16
-rw-r--r--src/test/rustdoc-js-std/parser-errors.js10
2 files changed, 16 insertions, 10 deletions
diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 4d78a50e4d0..260f2bcb2cd 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -476,10 +476,10 @@ window.initSearch = function(rawSearchIndex) {
                     throw new Error(`Unexpected \`${c}\` (did you mean \`->\`?)`);
                 }
                 throw new Error(`Unexpected \`${c}\``);
-            } else if (c === ":" &&
-                parserState.typeFilter === null &&
-                !isPathStart(parserState))
-            {
+            } else if (c === ":" && !isPathStart(parserState)) {
+                if (parserState.typeFilter !== null) {
+                    throw new Error("Unexpected `:`");
+                }
                 if (query.elems.length === 0) {
                     throw new Error("Expected type filter before `:`");
                 } else if (query.elems.length !== 1 || parserState.totalElems !== 1) {
@@ -505,12 +505,7 @@ window.initSearch = function(rawSearchIndex) {
             before = query.elems.length;
             getNextElem(query, parserState, query.elems, false);
             if (query.elems.length === before) {
-                // Nothing was added, let's check it's not because of a solo ":"!
-                if (parserState.pos >= parserState.length ||
-                    parserState.userQuery[parserState.pos] !== ":")
-                {
-                    break;
-                }
+                // Nothing was added, weird... Let's increase the position to not remain stuck.
                 parserState.pos += 1;
             }
             foundStopChar = false;
@@ -678,6 +673,7 @@ window.initSearch = function(rawSearchIndex) {
         } catch (err) {
             query = newParsedQuery(userQuery);
             query.error = err.message;
+            query.typeFilter = -1;
             return query;
         }
 
diff --git a/src/test/rustdoc-js-std/parser-errors.js b/src/test/rustdoc-js-std/parser-errors.js
index 9d92f5ddfd3..779ab867c12 100644
--- a/src/test/rustdoc-js-std/parser-errors.js
+++ b/src/test/rustdoc-js-std/parser-errors.js
@@ -34,6 +34,7 @@ const QUERY = [
     "a<>:",
     "a,:",
     "  a<>  :",
+    "mod : :",
 ];
 
 const PARSED = [
@@ -352,4 +353,13 @@ const PARSED = [
         userQuery: "a<>  :",
         error: 'Unexpected `<` in type filter',
     },
+    {
+        elems: [],
+        foundElems: 0,
+        original: "mod : :",
+        returned: [],
+        typeFilter: -1,
+        userQuery: "mod : :",
+        error: 'Unexpected `:`',
+    },
 ];