diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 42b87d562529..6f90575fe65e 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -587,6 +587,44 @@ function getNextElem(query, parserState, elems, isInGenerics) {
/** @type {rustdoc.ParserQueryElement[]} */
const generics = [];
+ /** @type {function(string, string): void} */
+ const handleRefOrPtr = (chr, name) => {
+ if (parserState.typeFilter !== null && parserState.typeFilter !== "primitive") {
+ throw [
+ "Invalid search type: primitive ",
+ chr,
+ " and ",
+ parserState.typeFilter,
+ " both specified",
+ ];
+ }
+ parserState.typeFilter = null;
+ parserState.pos += 1;
+ let c = parserState.userQuery[parserState.pos];
+ while (c === " " && parserState.pos < parserState.length) {
+ parserState.pos += 1;
+ c = parserState.userQuery[parserState.pos];
+ }
+ const generics = [];
+ if (parserState.userQuery.slice(parserState.pos, parserState.pos + 3) === "mut") {
+ generics.push(makePrimitiveElement("mut", { typeFilter: "keyword" }));
+ parserState.pos += 3;
+ c = parserState.userQuery[parserState.pos];
+ } else if (chr === "*" && parserState.userQuery.slice(pos, pos + 5) === "const") {
+ // make *const T parse the same as *T
+ parserState.pos += 5;
+ c = parserState.userQuery[parserState.pos];
+ }
+ while (c === " " && parserState.pos < parserState.length) {
+ parserState.pos += 1;
+ c = parserState.userQuery[parserState.pos];
+ }
+ if (!isEndCharacter(c) && parserState.pos < parserState.length) {
+ getFilteredNextElem(query, parserState, generics, isInGenerics);
+ }
+ elems.push(makePrimitiveElement(name, { generics }));
+ }
+
skipWhitespace(parserState);
let start = parserState.pos;
let end;
@@ -636,36 +674,9 @@ function getNextElem(query, parserState, elems, isInGenerics) {
elems.push(makePrimitiveElement(name, { bindingName, generics }));
}
} else if (parserState.userQuery[parserState.pos] === "&") {
- if (parserState.typeFilter !== null && parserState.typeFilter !== "primitive") {
- throw [
- "Invalid search type: primitive ",
- "&",
- " and ",
- parserState.typeFilter,
- " both specified",
- ];
- }
- parserState.typeFilter = null;
- parserState.pos += 1;
- let c = parserState.userQuery[parserState.pos];
- while (c === " " && parserState.pos < parserState.length) {
- parserState.pos += 1;
- c = parserState.userQuery[parserState.pos];
- }
- const generics = [];
- if (parserState.userQuery.slice(parserState.pos, parserState.pos + 3) === "mut") {
- generics.push(makePrimitiveElement("mut", { typeFilter: "keyword" }));
- parserState.pos += 3;
- c = parserState.userQuery[parserState.pos];
- }
- while (c === " " && parserState.pos < parserState.length) {
- parserState.pos += 1;
- c = parserState.userQuery[parserState.pos];
- }
- if (!isEndCharacter(c) && parserState.pos < parserState.length) {
- getFilteredNextElem(query, parserState, generics, isInGenerics);
- }
- elems.push(makePrimitiveElement("reference", { generics }));
+ handleRefOrPtr("&", "reference");
+ } else if (parserState.userQuery[parserState.pos] === "*") {
+ handleRefOrPtr("*", "pointer");
} else {
const isStringElem = parserState.userQuery[start] === "\"";
// We handle the strings on their own mostly to make code easier to follow.
@@ -1185,6 +1196,7 @@ class DocSearch {
this.typeNameIdOfUnit = -1;
this.typeNameIdOfTupleOrUnit = -1;
this.typeNameIdOfReference = -1;
+ this.typeNameIdOfPointer = -1;
this.typeNameIdOfHof = -1;
this.utf8decoder = new TextDecoder();
@@ -1224,6 +1236,7 @@ class DocSearch {
tupleOrUnit,
// reference matches `&`
reference,
+ pointer,
// never matches `!`
never,
] = await Promise.all([
@@ -1239,6 +1252,7 @@ class DocSearch {
nn.search("unit"),
nn.search("()"),
nn.search("reference"),
+ nn.search("pointer"),
nn.search("never"),
]);
/**
@@ -1270,6 +1284,7 @@ class DocSearch {
this.typeNameIdOfUnit = await first(unit, TY_PRIMITIVE, "");
this.typeNameIdOfTupleOrUnit = await first(tupleOrUnit, TY_PRIMITIVE, "");
this.typeNameIdOfReference = await first(reference, TY_PRIMITIVE, "");
+ this.typeNameIdOfPointer = await first(pointer, TY_PRIMITIVE, "");
this.typeNameIdOfHof = await first(hof, TY_PRIMITIVE, "");
this.typeNameIdOfNever = await first(never, TY_PRIMITIVE, "");
}