未验证 提交 6618af2c 编写于 作者: M Mazdak Farrokhzad 提交者: GitHub

Rollup merge of #61351 - GuillaumeGomez:stabilize-cfg-rustdoc, r=QuietMisdreavus

Stabilize cfg(doc)

cc #43781.
......@@ -7,4 +7,5 @@
- [Documentation tests](documentation-tests.md)
- [Lints](lints.md)
- [Passes](passes.md)
- [Advanced Features](advanced-features.md)
- [Unstable features](unstable-features.md)
# Advanced Features
The features listed on this page fall outside the rest of the main categories.
## `#[cfg(doc)]`: Documenting platform-/feature-specific information
For conditional compilation, Rustdoc treats your crate the same way the compiler does: Only things
from the host target are available (or from the given `--target` if present), and everything else is
"filtered out" from the crate. This can cause problems if your crate is providing different things
on different targets and you want your documentation to reflect all the available items you
provide.
If you want to make sure an item is seen by Rustdoc regardless of what platform it's targeting,
you can apply `#[cfg(doc)]` to it. Rustdoc sets this whenever it's building documentation, so
anything that uses that flag will make it into documentation it generates. To apply this to an item
with other `#[cfg]` filters on it, you can write something like `#[cfg(any(windows, doc))]`.
This will preserve the item either when built normally on Windows, or when being documented
anywhere.
Please note that this feature is not passed to doctests.
Example:
```rust
/// Token struct that can only be used on Windows.
#[cfg(any(windows, doc))]
pub struct WindowsToken;
/// Token struct that can only be used on Unix.
#[cfg(any(unix, doc))]
pub struct UnixToken;
```
Here, the respective tokens can only be used by dependent crates on their respective platforms, but
they will both appear in documentation.
......@@ -250,7 +250,7 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
let extern_names: Vec<String> = externs.iter().map(|(s,_)| s).cloned().collect();
// Add the rustdoc cfg into the doc build.
// Add the doc cfg into the doc build.
cfgs.push("doc".to_string());
let cpath = Some(input.clone());
......
......@@ -30,7 +30,6 @@
(sym::target_thread_local, sym::cfg_target_thread_local, cfg_fn!(cfg_target_thread_local)),
(sym::target_has_atomic, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)),
(sym::target_has_atomic_load_store, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)),
(sym::doc, sym::doc_cfg, cfg_fn!(doc_cfg)),
];
#[derive(Debug)]
......
......@@ -627,7 +627,6 @@
rustc_test_marker,
rustc_then_this_would_need,
rustc_variance,
rustdoc,
rustfmt,
rust_eh_personality,
rust_eh_unwind_resume,
......
#[cfg(doc)]
pub struct Foo;
fn main() {
let f = Foo; //~ ERROR
}
error[E0425]: cannot find value `Foo` in this scope
--> $DIR/cfg-rustdoc.rs:5:13
|
LL | let f = Foo;
| ^^^ not found in this scope
error: aborting due to previous error
For more information about this error, try `rustc --explain E0425`.
#[cfg(doc)] //~ ERROR: `cfg(doc)` is experimental and subject to change
pub struct SomeStruct;
fn main() {}
error[E0658]: `cfg(doc)` is experimental and subject to change
--> $DIR/feature-gate-doc_cfg-cfg-rustdoc.rs:1:7
|
LL | #[cfg(doc)]
| ^^^
|
= note: for more information, see https://github.com/rust-lang/rust/issues/43781
= help: add `#![feature(doc_cfg)]` to the crate attributes to enable
error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册