Rollup merge of #148115 - fmease:rustdoc-no-capture, r=notriddle

rustdoc: Rename unstable option `--nocapture` to `--no-capture` in accordance with `libtest`

Context: https://github.com/rust-lang/rust/issues/133073, https://github.com/rust-lang/rust/pull/139224 (TL;DR: `libtest` has soft-deprecated `--nocapture` in favor a new & stable `--no-capture`; we should follow suit).

Since the rustdoc flag is unstable (tracking issue: https://github.com/rust-lang/rust/issues/148116), we're allowed to remove the old flag immediately. However since the flag has existed for 4 years we could hard-deprecate the flag first or at least be considerate and provide a diagnostic referring users to the new flag. This PR does neither. Let me know what you would think would be best.

Cargo doesn't use this flag, not yet at least (https://github.com/rust-lang/cargo/pull/9705), so we really are free to sunset this flag without bigger consequences.
This commit is contained in:
Jacob Pratt
2025-10-30 02:43:43 -04:00
committed by GitHub
13 changed files with 22 additions and 22 deletions

View File

@@ -362,7 +362,7 @@ Using `index-page` option enables `enable-index-page` option as well.
This feature allows the generation of a default index-page which lists the generated crates. This feature allows the generation of a default index-page which lists the generated crates.
## `--nocapture`: disable output capture for test ## `--no-capture`: disable output capture for test
When this flag is used with `--test`, the output (stdout and stderr) of your tests won't be When this flag is used with `--test`, the output (stdout and stderr) of your tests won't be
captured by rustdoc. Instead, the output will be directed to your terminal, captured by rustdoc. Instead, the output will be directed to your terminal,

View File

@@ -155,7 +155,7 @@ pub(crate) struct Options {
/// Whether doctests should emit unused externs /// Whether doctests should emit unused externs
pub(crate) json_unused_externs: JsonUnusedExterns, pub(crate) json_unused_externs: JsonUnusedExterns,
/// Whether to skip capturing stdout and stderr of tests. /// Whether to skip capturing stdout and stderr of tests.
pub(crate) nocapture: bool, pub(crate) no_capture: bool,
/// Configuration for scraping examples from the current crate. If this option is Some(..) then /// Configuration for scraping examples from the current crate. If this option is Some(..) then
/// the compiler will scrape examples and not generate documentation. /// the compiler will scrape examples and not generate documentation.
@@ -211,7 +211,7 @@ impl fmt::Debug for Options {
.field("no_run", &self.no_run) .field("no_run", &self.no_run)
.field("test_builder_wrappers", &self.test_builder_wrappers) .field("test_builder_wrappers", &self.test_builder_wrappers)
.field("remap-file-prefix", &self.remap_path_prefix) .field("remap-file-prefix", &self.remap_path_prefix)
.field("nocapture", &self.nocapture) .field("no_capture", &self.no_capture)
.field("scrape_examples_options", &self.scrape_examples_options) .field("scrape_examples_options", &self.scrape_examples_options)
.field("unstable_features", &self.unstable_features) .field("unstable_features", &self.unstable_features)
.finish() .finish()
@@ -783,7 +783,7 @@ impl Options {
let run_check = matches.opt_present("check"); let run_check = matches.opt_present("check");
let generate_redirect_map = matches.opt_present("generate-redirect-map"); let generate_redirect_map = matches.opt_present("generate-redirect-map");
let show_type_layout = matches.opt_present("show-type-layout"); let show_type_layout = matches.opt_present("show-type-layout");
let nocapture = matches.opt_present("nocapture"); let no_capture = matches.opt_present("no-capture");
let generate_link_to_definition = matches.opt_present("generate-link-to-definition"); let generate_link_to_definition = matches.opt_present("generate-link-to-definition");
let generate_macro_expansion = matches.opt_present("generate-macro-expansion"); let generate_macro_expansion = matches.opt_present("generate-macro-expansion");
let extern_html_root_takes_precedence = let extern_html_root_takes_precedence =
@@ -854,7 +854,7 @@ impl Options {
no_run, no_run,
test_builder_wrappers, test_builder_wrappers,
remap_path_prefix, remap_path_prefix,
nocapture, no_capture,
crate_name, crate_name,
output_format, output_format,
json_unused_externs, json_unused_externs,

View File

@@ -326,8 +326,8 @@ pub(crate) fn run_tests(
let mut test_args = Vec::with_capacity(rustdoc_options.test_args.len() + 1); let mut test_args = Vec::with_capacity(rustdoc_options.test_args.len() + 1);
test_args.insert(0, "rustdoctest".to_string()); test_args.insert(0, "rustdoctest".to_string());
test_args.extend_from_slice(&rustdoc_options.test_args); test_args.extend_from_slice(&rustdoc_options.test_args);
if rustdoc_options.nocapture { if rustdoc_options.no_capture {
test_args.push("--nocapture".to_string()); test_args.push("--no-capture".to_string());
} }
let mut nb_errors = 0; let mut nb_errors = 0;
@@ -644,8 +644,8 @@ fn run_test(
// tested as standalone tests. // tested as standalone tests.
return (Duration::default(), Err(TestFailure::CompileError)); return (Duration::default(), Err(TestFailure::CompileError));
} }
if !rustdoc_options.nocapture { if !rustdoc_options.no_capture {
// If `nocapture` is disabled, then we don't display rustc's output when compiling // If `no_capture` is disabled, then we don't display rustc's output when compiling
// the merged doctests. // the merged doctests.
compiler.stderr(Stdio::null()); compiler.stderr(Stdio::null());
} }
@@ -721,8 +721,8 @@ fn run_test(
// tested as standalone tests. // tested as standalone tests.
return (instant.elapsed(), Err(TestFailure::CompileError)); return (instant.elapsed(), Err(TestFailure::CompileError));
} }
if !rustdoc_options.nocapture { if !rustdoc_options.no_capture {
// If `nocapture` is disabled, then we don't display rustc's output when compiling // If `no_capture` is disabled, then we don't display rustc's output when compiling
// the merged doctests. // the merged doctests.
runner_compiler.stderr(Stdio::null()); runner_compiler.stderr(Stdio::null());
} }
@@ -821,7 +821,7 @@ fn run_test(
cmd.current_dir(run_directory); cmd.current_dir(run_directory);
} }
let result = if doctest.is_multiple_tests() || rustdoc_options.nocapture { let result = if doctest.is_multiple_tests() || rustdoc_options.no_capture {
cmd.status().map(|status| process::Output { cmd.status().map(|status| process::Output {
status, status,
stdout: Vec::new(), stdout: Vec::new(),
@@ -1016,7 +1016,7 @@ impl CreateRunnableDocTests {
.span(scraped_test.span) .span(scraped_test.span)
.build(dcx); .build(dcx);
let is_standalone = !doctest.can_be_merged let is_standalone = !doctest.can_be_merged
|| self.rustdoc_options.nocapture || self.rustdoc_options.no_capture
|| self.rustdoc_options.test_args.iter().any(|arg| arg == "--show-output"); || self.rustdoc_options.test_args.iter().any(|arg| arg == "--show-output");
if is_standalone { if is_standalone {
let test_desc = self.generate_test_desc_and_fn(doctest, scraped_test); let test_desc = self.generate_test_desc_and_fn(doctest, scraped_test);

View File

@@ -586,7 +586,7 @@ fn opts() -> Vec<RustcOptGroup> {
"Include the memory layout of types in the docs", "Include the memory layout of types in the docs",
"", "",
), ),
opt(Unstable, Flag, "", "nocapture", "Don't capture stdout and stderr of tests", ""), opt(Unstable, Flag, "", "no-capture", "Don't capture stdout and stderr of tests", ""),
opt( opt(
Unstable, Unstable,
Flag, Flag,

View File

@@ -158,7 +158,7 @@ Options:
Remap source names in compiler messages Remap source names in compiler messages
--show-type-layout --show-type-layout
Include the memory layout of types in the docs Include the memory layout of types in the docs
--nocapture Don't capture stdout and stderr of tests --no-capture Don't capture stdout and stderr of tests
--generate-link-to-definition --generate-link-to-definition
Make the identifiers in the HTML source code pages Make the identifiers in the HTML source code pages
navigable navigable

View File

@@ -1,5 +1,5 @@
//@ check-pass //@ check-pass
//@ compile-flags: --test --nocapture --check-cfg=cfg(feature,values("test")) -Z unstable-options //@ compile-flags: --test --no-capture --check-cfg=cfg(feature,values("test")) -Z unstable-options
//@ normalize-stderr: "tests/rustdoc-ui/doctest" -> "$$DIR" //@ normalize-stderr: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR" //@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME" //@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME"

View File

@@ -1,5 +1,5 @@
//@ check-pass //@ check-pass
//@ compile-flags:--test -Zunstable-options --nocapture //@ compile-flags:--test -Zunstable-options --no-capture
//@ normalize-stderr: "tests/rustdoc-ui/doctest" -> "$$DIR" //@ normalize-stderr: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR" //@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME" //@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME"

View File

@@ -1,5 +1,5 @@
error: struct literal body without path error: struct literal body without path
--> $DIR/nocapture-fail.rs:8:10 --> $DIR/no-capture-fail.rs:8:10
| |
LL | fn foo() { LL | fn foo() {
| __________^ | __________^

View File

@@ -1,6 +1,6 @@
running 1 test running 1 test
test $DIR/nocapture-fail.rs - Foo (line 7) - compile fail ... ok test $DIR/no-capture-fail.rs - Foo (line 7) - compile fail ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME

View File

@@ -1,5 +1,5 @@
//@ check-pass //@ check-pass
//@ compile-flags:--test -Zunstable-options --nocapture //@ compile-flags:--test -Zunstable-options --no-capture
//@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR" //@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME" //@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME"

View File

@@ -1,7 +1,7 @@
running 1 test running 1 test
hello! hello!
test $DIR/nocapture.rs - Foo (line 6) ... ok test $DIR/no-capture.rs - Foo (line 6) ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME

View File

@@ -1,5 +1,5 @@
//@ check-pass //@ check-pass
//@ compile-flags:--test --test-args --test-threads=1 --nocapture -Zunstable-options //@ compile-flags:--test --test-args --test-threads=1 --no-capture -Zunstable-options
//@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR" //@ normalize-stdout: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stderr: "tests/rustdoc-ui/doctest" -> "$$DIR" //@ normalize-stderr: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME" //@ normalize-stdout: "finished in \d+\.\d+s" -> "finished in $$TIME"