rustdoc-search: use ES6 Map for aliases instead of Object

This commit is contained in:
Michael Howell 2023-04-13 16:30:02 -07:00
parent a41fc00eaf
commit 2179d9157e

View File

@ -191,7 +191,7 @@ function initSearch(rawSearchIndex) {
*/ */
let searchIndex; let searchIndex;
let currentResults; let currentResults;
const ALIASES = Object.create(null); const ALIASES = new Map();
function isWhitespace(c) { function isWhitespace(c) {
return " \t\n\r".indexOf(c) !== -1; return " \t\n\r".indexOf(c) !== -1;
@ -1424,22 +1424,22 @@ function initSearch(rawSearchIndex) {
const aliases = []; const aliases = [];
const crateAliases = []; const crateAliases = [];
if (filterCrates !== null) { if (filterCrates !== null) {
if (ALIASES[filterCrates] && ALIASES[filterCrates][lowerQuery]) { if (ALIASES.has(filterCrates) && ALIASES.get(filterCrates).has(lowerQuery)) {
const query_aliases = ALIASES[filterCrates][lowerQuery]; const query_aliases = ALIASES.get(filterCrates).get(lowerQuery);
for (const alias of query_aliases) { for (const alias of query_aliases) {
aliases.push(createAliasFromItem(searchIndex[alias])); aliases.push(createAliasFromItem(searchIndex[alias]));
} }
} }
} else { } else {
Object.keys(ALIASES).forEach(crate => { for (const [crate, crateAliasesIndex] of ALIASES) {
if (ALIASES[crate][lowerQuery]) { if (crateAliasesIndex.has(lowerQuery)) {
const pushTo = crate === currentCrate ? crateAliases : aliases; const pushTo = crate === currentCrate ? crateAliases : aliases;
const query_aliases = ALIASES[crate][lowerQuery]; const query_aliases = crateAliasesIndex.get(lowerQuery);
for (const alias of query_aliases) { for (const alias of query_aliases) {
pushTo.push(createAliasFromItem(searchIndex[alias])); pushTo.push(createAliasFromItem(searchIndex[alias]));
} }
} }
}); }
} }
const sortFunc = (aaa, bbb) => { const sortFunc = (aaa, bbb) => {
@ -2345,17 +2345,22 @@ function initSearch(rawSearchIndex) {
} }
if (aliases) { if (aliases) {
ALIASES[crate] = Object.create(null); const currentCrateAliases = new Map();
ALIASES.set(crate, currentCrateAliases);
for (const alias_name in aliases) { for (const alias_name in aliases) {
if (!hasOwnPropertyRustdoc(aliases, alias_name)) { if (!hasOwnPropertyRustdoc(aliases, alias_name)) {
continue; continue;
} }
if (!hasOwnPropertyRustdoc(ALIASES[crate], alias_name)) { let currentNameAliases;
ALIASES[crate][alias_name] = []; if (currentCrateAliases.has(alias_name)) {
currentNameAliases = currentCrateAliases.get(alias_name);
} else {
currentNameAliases = [];
currentCrateAliases.set(alias_name, currentNameAliases);
} }
for (const local_alias of aliases[alias_name]) { for (const local_alias of aliases[alias_name]) {
ALIASES[crate][alias_name].push(local_alias + currentIndex); currentNameAliases.push(local_alias + currentIndex);
} }
} }
} }