From 28724dc5418a79597e2eb229f2b12a398cff08ee Mon Sep 17 00:00:00 2001 From: binarycat Date: Tue, 14 Oct 2025 14:36:01 -0500 Subject: [PATCH 1/3] rustdoc: add regression test for #146216 --- tests/rustdoc-js/alias-path-distance-146214.js | 9 +++++++++ tests/rustdoc-js/alias-path-distance-146214.rs | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 tests/rustdoc-js/alias-path-distance-146214.js create mode 100644 tests/rustdoc-js/alias-path-distance-146214.rs diff --git a/tests/rustdoc-js/alias-path-distance-146214.js b/tests/rustdoc-js/alias-path-distance-146214.js new file mode 100644 index 0000000000000..30413bf9ee2b9 --- /dev/null +++ b/tests/rustdoc-js/alias-path-distance-146214.js @@ -0,0 +1,9 @@ +// exact-check + +// consider path distance for doc aliases +// regression test for + +const EXPECTED = { + 'query': 'Foo::zzz', + 'others': [{ 'path': 'alias_path_distance::Foo', 'name': 'baz' }], +}; diff --git a/tests/rustdoc-js/alias-path-distance-146214.rs b/tests/rustdoc-js/alias-path-distance-146214.rs new file mode 100644 index 0000000000000..09d1068e3edee --- /dev/null +++ b/tests/rustdoc-js/alias-path-distance-146214.rs @@ -0,0 +1,14 @@ +#![crate_name = "alias_path_distance"] + +pub struct Foo; +pub struct Bar; + +impl Foo { + #[doc(alias = "zzz")] + pub fn baz() {} +} + +impl Bar { + #[doc(alias = "zzz")] + pub fn baz() {} +} From 7a6274373c8d945dcdfc7446c4d4e84b1ee29ff9 Mon Sep 17 00:00:00 2001 From: binarycat Date: Tue, 14 Oct 2025 14:36:48 -0500 Subject: [PATCH 2/3] rustdoc: add regression test for #140968 --- tests/rustdoc-js/alias-rank-lower-140968.js | 10 ++++++++++ tests/rustdoc-js/alias-rank-lower-140968.rs | 6 ++++++ 2 files changed, 16 insertions(+) create mode 100644 tests/rustdoc-js/alias-rank-lower-140968.js create mode 100644 tests/rustdoc-js/alias-rank-lower-140968.rs diff --git a/tests/rustdoc-js/alias-rank-lower-140968.js b/tests/rustdoc-js/alias-rank-lower-140968.js new file mode 100644 index 0000000000000..976fd314e429b --- /dev/null +++ b/tests/rustdoc-js/alias-rank-lower-140968.js @@ -0,0 +1,10 @@ +// rank doc aliases lower than exact matches +// regression test for + +const EXPECTED = { + 'query': 'Foo', + 'others': [ + { 'path': 'alias_rank_lower', 'name': 'Foo' }, + { 'path': 'alias_rank_lower', 'name': 'Bar' }, + ], +}; diff --git a/tests/rustdoc-js/alias-rank-lower-140968.rs b/tests/rustdoc-js/alias-rank-lower-140968.rs new file mode 100644 index 0000000000000..1b0d2abfdcdcc --- /dev/null +++ b/tests/rustdoc-js/alias-rank-lower-140968.rs @@ -0,0 +1,6 @@ +#![crate_name = "alias_rank_lower"] + +pub struct Foo; + +#[doc(alias = "Foo")] +pub struct Bar; From 07072812ca00473176be7df5a0ed18517c9c0889 Mon Sep 17 00:00:00 2001 From: binarycat Date: Tue, 14 Oct 2025 15:16:11 -0500 Subject: [PATCH 3/3] rustdoc: account for path distance in doc aliases --- src/librustdoc/html/static/js/search.js | 13 +++++++++++-- tests/rustdoc-js/alias-path-distance-146214.js | 18 ++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js index 0929d351463cc..f187d8d703398 100644 --- a/src/librustdoc/html/static/js/search.js +++ b/src/librustdoc/html/static/js/search.js @@ -3933,16 +3933,25 @@ class DocSearch { * @returns {Promise} */ const handleAlias = async(name, alias, dist, index) => { + const item = nonnull(await this.getRow(alias, false)); + // space both is an alias for ::, + // and is also allowed to appear in doc alias names + const path_dist = name.includes(" ") || parsedQuery.elems.length === 0 ? + 0 : checkRowPath(parsedQuery.elems[0].pathWithoutLast, item); + // path distance exceeds max, omit alias from results + if (path_dist === null) { + return null; + } return { id: alias, dist, - path_dist: 0, + path_dist, index, alias: name, is_alias: true, elems: [], // only used in type-based queries returned: [], // only used in type-based queries - item: nonnull(await this.getRow(alias, false)), + item, }; }; /** diff --git a/tests/rustdoc-js/alias-path-distance-146214.js b/tests/rustdoc-js/alias-path-distance-146214.js index 30413bf9ee2b9..722cf00de9100 100644 --- a/tests/rustdoc-js/alias-path-distance-146214.js +++ b/tests/rustdoc-js/alias-path-distance-146214.js @@ -3,7 +3,17 @@ // consider path distance for doc aliases // regression test for -const EXPECTED = { - 'query': 'Foo::zzz', - 'others': [{ 'path': 'alias_path_distance::Foo', 'name': 'baz' }], -}; +const EXPECTED = [ + { + 'query': 'Foo::zzz', + 'others': [ + { 'path': 'alias_path_distance::Foo', 'name': 'baz' }, + ], + }, + { + 'query': '"Foo::zzz"', + 'others': [ + { 'path': 'alias_path_distance::Foo', 'name': 'baz' }, + ], + }, +];