]> git.lizzy.rs Git - rust.git/commitdiff
stabilize cfg(doctest)
authorGuillaume Gomez <guillaume1.gomez@gmail.com>
Thu, 1 Aug 2019 21:18:37 +0000 (23:18 +0200)
committerGuillaume Gomez <guillaume1.gomez@gmail.com>
Tue, 29 Oct 2019 12:42:55 +0000 (13:42 +0100)
src/doc/rustdoc/src/documentation-tests.md
src/doc/rustdoc/src/unstable-features.md
src/libsyntax/feature_gate/accepted.rs
src/libsyntax/feature_gate/active.rs
src/libsyntax/feature_gate/builtin_attrs.rs
src/test/rustdoc-ui/cfg-test.rs
src/test/rustdoc-ui/cfg-test.stdout
src/test/rustdoc/cfg-doctest.rs
src/test/ui/feature-gate/feature-gate-cfg_doctest.rs [deleted file]
src/test/ui/feature-gate/feature-gate-cfg_doctest.stderr [deleted file]

index c9acd3c307b54690851393d1e5304d78cbcee2ad..68b9c0d241422664212524d0f035adc51bcf3a5c 100644 (file)
@@ -379,3 +379,34 @@ However, it's preferable to use fenced code blocks over indented code blocks.
 Not only are fenced code blocks considered more idiomatic for Rust code,
 but there is no way to use directives such as `ignore` or `should_panic` with
 indented code blocks.
+
+### Include items only when collecting doctests
+
+Rustdoc's [documentation tests] can do some things that regular unit tests can't, so it can
+sometimes be useful to extend your doctests with samples that wouldn't otherwise need to be in
+documentation. To this end, Rustdoc allows you to have certain items only appear when it's
+collecting doctests, so you can utilize doctest functionality without forcing the test to appear in
+docs, or to find an arbitrary private item to include it on.
+
+When compiling a crate for use in doctests (with `--test` option), rustdoc will set `cfg(doctest)`.
+Note that they will still link against only the public items of your crate; if you need to
+test private items, either make items conditionally public via `cfg(doctest)` or write a unit test.
+
+In this example, we're adding doctests that we know won't compile, to verify that our struct can
+only take in valid data:
+
+```rust
+/// We have a struct here. Remember it doesn't accept negative numbers!
+pub struct MyStruct(usize);
+
+/// ```compile_fail
+/// let x = my_crate::MyStruct(-5);
+/// ```
+#[cfg(doctest)]
+pub struct MyStructOnlyTakesUsize;
+```
+
+Please note that the struct `MyStructOnlyTakesUsize` will not appear in documentation or in the
+public API considering it only exists when running rustdoc with the `--test` option.
+
+[documentation tests]: documentation-tests.html
index 49d05b5038df74dd8ff7bd53545adc7fdfc123d9..3c3e72aa3795912e5cedfa08930e439ef3dd24c8 100644 (file)
@@ -211,36 +211,6 @@ pub struct BigX;
 Then, when looking for it through the `rustdoc` search, if you enter "x" or
 "big", search will show the `BigX` struct first.
 
-### Include items only when collecting doctests
-
-Rustdoc's [documentation tests] can do some things that regular unit tests can't, so it can
-sometimes be useful to extend your doctests with samples that wouldn't otherwise need to be in
-documentation. To this end, Rustdoc allows you to have certain items only appear when it's
-collecting doctests, so you can utilize doctest functionality without forcing the test to appear in
-docs, or to find an arbitrary private item to include it on.
-
-If you add `#![feature(cfg_doctest)]` to your crate, Rustdoc will set `cfg(doctest)` when collecting
-doctests. Note that they will still link against only the public items of your crate; if you need to
-test private items, unit tests are still the way to go.
-
-In this example, we're adding doctests that we know won't compile, to verify that our struct can
-only take in valid data:
-
-```rust
-#![feature(cfg_doctest)]
-
-/// We have a struct here. Remember it doesn't accept negative numbers!
-pub struct MyStruct(usize);
-
-/// ```compile_fail
-/// let x = my_crate::MyStruct(-5);
-/// ```
-#[cfg(doctest)]
-pub struct MyStructOnlyTakesUsize;
-```
-
-[documentation tests]: documentation-tests.html
-
 ## Unstable command-line arguments
 
 These features are enabled by passing a command-line flag to Rustdoc, but the flags in question are
index d309a17298baa3471f42d7d954185149be348b22..a1cf2d421084ef60867468e68ce798f013aa31ab 100644 (file)
@@ -251,6 +251,8 @@ macro_rules! declare_features {
     (accepted, non_exhaustive, "1.40.0", Some(44109), None),
     /// Allows calling constructor functions in `const fn`.
     (accepted, const_constructor, "1.40.0", Some(61456), None),
+    /// Allows the use of `#[cfg(doctest)]`, set when rustdoc is collecting doctests.
+    (accepted, cfg_doctest, "1.40.0", Some(62210), None),
 
     // -------------------------------------------------------------------------
     // feature-group-end: accepted features
index 22638a1376c72cab90b979f054742e37074eb04a..736a363bbfc0a020d94eae30a02377f82dc2f9d0 100644 (file)
@@ -506,9 +506,6 @@ pub fn set(&self, features: &mut Features, span: Span) {
     /// Allows `async || body` closures.
     (active, async_closure, "1.37.0", Some(62290), None),
 
-    /// Allows the use of `#[cfg(doctest)]`; set when rustdoc is collecting doctests.
-    (active, cfg_doctest, "1.37.0", Some(62210), None),
-
     /// Allows `[x; N]` where `x` is a constant (RFC 2203).
     (active, const_in_array_repeat_expressions, "1.37.0", Some(49147), None),
 
index efe84238795a5739ab84251cf58b6ec4557f91c0..eb811c3e0ff9b590ba03e9dabf0d1f8729ee437f 100644 (file)
@@ -31,7 +31,6 @@ macro_rules! cfg_fn {
     (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::rustdoc, sym::doc_cfg, cfg_fn!(doc_cfg)),
-    (sym::doctest, sym::cfg_doctest, cfg_fn!(cfg_doctest)),
 ];
 
 #[derive(Debug)]
index e88ddfb9e2ad206d858d8f8c3111ead2776da8b9..587fe21f8fa738b629ab49927188e4b2b9599575 100644 (file)
@@ -5,8 +5,6 @@
 // Crates like core have doctests gated on `cfg(not(test))` so we need to make
 // sure `cfg(test)` is not active when running `rustdoc --test`.
 
-#![feature(cfg_doctest)]
-
 /// this doctest will be ignored:
 ///
 /// ```
index 86141aed5c3f2b0cfee6922ea5f17d08ad373503..474f13cfa9843d874421d079443393d25713e688 100644 (file)
@@ -1,7 +1,7 @@
 
 running 2 tests
-test $DIR/cfg-test.rs - Bar (line 28) ... ok
-test $DIR/cfg-test.rs - Foo (line 20) ... ok
+test $DIR/cfg-test.rs - Bar (line 26) ... ok
+test $DIR/cfg-test.rs - Foo (line 18) ... ok
 
 test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
 
index fca6d1029f981ea7b108b4bd40c553d481b5fe9d..6a9d26a4bb78cbaabc2a6458a6ed71edca3eba1a 100644 (file)
@@ -1,5 +1,3 @@
-#![feature(cfg_doctest)]
-
 // @!has cfg_doctest/struct.SomeStruct.html
 // @!has cfg_doctest/index.html '//a/@href' 'struct.SomeStruct.html'
 
diff --git a/src/test/ui/feature-gate/feature-gate-cfg_doctest.rs b/src/test/ui/feature-gate/feature-gate-cfg_doctest.rs
deleted file mode 100644 (file)
index 308f68b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#[cfg(doctest)] //~ ERROR
-pub struct SomeStruct;
-
-fn main() {}
diff --git a/src/test/ui/feature-gate/feature-gate-cfg_doctest.stderr b/src/test/ui/feature-gate/feature-gate-cfg_doctest.stderr
deleted file mode 100644 (file)
index 5ab45e0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-error[E0658]: `cfg(doctest)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg_doctest.rs:1:7
-   |
-LL | #[cfg(doctest)]
-   |       ^^^^^^^
-   |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/62210
-   = help: add `#![feature(cfg_doctest)]` to the crate attributes to enable
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0658`.