Rollup merge of #64094 - kawa-yoiko:rustdoc-search, r=GuillaumeGomez
Improve searching in rustdoc and add tests 👋 I have made searching in rustdoc more intuitive, added a couple more tests and made a little shell script to aid testing. Closes #63005. It took me quite a while to figure out how to run the tests for rustdoc (instead of running tests for other crates with rustdoc); the only pointer I found was [hidden in the rustc book](https://rust-lang.github.io/rustc-guide/rustdoc.html#cheat-sheet). Maybe this could be better documented? I shall be delighted to help if it is desirable.
This commit is contained in:
commit
ab75a1713a
8 changed files with 169 additions and 10 deletions
|
@ -547,6 +547,11 @@ if (!DOMTokenList.prototype.remove) {
|
||||||
results.sort(function(aaa, bbb) {
|
results.sort(function(aaa, bbb) {
|
||||||
var a, b;
|
var a, b;
|
||||||
|
|
||||||
|
// sort by exact match with regard to the last word (mismatch goes later)
|
||||||
|
a = (aaa.word !== val);
|
||||||
|
b = (bbb.word !== val);
|
||||||
|
if (a !== b) { return a - b; }
|
||||||
|
|
||||||
// Sort by non levenshtein results and then levenshtein results by the distance
|
// Sort by non levenshtein results and then levenshtein results by the distance
|
||||||
// (less changes required to match means higher rankings)
|
// (less changes required to match means higher rankings)
|
||||||
a = (aaa.lev);
|
a = (aaa.lev);
|
||||||
|
@ -558,11 +563,6 @@ if (!DOMTokenList.prototype.remove) {
|
||||||
b = (bbb.item.crate !== window.currentCrate);
|
b = (bbb.item.crate !== window.currentCrate);
|
||||||
if (a !== b) { return a - b; }
|
if (a !== b) { return a - b; }
|
||||||
|
|
||||||
// sort by exact match (mismatch goes later)
|
|
||||||
a = (aaa.word !== valLower);
|
|
||||||
b = (bbb.word !== valLower);
|
|
||||||
if (a !== b) { return a - b; }
|
|
||||||
|
|
||||||
// sort by item name length (longer goes later)
|
// sort by item name length (longer goes later)
|
||||||
a = aaa.word.length;
|
a = aaa.word.length;
|
||||||
b = bbb.word.length;
|
b = bbb.word.length;
|
||||||
|
@ -1028,7 +1028,7 @@ if (!DOMTokenList.prototype.remove) {
|
||||||
if (lev > MAX_LEV_DISTANCE) {
|
if (lev > MAX_LEV_DISTANCE) {
|
||||||
continue;
|
continue;
|
||||||
} else if (lev > 0) {
|
} else if (lev > 0) {
|
||||||
lev_add = 1;
|
lev_add = lev / 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1099,10 +1099,6 @@ if (!DOMTokenList.prototype.remove) {
|
||||||
if (index !== -1 || lev <= MAX_LEV_DISTANCE) {
|
if (index !== -1 || lev <= MAX_LEV_DISTANCE) {
|
||||||
if (index !== -1 && paths.length < 2) {
|
if (index !== -1 && paths.length < 2) {
|
||||||
lev = 0;
|
lev = 0;
|
||||||
} else if (searchWords[j] === val) {
|
|
||||||
// Small trick to fix when you're looking for a one letter type
|
|
||||||
// and there are other short named types.
|
|
||||||
lev = -1;
|
|
||||||
}
|
}
|
||||||
if (results[fullId] === undefined) {
|
if (results[fullId] === undefined) {
|
||||||
results[fullId] = {
|
results[fullId] = {
|
||||||
|
|
|
@ -4,5 +4,6 @@ const EXPECTED = {
|
||||||
'others': [
|
'others': [
|
||||||
{ 'path': 'std::vec::Vec', 'name': 'new' },
|
{ 'path': 'std::vec::Vec', 'name': 'new' },
|
||||||
{ 'path': 'std::vec::Vec', 'name': 'ne' },
|
{ 'path': 'std::vec::Vec', 'name': 'ne' },
|
||||||
|
{ 'path': 'std::rc::Rc', 'name': 'ne' },
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
9
src/test/rustdoc-js/exact-match.js
Normal file
9
src/test/rustdoc-js/exact-match.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
const QUERY = 'si::pc';
|
||||||
|
|
||||||
|
const EXPECTED = {
|
||||||
|
'others': [
|
||||||
|
{ 'path': 'exact_match::Si', 'name': 'pc' },
|
||||||
|
{ 'path': 'exact_match::Psi', 'name': 'pc' },
|
||||||
|
{ 'path': 'exact_match::Si', 'name': 'pa' },
|
||||||
|
],
|
||||||
|
};
|
68
src/test/rustdoc-js/exact-match.rs
Normal file
68
src/test/rustdoc-js/exact-match.rs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
macro_rules! imp {
|
||||||
|
($name:ident) => {
|
||||||
|
pub struct $name {
|
||||||
|
pub op: usize,
|
||||||
|
}
|
||||||
|
impl $name {
|
||||||
|
pub fn op() {}
|
||||||
|
pub fn cmp() {}
|
||||||
|
pub fn map() {}
|
||||||
|
pub fn pop() {}
|
||||||
|
pub fn ptr() {}
|
||||||
|
pub fn rpo() {}
|
||||||
|
pub fn drop() {}
|
||||||
|
pub fn copy() {}
|
||||||
|
pub fn zip() {}
|
||||||
|
pub fn sup() {}
|
||||||
|
pub fn pa() {}
|
||||||
|
pub fn pb() {}
|
||||||
|
pub fn pc() {}
|
||||||
|
pub fn pd() {}
|
||||||
|
pub fn pe() {}
|
||||||
|
pub fn pf() {}
|
||||||
|
pub fn pg() {}
|
||||||
|
pub fn ph() {}
|
||||||
|
pub fn pi() {}
|
||||||
|
pub fn pj() {}
|
||||||
|
pub fn pk() {}
|
||||||
|
pub fn pl() {}
|
||||||
|
pub fn pm() {}
|
||||||
|
pub fn pn() {}
|
||||||
|
pub fn po() {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
($name:ident, $($names:ident),*) => {
|
||||||
|
imp!($name);
|
||||||
|
imp!($($names),*);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
macro_rules! en {
|
||||||
|
($name:ident) => {
|
||||||
|
pub enum $name {
|
||||||
|
Ptr,
|
||||||
|
Rp,
|
||||||
|
Rpo,
|
||||||
|
Pt,
|
||||||
|
Drop,
|
||||||
|
Dr,
|
||||||
|
Dro,
|
||||||
|
Sup,
|
||||||
|
Op,
|
||||||
|
Cmp,
|
||||||
|
Map,
|
||||||
|
Mp,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
($name:ident, $($names:ident),*) => {
|
||||||
|
en!($name);
|
||||||
|
en!($($names),*);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
imp!(Ot, Foo, Cmp, Map, Loc, Lac, Toc, Si, Sig, Sip, Psy, Psi, Py, Pi, Pa, Pb, Pc, Pd);
|
||||||
|
imp!(Pe, Pf, Pg, Ph, Pj, Pk, Pl, Pm, Pn, Po, Pq, Pr, Ps, Pt, Pu, Pv, Pw, Px, Pz, Ap, Bp, Cp);
|
||||||
|
imp!(Dp, Ep, Fp, Gp, Hp, Ip, Jp, Kp, Lp, Mp, Np, Op, Pp, Qp, Rp, Sp, Tp, Up, Vp, Wp, Xp, Yp, Zp);
|
||||||
|
|
||||||
|
en!(Place, Plac, Plae, Plce, Pace, Scalar, Scalr, Scaar, Sclar, Salar);
|
||||||
|
|
||||||
|
pub struct P;
|
9
src/test/rustdoc-js/module-substring.js
Normal file
9
src/test/rustdoc-js/module-substring.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
const QUERY = 'ig::pc';
|
||||||
|
|
||||||
|
const EXPECTED = {
|
||||||
|
'others': [
|
||||||
|
{ 'path': 'module_substring::Sig', 'name': 'pc' },
|
||||||
|
{ 'path': 'module_substring::Si', 'name': 'pc' },
|
||||||
|
{ 'path': 'module_substring::Si', 'name': 'pa' },
|
||||||
|
],
|
||||||
|
};
|
68
src/test/rustdoc-js/module-substring.rs
Normal file
68
src/test/rustdoc-js/module-substring.rs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
macro_rules! imp {
|
||||||
|
($name:ident) => {
|
||||||
|
pub struct $name {
|
||||||
|
pub op: usize,
|
||||||
|
}
|
||||||
|
impl $name {
|
||||||
|
pub fn op() {}
|
||||||
|
pub fn cmp() {}
|
||||||
|
pub fn map() {}
|
||||||
|
pub fn pop() {}
|
||||||
|
pub fn ptr() {}
|
||||||
|
pub fn rpo() {}
|
||||||
|
pub fn drop() {}
|
||||||
|
pub fn copy() {}
|
||||||
|
pub fn zip() {}
|
||||||
|
pub fn sup() {}
|
||||||
|
pub fn pa() {}
|
||||||
|
pub fn pb() {}
|
||||||
|
pub fn pc() {}
|
||||||
|
pub fn pd() {}
|
||||||
|
pub fn pe() {}
|
||||||
|
pub fn pf() {}
|
||||||
|
pub fn pg() {}
|
||||||
|
pub fn ph() {}
|
||||||
|
pub fn pi() {}
|
||||||
|
pub fn pj() {}
|
||||||
|
pub fn pk() {}
|
||||||
|
pub fn pl() {}
|
||||||
|
pub fn pm() {}
|
||||||
|
pub fn pn() {}
|
||||||
|
pub fn po() {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
($name:ident, $($names:ident),*) => {
|
||||||
|
imp!($name);
|
||||||
|
imp!($($names),*);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
macro_rules! en {
|
||||||
|
($name:ident) => {
|
||||||
|
pub enum $name {
|
||||||
|
Ptr,
|
||||||
|
Rp,
|
||||||
|
Rpo,
|
||||||
|
Pt,
|
||||||
|
Drop,
|
||||||
|
Dr,
|
||||||
|
Dro,
|
||||||
|
Sup,
|
||||||
|
Op,
|
||||||
|
Cmp,
|
||||||
|
Map,
|
||||||
|
Mp,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
($name:ident, $($names:ident),*) => {
|
||||||
|
en!($name);
|
||||||
|
en!($($names),*);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
imp!(Ot, Foo, Cmp, Map, Loc, Lac, Toc, Si, Sig, Sip, Psy, Psi, Py, Pi, Pa, Pb, Pc, Pd);
|
||||||
|
imp!(Pe, Pf, Pg, Ph, Pj, Pk, Pl, Pm, Pn, Po, Pq, Pr, Ps, Pt, Pu, Pv, Pw, Px, Pz, Ap, Bp, Cp);
|
||||||
|
imp!(Dp, Ep, Fp, Gp, Hp, Ip, Jp, Kp, Lp, Mp, Np, Op, Pp, Qp, Rp, Sp, Tp, Up, Vp, Wp, Xp, Yp, Zp);
|
||||||
|
|
||||||
|
en!(Place, Plac, Plae, Plce, Pace, Scalar, Scalr, Scaar, Sclar, Salar);
|
||||||
|
|
||||||
|
pub struct P;
|
|
@ -3,6 +3,8 @@ const QUERY = 'P';
|
||||||
const EXPECTED = {
|
const EXPECTED = {
|
||||||
'others': [
|
'others': [
|
||||||
{ 'path': 'search_short_types', 'name': 'P' },
|
{ 'path': 'search_short_types', 'name': 'P' },
|
||||||
|
{ 'path': 'search_short_types::VeryLongTypeName', 'name': 'p' },
|
||||||
{ 'path': 'search_short_types', 'name': 'Ap' },
|
{ 'path': 'search_short_types', 'name': 'Ap' },
|
||||||
|
{ 'path': 'search_short_types::VeryLongTypeName', 'name': 'ap' },
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
|
@ -66,3 +66,9 @@ imp!(Dp, Ep, Fp, Gp, Hp, Ip, Jp, Kp, Lp, Mp, Np, Op, Pp, Qp, Rp, Sp, Tp, Up, Vp,
|
||||||
en!(Place, Plac, Plae, Plce, Pace, Scalar, Scalr, Scaar, Sclar, Salar);
|
en!(Place, Plac, Plae, Plce, Pace, Scalar, Scalr, Scaar, Sclar, Salar);
|
||||||
|
|
||||||
pub struct P;
|
pub struct P;
|
||||||
|
|
||||||
|
pub struct VeryLongTypeName;
|
||||||
|
impl VeryLongTypeName {
|
||||||
|
pub fn p() {}
|
||||||
|
pub fn ap() {}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue