mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Rollup merge of #118109 - notriddle:notriddle/search-cleanup-2, r=GuillaumeGomez
rustdoc-search: simplify `checkPath` and `sortResults` These two commits reduce the amount of code in search.js with no noticeable change in performance. https://notriddle.com/rustdoc-html-demo-5/profile-5/index.html
This commit is contained in:
commit
bdb929e788
@ -16,6 +16,13 @@ use crate::clean;
|
||||
/// Consequently, every change to this type should be synchronized to
|
||||
/// the `itemTypes` mapping table in `html/static/js/search.js`.
|
||||
///
|
||||
/// The search engine in search.js also uses item type numbers as a tie breaker when
|
||||
/// sorting results. Keywords and primitives are given first because we want them to be easily
|
||||
/// found by new users who don't know about advanced features like type filters. The rest are
|
||||
/// mostly in an arbitrary order, but it's easier to test the search engine when
|
||||
/// it's deterministic, and these are strictly finer-grained than language namespaces, so
|
||||
/// using the path and the item type together to sort ensures that search sorting is stable.
|
||||
///
|
||||
/// In addition, code in `html::render` uses this enum to generate CSS classes, page prefixes, and
|
||||
/// module headings. If you are adding to this enum and want to ensure that the sidebar also prints
|
||||
/// a heading, edit the listing in `html/render.rs`, function `sidebar_module`. This uses an
|
||||
@ -23,28 +30,28 @@ use crate::clean;
|
||||
#[derive(Copy, PartialEq, Eq, Hash, Clone, Debug, PartialOrd, Ord)]
|
||||
#[repr(u8)]
|
||||
pub(crate) enum ItemType {
|
||||
Module = 0,
|
||||
ExternCrate = 1,
|
||||
Import = 2,
|
||||
Struct = 3,
|
||||
Enum = 4,
|
||||
Function = 5,
|
||||
TypeAlias = 6,
|
||||
Static = 7,
|
||||
Trait = 8,
|
||||
Impl = 9,
|
||||
TyMethod = 10,
|
||||
Method = 11,
|
||||
StructField = 12,
|
||||
Variant = 13,
|
||||
Macro = 14,
|
||||
Primitive = 15,
|
||||
AssocType = 16,
|
||||
Constant = 17,
|
||||
AssocConst = 18,
|
||||
Union = 19,
|
||||
ForeignType = 20,
|
||||
Keyword = 21,
|
||||
Keyword = 0,
|
||||
Primitive = 1,
|
||||
Module = 2,
|
||||
ExternCrate = 3,
|
||||
Import = 4,
|
||||
Struct = 5,
|
||||
Enum = 6,
|
||||
Function = 7,
|
||||
TypeAlias = 8,
|
||||
Static = 9,
|
||||
Trait = 10,
|
||||
Impl = 11,
|
||||
TyMethod = 12,
|
||||
Method = 13,
|
||||
StructField = 14,
|
||||
Variant = 15,
|
||||
Macro = 16,
|
||||
AssocType = 17,
|
||||
Constant = 18,
|
||||
AssocConst = 19,
|
||||
Union = 20,
|
||||
ForeignType = 21,
|
||||
OpaqueTy = 22,
|
||||
ProcAttribute = 23,
|
||||
ProcDerive = 24,
|
||||
|
@ -18,28 +18,28 @@ if (!Array.prototype.toSpliced) {
|
||||
// This mapping table should match the discriminants of
|
||||
// `rustdoc::formats::item_type::ItemType` type in Rust.
|
||||
const itemTypes = [
|
||||
"keyword",
|
||||
"primitive",
|
||||
"mod",
|
||||
"externcrate",
|
||||
"import",
|
||||
"struct",
|
||||
"struct", // 5
|
||||
"enum",
|
||||
"fn", // 5
|
||||
"fn",
|
||||
"type",
|
||||
"static",
|
||||
"trait",
|
||||
"trait", // 10
|
||||
"impl",
|
||||
"tymethod", // 10
|
||||
"tymethod",
|
||||
"method",
|
||||
"structfield",
|
||||
"variant",
|
||||
"variant", // 15
|
||||
"macro",
|
||||
"primitive", // 15
|
||||
"associatedtype",
|
||||
"constant",
|
||||
"associatedconstant",
|
||||
"union",
|
||||
"foreigntype", // 20
|
||||
"keyword",
|
||||
"union", // 20
|
||||
"foreigntype",
|
||||
"existential",
|
||||
"attr",
|
||||
"derive",
|
||||
@ -48,6 +48,8 @@ const itemTypes = [
|
||||
];
|
||||
|
||||
const longItemTypes = [
|
||||
"keyword",
|
||||
"primitive type",
|
||||
"module",
|
||||
"extern crate",
|
||||
"re-export",
|
||||
@ -63,13 +65,11 @@ const longItemTypes = [
|
||||
"struct field",
|
||||
"enum variant",
|
||||
"macro",
|
||||
"primitive type",
|
||||
"assoc type",
|
||||
"constant",
|
||||
"assoc const",
|
||||
"union",
|
||||
"foreign type",
|
||||
"keyword",
|
||||
"existential type",
|
||||
"attribute macro",
|
||||
"derive macro",
|
||||
@ -77,8 +77,6 @@ const longItemTypes = [
|
||||
];
|
||||
|
||||
// used for special search precedence
|
||||
const TY_PRIMITIVE = itemTypes.indexOf("primitive");
|
||||
const TY_KEYWORD = itemTypes.indexOf("keyword");
|
||||
const TY_GENERIC = itemTypes.indexOf("generic");
|
||||
const ROOT_PATH = typeof window !== "undefined" ? window.rootPath : "../";
|
||||
|
||||
@ -1317,16 +1315,6 @@ function initSearch(rawSearchIndex) {
|
||||
return (a > b ? +1 : -1);
|
||||
}
|
||||
|
||||
// special precedence for primitive and keyword pages
|
||||
if ((aaa.item.ty === TY_PRIMITIVE && bbb.item.ty !== TY_KEYWORD) ||
|
||||
(aaa.item.ty === TY_KEYWORD && bbb.item.ty !== TY_PRIMITIVE)) {
|
||||
return -1;
|
||||
}
|
||||
if ((bbb.item.ty === TY_PRIMITIVE && aaa.item.ty !== TY_PRIMITIVE) ||
|
||||
(bbb.item.ty === TY_KEYWORD && aaa.item.ty !== TY_KEYWORD)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// sort by description (no description goes later)
|
||||
a = (aaa.item.desc === "");
|
||||
b = (bbb.item.desc === "");
|
||||
@ -1840,26 +1828,16 @@ function initSearch(rawSearchIndex) {
|
||||
|
||||
const length = path.length;
|
||||
const clength = contains.length;
|
||||
if (clength > length) {
|
||||
return maxEditDistance + 1;
|
||||
}
|
||||
for (let i = 0; i < length; ++i) {
|
||||
if (i + clength > length) {
|
||||
break;
|
||||
}
|
||||
pathiter: for (let i = length - clength; i >= 0; i -= 1) {
|
||||
let dist_total = 0;
|
||||
let aborted = false;
|
||||
for (let x = 0; x < clength; ++x) {
|
||||
const dist = editDistance(path[i + x], contains[x], maxEditDistance);
|
||||
if (dist > maxEditDistance) {
|
||||
aborted = true;
|
||||
break;
|
||||
continue pathiter;
|
||||
}
|
||||
dist_total += dist;
|
||||
}
|
||||
if (!aborted) {
|
||||
ret_dist = Math.min(ret_dist, Math.round(dist_total / clength));
|
||||
}
|
||||
ret_dist = Math.min(ret_dist, Math.round(dist_total / clength));
|
||||
}
|
||||
return ret_dist;
|
||||
}
|
||||
@ -2953,7 +2931,7 @@ ${item.displayPath}<span class="${type}">${name}</span>\
|
||||
// https://mathiasbynens.be/notes/shapes-ics
|
||||
const crateRow = {
|
||||
crate: crate,
|
||||
ty: 1, // == ExternCrate
|
||||
ty: 3, // == ExternCrate
|
||||
name: crate,
|
||||
path: "",
|
||||
desc: crateCorpus.doc,
|
||||
|
@ -3,7 +3,7 @@
|
||||
const EXPECTED = {
|
||||
'query': 'fn',
|
||||
'others': [
|
||||
{ 'path': 'std', 'name': 'fn', ty: 15 }, // 15 is for primitive types
|
||||
{ 'path': 'std', 'name': 'fn', ty: 21 }, // 21 is for keywords
|
||||
{ 'path': 'std', 'name': 'fn', ty: 1 }, // 1 is for primitive types
|
||||
{ 'path': 'std', 'name': 'fn', ty: 0 }, // 0 is for keywords
|
||||
],
|
||||
};
|
||||
|
@ -3,7 +3,7 @@
|
||||
const EXPECTED = {
|
||||
'query': 'panic',
|
||||
'others': [
|
||||
{ 'path': 'std', 'name': 'panic', ty: 14 }, // 15 is for macros
|
||||
{ 'path': 'std', 'name': 'panic', ty: 0 }, // 0 is for modules
|
||||
{ 'path': 'std', 'name': 'panic', ty: 16 }, // 16 is for macros
|
||||
{ 'path': 'std', 'name': 'panic', ty: 2 }, // 2 is for modules
|
||||
],
|
||||
};
|
||||
|
@ -81,7 +81,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "never",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
}]
|
||||
],
|
||||
],
|
||||
@ -112,7 +112,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "[]",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
}]
|
||||
],
|
||||
],
|
||||
@ -149,10 +149,10 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "never",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
}]
|
||||
],
|
||||
],
|
||||
|
@ -7,7 +7,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "foo",
|
||||
generics: [],
|
||||
typeFilter: 5,
|
||||
typeFilter: 7,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: "fn:foo",
|
||||
@ -23,7 +23,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "foo",
|
||||
generics: [],
|
||||
typeFilter: 4,
|
||||
typeFilter: 6,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: "enum : foo",
|
||||
@ -48,7 +48,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "macro",
|
||||
generics: [],
|
||||
typeFilter: 14,
|
||||
typeFilter: 16,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: "macro!",
|
||||
@ -64,7 +64,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "mac",
|
||||
generics: [],
|
||||
typeFilter: 14,
|
||||
typeFilter: 16,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: "macro:mac!",
|
||||
@ -80,7 +80,7 @@ const PARSED = [
|
||||
pathWithoutLast: ["a"],
|
||||
pathLast: "mac",
|
||||
generics: [],
|
||||
typeFilter: 14,
|
||||
typeFilter: 16,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: "a::mac!",
|
||||
@ -99,7 +99,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "foo",
|
||||
generics: [],
|
||||
typeFilter: 5,
|
||||
typeFilter: 7,
|
||||
}],
|
||||
userQuery: "-> fn:foo",
|
||||
error: null,
|
||||
@ -121,10 +121,10 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "bar",
|
||||
generics: [],
|
||||
typeFilter: 5,
|
||||
typeFilter: 7,
|
||||
}
|
||||
],
|
||||
typeFilter: 5,
|
||||
typeFilter: 7,
|
||||
}],
|
||||
userQuery: "-> fn:foo<fn:bar>",
|
||||
error: null,
|
||||
@ -146,7 +146,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "bar",
|
||||
generics: [],
|
||||
typeFilter: 5,
|
||||
typeFilter: 7,
|
||||
},
|
||||
{
|
||||
name: "baz::fuzz",
|
||||
@ -154,10 +154,10 @@ const PARSED = [
|
||||
pathWithoutLast: ["baz"],
|
||||
pathLast: "fuzz",
|
||||
generics: [],
|
||||
typeFilter: 4,
|
||||
typeFilter: 6,
|
||||
},
|
||||
],
|
||||
typeFilter: 5,
|
||||
typeFilter: 7,
|
||||
}],
|
||||
userQuery: "-> fn:foo<fn:bar, enum : baz::fuzz>",
|
||||
error: null,
|
||||
|
@ -13,7 +13,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "never",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
typeFilter: -1,
|
||||
@ -32,7 +32,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "never",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: "!",
|
||||
@ -48,7 +48,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "a",
|
||||
generics: [],
|
||||
typeFilter: 14,
|
||||
typeFilter: 16,
|
||||
}],
|
||||
foundElems: 1,
|
||||
original: "a!",
|
||||
|
@ -89,7 +89,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "never",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
}],
|
||||
userQuery: "-> !",
|
||||
error: null,
|
||||
|
@ -43,16 +43,16 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "[]",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
@ -70,7 +70,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "[]",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
{
|
||||
name: "u8",
|
||||
@ -105,7 +105,7 @@ const PARSED = [
|
||||
typeFilter: -1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
@ -140,7 +140,7 @@ const PARSED = [
|
||||
typeFilter: -1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
@ -176,7 +176,7 @@ const PARSED = [
|
||||
typeFilter: -1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
@ -194,7 +194,7 @@ const PARSED = [
|
||||
pathWithoutLast: [],
|
||||
pathLast: "[]",
|
||||
generics: [],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
@ -284,7 +284,7 @@ const PARSED = [
|
||||
typeFilter: -1,
|
||||
},
|
||||
],
|
||||
typeFilter: 15,
|
||||
typeFilter: 1,
|
||||
},
|
||||
],
|
||||
foundElems: 1,
|
||||
|
Loading…
Reference in New Issue
Block a user