rustdoc-search: count path edits with separate edit limit
Since the two are counted separately elsewhere, they should get
their own limits, too. The biggest problem with combining them
is that paths are loosely checked by not requiring every component
to match, which means that if they are short and matched loosely,
they can easily find "drunk typist" matches that make no sense,
like this old result:
std::collections::btree_map::itermut matching slice::itermut
maxEditDistance = ("slice::itermut".length) / 3 = 14 / 3 = 4
editDistance("std", "slice") = 4
editDistance("itermut", "itermut") = 0
4 + 0 <= 4 PASS
Of course, `slice::itermut` should not match stuff from btreemap.
`slice` should not match `std`.
The new result counts them separately:
maxPathEditDistance = "slice".length / 3 = 5 / 3 = 1
maxEditDistance = "itermut".length / 3 = 7 / 3 = 2
editDistance("std", "slice") = 4
4 <= 1 FAIL
Effectively, this makes path queries less "typo-resistant".
It's not zero, but it means `vec` won't match the `v1` prelude.
Queries without parent paths are unchanged.
This commit is contained in:
@@ -3,6 +3,5 @@ const EXPECTED = {
|
||||
'others': [
|
||||
{ 'path': 'exact_match::Si', 'name': 'pc' },
|
||||
{ 'path': 'exact_match::Psi', 'name': 'pc' },
|
||||
{ 'path': 'exact_match::Si', 'name': 'pa' },
|
||||
],
|
||||
};
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
const EXPECTED = {
|
||||
'query': 'ig::pc',
|
||||
'others': [
|
||||
{ 'path': 'module_substring::Sig', 'name': 'pc' },
|
||||
{ 'path': 'module_substring::Si', 'name': 'pc' },
|
||||
],
|
||||
};
|
||||
const EXPECTED = [
|
||||
{
|
||||
'query': 'ig::pc',
|
||||
'others': [
|
||||
{ 'path': 'module_substring::Sig', 'name': 'pc' },
|
||||
],
|
||||
},
|
||||
{
|
||||
'query': 'si::pc',
|
||||
'others': [
|
||||
{ 'path': 'module_substring::Si', 'name': 'pc' },
|
||||
{ 'path': 'module_substring::Sig', 'name': 'pc' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
35
tests/rustdoc-js/path-maxeditdistance.js
Normal file
35
tests/rustdoc-js/path-maxeditdistance.js
Normal file
@@ -0,0 +1,35 @@
|
||||
// exact-check
|
||||
|
||||
const EXPECTED = [
|
||||
{
|
||||
'query': 'xxxxxxxxxxx::hocuspocusprestidigitation',
|
||||
// do not match abracadabra::hocuspocusprestidigitation
|
||||
'others': [],
|
||||
},
|
||||
{
|
||||
// exact match
|
||||
'query': 'abracadabra::hocuspocusprestidigitation',
|
||||
'others': [
|
||||
{ 'path': 'abracadabra', 'name': 'HocusPocusPrestidigitation' },
|
||||
],
|
||||
},
|
||||
{
|
||||
// swap br/rb; that's edit distance 2, where maxPathEditDistance = 3 (11 / 3)
|
||||
'query': 'arbacadarba::hocuspocusprestidigitation',
|
||||
'others': [
|
||||
{ 'path': 'abracadabra', 'name': 'HocusPocusPrestidigitation' },
|
||||
],
|
||||
},
|
||||
{
|
||||
// truncate 5 chars, where maxEditDistance = 7 (21 / 3)
|
||||
'query': 'abracadarba::hocusprestidigitation',
|
||||
'others': [
|
||||
{ 'path': 'abracadabra', 'name': 'HocusPocusPrestidigitation' },
|
||||
],
|
||||
},
|
||||
{
|
||||
// truncate 9 chars, where maxEditDistance = 5 (17 / 3)
|
||||
'query': 'abracadarba::hprestidigitation',
|
||||
'others': [],
|
||||
},
|
||||
];
|
||||
3
tests/rustdoc-js/path-maxeditdistance.rs
Normal file
3
tests/rustdoc-js/path-maxeditdistance.rs
Normal file
@@ -0,0 +1,3 @@
|
||||
#![crate_name="abracadabra"]
|
||||
|
||||
pub struct HocusPocusPrestidigitation;
|
||||
@@ -1,13 +1,13 @@
|
||||
// exact-check
|
||||
|
||||
const EXPECTED = {
|
||||
'query': 'b::ccccccc',
|
||||
'query': 'bbbbbb::ccccccc',
|
||||
'others': [
|
||||
// `ccccccc` is an exact match for all three of these.
|
||||
// However `b` is a closer match for `bb` than for any
|
||||
// of the others, so it ought to go first.
|
||||
{ 'path': 'path_ordering::bb', 'name': 'Ccccccc' },
|
||||
{ 'path': 'path_ordering::aa', 'name': 'Ccccccc' },
|
||||
{ 'path': 'path_ordering::dd', 'name': 'Ccccccc' },
|
||||
{ 'path': 'path_ordering::bbbbbb', 'name': 'Ccccccc' },
|
||||
{ 'path': 'path_ordering::abbbbb', 'name': 'Ccccccc' },
|
||||
{ 'path': 'path_ordering::dbbbbb', 'name': 'Ccccccc' },
|
||||
],
|
||||
};
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
pub mod dd {
|
||||
pub mod dbbbbb {
|
||||
pub struct Ccccccc;
|
||||
}
|
||||
pub mod aa {
|
||||
pub mod abbbbb {
|
||||
pub struct Ccccccc;
|
||||
}
|
||||
pub mod bb {
|
||||
pub mod bbbbbb {
|
||||
pub struct Ccccccc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user