Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve searching in rustdoc and add tests #64094

Merged
merged 1 commit into from
Sep 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions src/librustdoc/html/static/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,11 @@ if (!DOMTokenList.prototype.remove) {
results.sort(function(aaa, bbb) {
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
// (less changes required to match means higher rankings)
a = (aaa.lev);
Expand All @@ -558,11 +563,6 @@ if (!DOMTokenList.prototype.remove) {
b = (bbb.item.crate !== window.currentCrate);
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)
a = aaa.word.length;
b = bbb.word.length;
Expand Down Expand Up @@ -1028,7 +1028,7 @@ if (!DOMTokenList.prototype.remove) {
if (lev > MAX_LEV_DISTANCE) {
continue;
} else if (lev > 0) {
lev_add = 1;
lev_add = lev / 10;
}
}

Expand Down Expand Up @@ -1099,10 +1099,6 @@ if (!DOMTokenList.prototype.remove) {
if (index !== -1 || lev <= MAX_LEV_DISTANCE) {
if (index !== -1 && paths.length < 2) {
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) {
results[fullId] = {
Expand Down
1 change: 1 addition & 0 deletions src/test/rustdoc-js-std/vec-new.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ const EXPECTED = {
'others': [
{ 'path': 'std::vec::Vec', 'name': 'new' },
{ 'path': 'std::vec::Vec', 'name': 'ne' },
{ 'path': 'std::rc::Rc', 'name': 'ne' },
],
};
9 changes: 9 additions & 0 deletions src/test/rustdoc-js/exact-match.js
Original file line number Diff line number Diff line change
@@ -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 changes: 68 additions & 0 deletions src/test/rustdoc-js/exact-match.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions src/test/rustdoc-js/module-substring.js
Original file line number Diff line number Diff line change
@@ -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 changes: 68 additions & 0 deletions src/test/rustdoc-js/module-substring.rs
Original file line number Diff line number Diff line change
@@ -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;
2 changes: 2 additions & 0 deletions src/test/rustdoc-js/search-short-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ const QUERY = 'P';
const EXPECTED = {
'others': [
{ 'path': 'search_short_types', 'name': 'P' },
{ 'path': 'search_short_types::VeryLongTypeName', 'name': 'p' },
{ 'path': 'search_short_types', 'name': 'Ap' },
{ 'path': 'search_short_types::VeryLongTypeName', 'name': 'ap' },
],
};
6 changes: 6 additions & 0 deletions src/test/rustdoc-js/search-short-types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

pub struct P;

pub struct VeryLongTypeName;
impl VeryLongTypeName {
pub fn p() {}
pub fn ap() {}
}