Skip to content

Commit 04b4523

Browse files
authored
Rollup merge of rust-lang#130009 - notriddle:notriddle/trailing-arrow, r=lolbinarycat,GuillaumeGomez
rustdoc-search: allow trailing `Foo ->` arg search Fixes rust-lang#129710
2 parents a88b1af + 3699e93 commit 04b4523

File tree

5 files changed

+81
-14
lines changed

5 files changed

+81
-14
lines changed

Diff for: src/librustdoc/html/static/js/externs.js

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ let ParserState;
4141
* foundElems: number,
4242
* totalElems: number,
4343
* literalSearch: boolean,
44+
* hasReturnArrow: boolean,
4445
* corrections: Array<{from: string, to: integer}> | null,
4546
* typeFingerprint: Uint32Array,
4647
* error: Array<string> | null,

Diff for: src/librustdoc/html/static/js/search.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ function createQueryElement(query, parserState, name, generics, isInGenerics) {
657657
}
658658
const typeFilter = parserState.typeFilter;
659659
parserState.typeFilter = null;
660-
if (name === "!") {
660+
if (name.trim() === "!") {
661661
if (typeFilter !== null && typeFilter !== "primitive") {
662662
throw [
663663
"Invalid search type: primitive never type ",
@@ -1795,6 +1795,7 @@ class DocSearch {
17951795
// Total number of elements (includes generics).
17961796
totalElems: 0,
17971797
literalSearch: false,
1798+
hasReturnArrow: false,
17981799
error: null,
17991800
correction: null,
18001801
proposeCorrectionFrom: null,
@@ -1823,6 +1824,7 @@ class DocSearch {
18231824
continue;
18241825
} else if (c === "-" || c === ">") {
18251826
if (isReturnArrow(parserState)) {
1827+
query.hasReturnArrow = true;
18261828
break;
18271829
}
18281830
throw ["Unexpected ", c, " (did you mean ", "->", "?)"];
@@ -1889,9 +1891,7 @@ class DocSearch {
18891891
// Get returned elements.
18901892
getItemsBefore(query, parserState, query.returned, "");
18911893
// Nothing can come afterward!
1892-
if (query.returned.length === 0) {
1893-
throw ["Expected at least one item after ", "->"];
1894-
}
1894+
query.hasReturnArrow = true;
18951895
break;
18961896
} else {
18971897
parserState.pos += 1;
@@ -3249,7 +3249,7 @@ class DocSearch {
32493249
this.buildFunctionTypeFingerprint(elem, parsedQuery.typeFingerprint, fps);
32503250
}
32513251

3252-
if (parsedQuery.foundElems === 1 && parsedQuery.returned.length === 0) {
3252+
if (parsedQuery.foundElems === 1 && !parsedQuery.hasReturnArrow) {
32533253
if (parsedQuery.elems.length === 1) {
32543254
const elem = parsedQuery.elems[0];
32553255
const length = this.searchIndex.length;

Diff for: tests/rustdoc-js-std/parser-errors.js

-9
Original file line numberDiff line numberDiff line change
@@ -251,15 +251,6 @@ const PARSED = [
251251
userQuery: "ab'",
252252
error: "Unexpected `'` after `b` (not a valid identifier)",
253253
},
254-
{
255-
query: "a->",
256-
elems: [],
257-
foundElems: 0,
258-
original: "a->",
259-
returned: [],
260-
userQuery: "a->",
261-
error: "Expected at least one item after `->`",
262-
},
263254
{
264255
query: '"p" <a>',
265256
elems: [],

Diff for: tests/rustdoc-js-std/parser-returned.js

+68
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,72 @@ const PARSED = [
9494
userQuery: "-> !",
9595
error: null,
9696
},
97+
{
98+
query: "a->",
99+
elems: [{
100+
name: "a",
101+
fullPath: ["a"],
102+
pathWithoutLast: [],
103+
pathLast: "a",
104+
generics: [],
105+
typeFilter: -1,
106+
}],
107+
foundElems: 1,
108+
original: "a->",
109+
returned: [],
110+
userQuery: "a->",
111+
hasReturnArrow: true,
112+
error: null,
113+
},
114+
{
115+
query: "!->",
116+
elems: [{
117+
name: "never",
118+
fullPath: ["never"],
119+
pathWithoutLast: [],
120+
pathLast: "never",
121+
generics: [],
122+
typeFilter: 1,
123+
}],
124+
foundElems: 1,
125+
original: "!->",
126+
returned: [],
127+
userQuery: "!->",
128+
hasReturnArrow: true,
129+
error: null,
130+
},
131+
{
132+
query: "! ->",
133+
elems: [{
134+
name: "never",
135+
fullPath: ["never"],
136+
pathWithoutLast: [],
137+
pathLast: "never",
138+
generics: [],
139+
typeFilter: 1,
140+
}],
141+
foundElems: 1,
142+
original: "! ->",
143+
returned: [],
144+
userQuery: "! ->",
145+
hasReturnArrow: true,
146+
error: null,
147+
},
148+
{
149+
query: "primitive:!->",
150+
elems: [{
151+
name: "never",
152+
fullPath: ["never"],
153+
pathWithoutLast: [],
154+
pathLast: "never",
155+
generics: [],
156+
typeFilter: 1,
157+
}],
158+
foundElems: 1,
159+
original: "primitive:!->",
160+
returned: [],
161+
userQuery: "primitive:!->",
162+
hasReturnArrow: true,
163+
error: null,
164+
},
97165
];

Diff for: tests/rustdoc-js/never-search.js

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
// exact-check
22

33
const EXPECTED = [
4+
{
5+
'query': '! ->',
6+
'others': [
7+
{ 'path': 'never_search', 'name': 'impossible' },
8+
{ 'path': 'never_search', 'name': 'box_impossible' },
9+
],
10+
},
411
{
512
'query': '-> !',
613
'others': [

0 commit comments

Comments
 (0)