diff options
| -rw-r--r-- | src/librustdoc/html/static/js/search.js | 16 | ||||
| -rw-r--r-- | src/test/rustdoc-js-std/parser-errors.js | 10 |
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 `:`', + }, ]; |
