diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 14ca6340316..0801da19c82 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2389,9 +2389,11 @@ impl Clean> for doctree::Import { // We consider inlining the documentation of `pub use` statements, but we // forcefully don't inline if this is not public or if the // #[doc(no_inline)] attribute is present. + // Don't inline doc(hidden) imports so they can be stripped at a later stage. let denied = self.vis != hir::Public || self.attrs.iter().any(|a| { &a.name()[..] == "doc" && match a.meta_item_list() { - Some(l) => attr::contains_name(l, "no_inline"), + Some(l) => attr::contains_name(l, "no_inline") || + attr::contains_name(l, "hidden"), None => false, } }); diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index c7b571c2d19..b0b55a76e26 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -245,7 +245,9 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { let def_did = def.def_id(); let use_attrs = tcx.map.attrs(id).clean(self.cx); - let is_no_inline = use_attrs.list("doc").has_word("no_inline"); + // Don't inline doc(hidden) imports so they can be stripped at a later stage. + let is_no_inline = use_attrs.list("doc").has_word("no_inline") || + use_attrs.list("doc").has_word("hidden"); // For cross-crate impl inlining we need to know whether items are // reachable in documentation - a previously nonreachable item can be diff --git a/src/test/rustdoc/inline_cross/hidden-use.rs b/src/test/rustdoc/inline_cross/hidden-use.rs new file mode 100644 index 00000000000..dd668c20362 --- /dev/null +++ b/src/test/rustdoc/inline_cross/hidden-use.rs @@ -0,0 +1,22 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// aux-build:rustdoc-hidden.rs +// build-aux-docs +// ignore-cross-compile + +extern crate rustdoc_hidden; + +// @has hidden_use/index.html +// @!has - 'rustdoc_hidden' +// @!has - 'Bar' +// @!has hidden_use/struct.Bar.html +#[doc(hidden)] +pub use rustdoc_hidden::Bar; diff --git a/src/test/rustdoc/inline_local/hidden-use.rs b/src/test/rustdoc/inline_local/hidden-use.rs new file mode 100644 index 00000000000..1b1dafcf58b --- /dev/null +++ b/src/test/rustdoc/inline_local/hidden-use.rs @@ -0,0 +1,20 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +mod private { + pub struct Foo {} +} + +// @has hidden_use/index.html +// @!has - 'private' +// @!has - 'Foo' +// @!has hidden_use/struct.Foo.html +#[doc(hidden)] +pub use private::Foo;