Rollup merge of #118452 - notriddle:coloncolonspace, r=GuillaumeGomez,jsha
rustdoc-search: allow spaces around `::` in path query This restriction made sense back when spaces separated function parameters, but now that they separate path components, there's no real ambiguity any more. Additionally, the Rust language allows it. The other two commits are misc code cleanup.
This commit is contained in:
commit
e9a870d5eb
@ -287,10 +287,6 @@ function initSearch(rawSearchIndex) {
|
||||
}
|
||||
}
|
||||
|
||||
function isWhitespace(c) {
|
||||
return " \t\n\r".indexOf(c) !== -1;
|
||||
}
|
||||
|
||||
function isSpecialStartCharacter(c) {
|
||||
return "<\"".indexOf(c) !== -1;
|
||||
}
|
||||
@ -408,7 +404,7 @@ function initSearch(rawSearchIndex) {
|
||||
* @return {boolean}
|
||||
*/
|
||||
function isPathSeparator(c) {
|
||||
return c === ":" || isWhitespace(c);
|
||||
return c === ":" || c === " ";
|
||||
}
|
||||
|
||||
/**
|
||||
@ -425,7 +421,7 @@ function initSearch(rawSearchIndex) {
|
||||
const c = parserState.userQuery[pos - 1];
|
||||
if (c === lookingFor) {
|
||||
return true;
|
||||
} else if (!isWhitespace(c)) {
|
||||
} else if (c !== " ") {
|
||||
break;
|
||||
}
|
||||
pos -= 1;
|
||||
@ -454,7 +450,7 @@ function initSearch(rawSearchIndex) {
|
||||
function skipWhitespace(parserState) {
|
||||
while (parserState.pos < parserState.userQuery.length) {
|
||||
const c = parserState.userQuery[parserState.pos];
|
||||
if (!isWhitespace(c)) {
|
||||
if (c !== " ") {
|
||||
break;
|
||||
}
|
||||
parserState.pos += 1;
|
||||
@ -473,8 +469,6 @@ function initSearch(rawSearchIndex) {
|
||||
const path = name.trim();
|
||||
if (path.length === 0 && generics.length === 0) {
|
||||
throw ["Unexpected ", parserState.userQuery[parserState.pos]];
|
||||
} else if (path === "*") {
|
||||
throw ["Unexpected ", "*"];
|
||||
}
|
||||
if (query.literalSearch && parserState.totalElems - parserState.genericsElems > 0) {
|
||||
throw ["Cannot have more than one element if you use quotes"];
|
||||
@ -512,18 +506,15 @@ function initSearch(rawSearchIndex) {
|
||||
bindingName,
|
||||
};
|
||||
}
|
||||
const quadcolon = /::\s*::/.exec(path);
|
||||
if (path.startsWith("::")) {
|
||||
throw ["Paths cannot start with ", "::"];
|
||||
} else if (path.endsWith("::")) {
|
||||
throw ["Paths cannot end with ", "::"];
|
||||
} else if (path.includes("::::")) {
|
||||
throw ["Unexpected ", "::::"];
|
||||
} else if (path.includes(" ::")) {
|
||||
throw ["Unexpected ", " ::"];
|
||||
} else if (path.includes(":: ")) {
|
||||
throw ["Unexpected ", ":: "];
|
||||
} else if (quadcolon !== null) {
|
||||
throw ["Unexpected ", quadcolon[0]];
|
||||
}
|
||||
const pathSegments = path.split(/::|\s+/);
|
||||
const pathSegments = path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/);
|
||||
// In case we only have something like `<p>`, there is no name.
|
||||
if (pathSegments.length === 0 || (pathSegments.length === 1 && pathSegments[0] === "")) {
|
||||
if (generics.length > 0 || prevIs(parserState, ">")) {
|
||||
@ -604,7 +595,7 @@ function initSearch(rawSearchIndex) {
|
||||
} else {
|
||||
while (parserState.pos + 1 < parserState.length) {
|
||||
const next_c = parserState.userQuery[parserState.pos + 1];
|
||||
if (!isWhitespace(next_c)) {
|
||||
if (next_c !== " ") {
|
||||
break;
|
||||
}
|
||||
parserState.pos += 1;
|
||||
@ -958,7 +949,7 @@ function initSearch(rawSearchIndex) {
|
||||
query.literalSearch = false;
|
||||
foundStopChar = true;
|
||||
continue;
|
||||
} else if (isWhitespace(c)) {
|
||||
} else if (c === " ") {
|
||||
skipWhitespace(parserState);
|
||||
continue;
|
||||
}
|
||||
@ -1118,7 +1109,7 @@ function initSearch(rawSearchIndex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
userQuery = userQuery.trim();
|
||||
userQuery = userQuery.trim().replace(/\r|\n|\t/g, " ");
|
||||
const parserState = {
|
||||
length: userQuery.length,
|
||||
pos: 0,
|
||||
|
@ -17,6 +17,15 @@ const PARSED = [
|
||||
userQuery: "-> <p>",
|
||||
error: "Found generics without a path",
|
||||
},
|
||||
{
|
||||
query: '-> *',
|
||||
elems: [],
|
||||
foundElems: 0,
|
||||
original: "-> *",
|
||||
returned: [],
|
||||
userQuery: "-> *",
|
||||
error: "Unexpected `*`",
|
||||
},
|
||||
{
|
||||
query: 'a<"P">',
|
||||
elems: [],
|
||||
@ -143,6 +152,24 @@ const PARSED = [
|
||||
userQuery: "a::::b",
|
||||
error: "Unexpected `::::`",
|
||||
},
|
||||
{
|
||||
query: "a:: ::b",
|
||||
elems: [],
|
||||
foundElems: 0,
|
||||
original: "a:: ::b",
|
||||
returned: [],
|
||||
userQuery: "a:: ::b",
|
||||
error: "Unexpected `:: ::`",
|
||||
},
|
||||
{
|
||||
query: "a::\t::b",
|
||||
elems: [],
|
||||
foundElems: 0,
|
||||
original: "a:: ::b",
|
||||
returned: [],
|
||||
userQuery: "a:: ::b",
|
||||
error: "Unexpected `:: ::`",
|
||||
},
|
||||
{
|
||||
query: "a::b::",
|
||||
elems: [],
|
||||
@ -314,24 +341,6 @@ const PARSED = [
|
||||
userQuery: 'a<->',
|
||||
error: 'Unexpected `-` after `<`',
|
||||
},
|
||||
{
|
||||
query: "a:: a",
|
||||
elems: [],
|
||||
foundElems: 0,
|
||||
original: 'a:: a',
|
||||
returned: [],
|
||||
userQuery: 'a:: a',
|
||||
error: 'Unexpected `:: `',
|
||||
},
|
||||
{
|
||||
query: "a ::a",
|
||||
elems: [],
|
||||
foundElems: 0,
|
||||
original: 'a ::a',
|
||||
returned: [],
|
||||
userQuery: 'a ::a',
|
||||
error: 'Unexpected ` ::`',
|
||||
},
|
||||
{
|
||||
query: "a<a>:",
|
||||
elems: [],
|
||||
|
@ -15,6 +15,54 @@ const PARSED = [
|
||||
userQuery: "a::b",
|
||||
error: null,
|
||||
},
|
||||
{
|
||||
query: "a:: a",
|
||||
elems: [{
|
||||
name: "a:: a",
|
||||
fullPath: ["a", "a"],
|
||||
pathWithoutLast: ["a"],
|
||||
pathLast: "a",
|
||||
generics: [],
|
||||
typeFilter: -1,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: 'a:: a',
|
||||
returned: [],
|
||||
userQuery: 'a:: a',
|
||||
error: null,
|
||||
},
|
||||
{
|
||||
query: "a ::a",
|
||||
elems: [{
|
||||
name: "a ::a",
|
||||
fullPath: ["a", "a"],
|
||||
pathWithoutLast: ["a"],
|
||||
pathLast: "a",
|
||||
generics: [],
|
||||
typeFilter: -1,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: 'a ::a',
|
||||
returned: [],
|
||||
userQuery: 'a ::a',
|
||||
error: null,
|
||||
},
|
||||
{
|
||||
query: "a :: a",
|
||||
elems: [{
|
||||
name: "a :: a",
|
||||
fullPath: ["a", "a"],
|
||||
pathWithoutLast: ["a"],
|
||||
pathLast: "a",
|
||||
generics: [],
|
||||
typeFilter: -1,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: 'a :: a',
|
||||
returned: [],
|
||||
userQuery: 'a :: a',
|
||||
error: null,
|
||||
},
|
||||
{
|
||||
query: 'A::B,C',
|
||||
elems: [
|
||||
|
@ -5,7 +5,7 @@ const PARSED = [
|
||||
query: 'aaaaaa b',
|
||||
elems: [
|
||||
{
|
||||
name: 'aaaaaa\tb',
|
||||
name: 'aaaaaa b',
|
||||
fullPath: ['aaaaaa', 'b'],
|
||||
pathWithoutLast: ['aaaaaa'],
|
||||
pathLast: 'b',
|
||||
@ -14,9 +14,9 @@ const PARSED = [
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
original: "aaaaaa b",
|
||||
original: "aaaaaa b",
|
||||
returned: [],
|
||||
userQuery: "aaaaaa b",
|
||||
userQuery: "aaaaaa b",
|
||||
error: null,
|
||||
},
|
||||
{
|
||||
@ -40,9 +40,9 @@ const PARSED = [
|
||||
},
|
||||
],
|
||||
foundElems: 2,
|
||||
original: "aaaaaa, b",
|
||||
original: "aaaaaa, b",
|
||||
returned: [],
|
||||
userQuery: "aaaaaa, b",
|
||||
userQuery: "aaaaaa, b",
|
||||
error: null,
|
||||
},
|
||||
{
|
||||
@ -93,7 +93,7 @@ const PARSED = [
|
||||
query: 'a\tb',
|
||||
elems: [
|
||||
{
|
||||
name: 'a\tb',
|
||||
name: 'a b',
|
||||
fullPath: ['a', 'b'],
|
||||
pathWithoutLast: ['a'],
|
||||
pathLast: 'b',
|
||||
@ -102,9 +102,9 @@ const PARSED = [
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
original: "a\tb",
|
||||
original: "a b",
|
||||
returned: [],
|
||||
userQuery: "a\tb",
|
||||
userQuery: "a b",
|
||||
error: null,
|
||||
},
|
||||
{
|
||||
@ -176,7 +176,7 @@ const PARSED = [
|
||||
pathLast: 'a',
|
||||
generics: [
|
||||
{
|
||||
name: 'b\tc',
|
||||
name: 'b c',
|
||||
fullPath: ['b', 'c'],
|
||||
pathWithoutLast: ['b'],
|
||||
pathLast: 'c',
|
||||
@ -187,9 +187,9 @@ const PARSED = [
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
original: "a<b\tc>",
|
||||
original: "a<b c>",
|
||||
returned: [],
|
||||
userQuery: "a<b\tc>",
|
||||
userQuery: "a<b c>",
|
||||
error: null,
|
||||
},
|
||||
];
|
||||
|
@ -92,9 +92,9 @@ const PARSED = [
|
||||
query: 'mod\t:',
|
||||
elems: [],
|
||||
foundElems: 0,
|
||||
original: 'mod\t:',
|
||||
original: 'mod :',
|
||||
returned: [],
|
||||
userQuery: 'mod\t:',
|
||||
userQuery: 'mod :',
|
||||
error: "Unexpected `:` (expected path after type filter `mod:`)",
|
||||
},
|
||||
];
|
||||
|
Loading…
Reference in New Issue
Block a user