diff options
| author | binarycat <binarycat@envs.net> | 2025-03-24 18:11:43 -0500 |
|---|---|---|
| committer | binarycat <binarycat@envs.net> | 2025-03-24 18:11:43 -0500 |
| commit | 714be45b974ae16a010503587e4628bc72fd107b (patch) | |
| tree | 14d9ef55e4032abe0e8c2238d7a7022dbf5846b7 | |
| parent | 8af647c04dbd300518f85619c9e9ce7a94d558c4 (diff) | |
| download | rust-714be45b974ae16a010503587e4628bc72fd107b.tar.gz rust-714be45b974ae16a010503587e4628bc72fd107b.zip | |
search.js: refactor transformResults
| -rw-r--r-- | src/librustdoc/html/static/js/rustdoc.d.ts | 12 | ||||
| -rw-r--r-- | src/librustdoc/html/static/js/search.js | 29 |
2 files changed, 27 insertions, 14 deletions
diff --git a/src/librustdoc/html/static/js/rustdoc.d.ts b/src/librustdoc/html/static/js/rustdoc.d.ts index e2ebb139183..91a58fab86e 100644 --- a/src/librustdoc/html/static/js/rustdoc.d.ts +++ b/src/librustdoc/html/static/js/rustdoc.d.ts @@ -257,13 +257,21 @@ declare namespace rustdoc { ty: number, type?: FunctionSearchType, paramNames?: string[], - displayType: Promise<Array<Array<string>>>|null, - displayTypeMappedNames: Promise<Array<[string, Array<string>]>>|null, + displayTypeSignature: Promise<rustdoc.DisplayTypeSignature> | null, item: Row, dontValidate?: boolean, } /** + * output of `formatDisplayTypeSignature` + */ + interface DisplayTypeSignature { + type: Array<string>, + mappedNames: Map<string, string>, + whereClause: Map<string, Array<string>>, + } + + /** * A pair of [inputs, outputs], or 0 for null. This is stored in the search index. * The JavaScript deserializes this into FunctionSearchType. * diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js index 2317f157bb9..bd09631d487 100644 --- a/src/librustdoc/html/static/js/search.js +++ b/src/librustdoc/html/static/js/search.js @@ -2777,15 +2777,28 @@ class DocSearch { for (const result of results) { if (result.id !== -1) { const res = buildHrefAndPath(this.searchIndex[result.id]); + // many of these properties don't strictly need to be + // copied over, but copying them over satisfies tsc, + // and hopefully plays nice with the shape optimization + // of the browser engine. + /** @type {rustdoc.ResultObject} */ const obj = Object.assign({ + parent: result.parent, + type: result.type, dist: result.dist, + path_dist: result.path_dist, + index: result.index, + desc: result.desc, + item: result.item, displayPath: pathSplitter(res[0]), + fullPath: "", + href: "", + displayTypeSignature: null, }, this.searchIndex[result.id]); // To be sure than it some items aren't considered as duplicate. - // @ts-expect-error - obj.fullPath = res[2] + "|" + obj.ty; - // @ts-expect-error + obj.fullPath = res[2] + "|" + obj.ty + if (duplicates.has(obj.fullPath)) { continue; } @@ -2798,18 +2811,15 @@ class DocSearch { if (duplicates.has(res[2] + "|" + TY_IMPORT)) { continue; } - // @ts-expect-error duplicates.add(obj.fullPath); duplicates.add(res[2]); if (typeInfo !== null) { - // @ts-expect-error obj.displayTypeSignature = // @ts-expect-error this.formatDisplayTypeSignature(obj, typeInfo); } - // @ts-expect-error obj.href = res[1]; out.push(obj); if (out.length >= MAX_RESULTS) { @@ -2817,7 +2827,6 @@ class DocSearch { } } } - // @ts-expect-error return out; }; @@ -2830,11 +2839,7 @@ class DocSearch { * * @param {rustdoc.ResultObject} obj * @param {"sig"|"elems"|"returned"|null} typeInfo - * @returns {Promise<{ - * "type": Array<string>, - * "mappedNames": Map<string, string>, - * "whereClause": Map<string, Array<string>>, - * }>} + * @returns {Promise<rustdoc.DisplayTypeSignature>} */ this.formatDisplayTypeSignature = async(obj, typeInfo) => { const objType = obj.type; |
