mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-04 19:29:07 +00:00
don't inline pub use some_crate
unless directly asked to
This commit is contained in:
parent
653da4fd00
commit
401cb6bb53
@ -186,6 +186,9 @@ mod bar {
|
|||||||
|
|
||||||
Now we'll have a `Re-exports` line, and `Bar` will not link to anywhere.
|
Now we'll have a `Re-exports` line, and `Bar` will not link to anywhere.
|
||||||
|
|
||||||
|
One special case: In Rust 2018 and later, if you `pub use` one of your dependencies, `rustdoc` will
|
||||||
|
not eagerly inline it as a module unless you add `#[doc(inline)}`.
|
||||||
|
|
||||||
## `#[doc(hidden)]`
|
## `#[doc(hidden)]`
|
||||||
|
|
||||||
Any item annotated with `#[doc(hidden)]` will not appear in the documentation, unless
|
Any item annotated with `#[doc(hidden)]` will not appear in the documentation, unless
|
||||||
|
@ -3499,13 +3499,16 @@ impl Clean<Vec<Item>> for doctree::Import {
|
|||||||
// forcefully don't inline if this is not public or if the
|
// forcefully don't inline if this is not public or if the
|
||||||
// #[doc(no_inline)] attribute is present.
|
// #[doc(no_inline)] attribute is present.
|
||||||
// Don't inline doc(hidden) imports so they can be stripped at a later stage.
|
// Don't inline doc(hidden) imports so they can be stripped at a later stage.
|
||||||
let denied = !self.vis.node.is_pub() || self.attrs.iter().any(|a| {
|
let mut denied = !self.vis.node.is_pub() || self.attrs.iter().any(|a| {
|
||||||
a.name() == "doc" && match a.meta_item_list() {
|
a.name() == "doc" && match a.meta_item_list() {
|
||||||
Some(l) => attr::list_contains_name(&l, "no_inline") ||
|
Some(l) => attr::list_contains_name(&l, "no_inline") ||
|
||||||
attr::list_contains_name(&l, "hidden"),
|
attr::list_contains_name(&l, "hidden"),
|
||||||
None => false,
|
None => false,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// Also check whether imports were asked to be inlined, in case we're trying to re-export a
|
||||||
|
// crate in Rust 2018+
|
||||||
|
let please_inline = self.attrs.lists("doc").has_word("inline");
|
||||||
let path = self.path.clean(cx);
|
let path = self.path.clean(cx);
|
||||||
let inner = if self.glob {
|
let inner = if self.glob {
|
||||||
if !denied {
|
if !denied {
|
||||||
@ -3518,6 +3521,16 @@ impl Clean<Vec<Item>> for doctree::Import {
|
|||||||
Import::Glob(resolve_use_source(cx, path))
|
Import::Glob(resolve_use_source(cx, path))
|
||||||
} else {
|
} else {
|
||||||
let name = self.name;
|
let name = self.name;
|
||||||
|
if !please_inline {
|
||||||
|
match path.def {
|
||||||
|
Def::Mod(did) => if !did.is_local() && did.index == CRATE_DEF_INDEX {
|
||||||
|
// if we're `pub use`ing an extern crate root, don't inline it unless we
|
||||||
|
// were specifically asked for it
|
||||||
|
denied = true;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
if !denied {
|
if !denied {
|
||||||
let mut visited = FxHashSet::default();
|
let mut visited = FxHashSet::default();
|
||||||
if let Some(items) = inline::try_inline(cx, path.def, name, &mut visited) {
|
if let Some(items) = inline::try_inline(cx, path.def, name, &mut visited) {
|
||||||
|
15
src/test/rustdoc/inline_cross/auxiliary/use_crate.rs
Normal file
15
src/test/rustdoc/inline_cross/auxiliary/use_crate.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Copyright 2018 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 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
pub mod asdf {
|
||||||
|
pub struct SomeStruct;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait SomeTrait {}
|
11
src/test/rustdoc/inline_cross/auxiliary/use_crate_2.rs
Normal file
11
src/test/rustdoc/inline_cross/auxiliary/use_crate_2.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Copyright 2018 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 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
pub struct SomethingElse;
|
37
src/test/rustdoc/inline_cross/use_crate.rs
Normal file
37
src/test/rustdoc/inline_cross/use_crate.rs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright 2018 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 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// aux-build:use_crate.rs
|
||||||
|
// aux-build:use_crate_2.rs
|
||||||
|
// build-aux-docs
|
||||||
|
// edition:2018
|
||||||
|
// compile-flags:--extern use_crate --extern use_crate_2 -Z unstable-options
|
||||||
|
|
||||||
|
// During the buildup to Rust 2018, rustdoc would eagerly inline `pub use some_crate;` as if it
|
||||||
|
// were a module, so we changed it to make `pub use`ing crate roots remain as a `pub use` statement
|
||||||
|
// in docs... unless you added `#[doc(inline)]`.
|
||||||
|
|
||||||
|
#![crate_name = "local"]
|
||||||
|
|
||||||
|
// @!has-dir local/use_crate
|
||||||
|
// @has local/index.html
|
||||||
|
// @has - '//code' 'pub use use_crate'
|
||||||
|
pub use use_crate;
|
||||||
|
|
||||||
|
// @has-dir local/asdf
|
||||||
|
// @has local/asdf/index.html
|
||||||
|
// @has local/index.html '//a/@href' 'asdf/index.html'
|
||||||
|
pub use use_crate::asdf;
|
||||||
|
|
||||||
|
// @has-dir local/use_crate_2
|
||||||
|
// @has local/use_crate_2/index.html
|
||||||
|
// @has local/index.html '//a/@href' 'use_crate_2/index.html'
|
||||||
|
#[doc(inline)]
|
||||||
|
pub use use_crate_2;
|
@ -18,6 +18,7 @@
|
|||||||
extern crate src_links_external;
|
extern crate src_links_external;
|
||||||
|
|
||||||
// @has foo/bar/index.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#11'
|
// @has foo/bar/index.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#11'
|
||||||
|
#[doc(inline)]
|
||||||
pub use src_links_external as bar;
|
pub use src_links_external as bar;
|
||||||
|
|
||||||
// @has foo/bar/struct.Foo.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#11'
|
// @has foo/bar/struct.Foo.html '//a/@href' '../../src/src_links_external/src-links-external.rs.html#11'
|
||||||
|
Loading…
Reference in New Issue
Block a user