diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 880d2f7f37ccd..a01473c632f4b 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2701,7 +2701,29 @@ fn add_without_unwanted_attributes<'hir>( } hir::Attribute::Parsed(AttributeKind::Doc(box d)) => { // Remove attributes from `normal` that should not be inherited by `use` re-export. - let DocAttribute { hidden, inline, cfg, .. } = d; + let DocAttribute { + aliases, + hidden, + inline, + cfg, + auto_cfg: _, + auto_cfg_change: _, + fake_variadic: _, + keyword: _, + attribute: _, + masked: _, + notable_trait: _, + search_unbox: _, + html_favicon_url: _, + html_logo_url: _, + html_playground_url: _, + html_root_url: _, + html_no_source: _, + issue_tracker_base_url: _, + rust_logo: _, + test_attrs: _, + no_crate_inject: _, + } = d; let mut attr = DocAttribute::default(); if is_inline { attr.cfg = cfg.clone(); @@ -2709,6 +2731,7 @@ fn add_without_unwanted_attributes<'hir>( attr.inline = inline.clone(); attr.hidden = hidden.clone(); } + attr.aliases = aliases.clone(); attrs.push(( Cow::Owned(hir::Attribute::Parsed(AttributeKind::Doc(Box::new(attr)))), import_parent, diff --git a/tests/rustdoc-js/auxiliary/reexport-alias.rs b/tests/rustdoc-js/auxiliary/reexport-alias.rs new file mode 100644 index 0000000000000..ba935f6edbdb9 --- /dev/null +++ b/tests/rustdoc-js/auxiliary/reexport-alias.rs @@ -0,0 +1,2 @@ +#[doc(alias = "answer")] +pub fn number() {} diff --git a/tests/rustdoc-js/auxiliary/reexport-search_unbox.rs b/tests/rustdoc-js/auxiliary/reexport-search_unbox.rs new file mode 100644 index 0000000000000..ee9b6acfedd5c --- /dev/null +++ b/tests/rustdoc-js/auxiliary/reexport-search_unbox.rs @@ -0,0 +1,20 @@ +#![feature(rustdoc_internals)] + +#[doc(search_unbox)] +pub struct Inside(T); + +#[doc(search_unbox)] +pub struct Out { + a: A, + b: B, +} + +#[doc(search_unbox)] +pub struct Out1 { + a: [A; N], +} + +#[doc(search_unbox)] +pub struct Out2 { + a: [A; N], +} diff --git a/tests/rustdoc-js/reexport-alias.js b/tests/rustdoc-js/reexport-alias.js new file mode 100644 index 0000000000000..0df4a614eed56 --- /dev/null +++ b/tests/rustdoc-js/reexport-alias.js @@ -0,0 +1,12 @@ +// exact-check + +// This test ensures that inlined reexport items keep the `#[doc(alias = "...")]` +// information. +// This is a regression test for . + +const EXPECTED = { + 'query': 'answer', + 'others': [ + { 'path': 'foo', 'name': 'number', 'is_alias': true }, + ], +}; diff --git a/tests/rustdoc-js/reexport-alias.rs b/tests/rustdoc-js/reexport-alias.rs new file mode 100644 index 0000000000000..e716fe9c7b9df --- /dev/null +++ b/tests/rustdoc-js/reexport-alias.rs @@ -0,0 +1,8 @@ +//@ aux-crate:priv:reexport_alias=reexport-alias.rs +//@ compile-flags: -Zunstable-options --extern equivalent + +#![crate_name = "foo"] + +extern crate reexport_alias; + +pub use reexport_alias::number; diff --git a/tests/rustdoc-js/reexport-search_unbox.js b/tests/rustdoc-js/reexport-search_unbox.js new file mode 100644 index 0000000000000..87c8f63354a61 --- /dev/null +++ b/tests/rustdoc-js/reexport-search_unbox.js @@ -0,0 +1,12 @@ +// exact-check + +// This test ensures that `search_unbox` works even on inlined reexports. + +const EXPECTED = [ + { + 'query': 'Inside -> Out1', + 'others': [ + { 'path': 'foo', 'name': 'alpha' }, + ], + }, +] diff --git a/tests/rustdoc-js/reexport-search_unbox.rs b/tests/rustdoc-js/reexport-search_unbox.rs new file mode 100644 index 0000000000000..2103ac9c9a052 --- /dev/null +++ b/tests/rustdoc-js/reexport-search_unbox.rs @@ -0,0 +1,12 @@ +//@ aux-crate:priv:reexport_search_unbox=reexport-search_unbox.rs +//@ compile-flags: -Zunstable-options --extern equivalent + +#![crate_name = "foo"] + +extern crate reexport_search_unbox; + +pub use reexport_search_unbox::{Inside, Out, Out1, Out2}; + +pub fn alpha(_: Inside) -> Out, Out2> { + loop {} +}