Rollup merge of #78984 - GuillaumeGomez:rustdoc-check-option, r=jyn514
Rustdoc check option The ultimate goal behind this option would be to have `rustdoc --check` being run when you use `cargo check` as a second step. r? `@jyn514`
This commit is contained in:
@@ -145,6 +145,9 @@ pub struct Options {
|
||||
pub render_options: RenderOptions,
|
||||
/// Output format rendering (used only for "show-coverage" option for the moment)
|
||||
pub output_format: Option<OutputFormat>,
|
||||
/// If this option is set to `true`, rustdoc will only run checks and not generate
|
||||
/// documentation.
|
||||
pub run_check: bool,
|
||||
}
|
||||
|
||||
impl fmt::Debug for Options {
|
||||
@@ -185,6 +188,7 @@ impl fmt::Debug for Options {
|
||||
.field("runtool", &self.runtool)
|
||||
.field("runtool_args", &self.runtool_args)
|
||||
.field("enable-per-target-ignores", &self.enable_per_target_ignores)
|
||||
.field("run_check", &self.run_check)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
@@ -581,6 +585,7 @@ impl Options {
|
||||
let enable_per_target_ignores = matches.opt_present("enable-per-target-ignores");
|
||||
let document_private = matches.opt_present("document-private-items");
|
||||
let document_hidden = matches.opt_present("document-hidden-items");
|
||||
let run_check = matches.opt_present("check");
|
||||
|
||||
let (lint_opts, describe_lints, lint_cap) = get_cmd_lint_options(matches, error_format);
|
||||
|
||||
@@ -616,6 +621,7 @@ impl Options {
|
||||
runtool_args,
|
||||
enable_per_target_ignores,
|
||||
test_builder,
|
||||
run_check,
|
||||
render_options: RenderOptions {
|
||||
output,
|
||||
external_html,
|
||||
|
||||
@@ -423,6 +423,7 @@ fn opts() -> Vec<RustcOptGroup> {
|
||||
"specified the rustc-like binary to use as the test builder",
|
||||
)
|
||||
}),
|
||||
unstable("check", |o| o.optflag("", "check", "Run rustdoc checks")),
|
||||
]
|
||||
}
|
||||
|
||||
@@ -515,6 +516,7 @@ fn main_options(options: config::Options) -> MainResult {
|
||||
// but we can't crates the Handler ahead of time because it's not Send
|
||||
let diag_opts = (options.error_format, options.edition, options.debugging_opts.clone());
|
||||
let show_coverage = options.show_coverage;
|
||||
let run_check = options.run_check;
|
||||
|
||||
// First, parse the crate and extract all relevant information.
|
||||
info!("starting to run rustc");
|
||||
@@ -540,6 +542,9 @@ fn main_options(options: config::Options) -> MainResult {
|
||||
// if we ran coverage, bail early, we don't need to also generate docs at this point
|
||||
// (also we didn't load in any of the useful passes)
|
||||
return Ok(());
|
||||
} else if run_check {
|
||||
// Since we're in "check" mode, no need to generate anything beyond this point.
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
info!("going to format");
|
||||
|
||||
21
src/test/rustdoc-ui/check-fail.rs
Normal file
21
src/test/rustdoc-ui/check-fail.rs
Normal file
@@ -0,0 +1,21 @@
|
||||
// compile-flags: -Z unstable-options --check
|
||||
|
||||
#![deny(missing_docs)]
|
||||
#![deny(rustdoc)]
|
||||
|
||||
//! ```rust,testharness
|
||||
//~^ ERROR
|
||||
//! let x = 12;
|
||||
//! ```
|
||||
|
||||
pub fn foo() {}
|
||||
//~^ ERROR
|
||||
//~^^ ERROR
|
||||
|
||||
/// hello
|
||||
//~^ ERROR
|
||||
///
|
||||
/// ```rust,testharness
|
||||
/// let x = 12;
|
||||
/// ```
|
||||
pub fn bar() {}
|
||||
57
src/test/rustdoc-ui/check-fail.stderr
Normal file
57
src/test/rustdoc-ui/check-fail.stderr
Normal file
@@ -0,0 +1,57 @@
|
||||
error: missing documentation for a function
|
||||
--> $DIR/check-fail.rs:11:1
|
||||
|
|
||||
LL | pub fn foo() {}
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/check-fail.rs:3:9
|
||||
|
|
||||
LL | #![deny(missing_docs)]
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: missing code example in this documentation
|
||||
--> $DIR/check-fail.rs:11:1
|
||||
|
|
||||
LL | pub fn foo() {}
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/check-fail.rs:4:9
|
||||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(missing_doc_code_examples)]` implied by `#[deny(rustdoc)]`
|
||||
|
||||
error: unknown attribute `testharness`. Did you mean `test_harness`?
|
||||
--> $DIR/check-fail.rs:6:1
|
||||
|
|
||||
LL | / //! ```rust,testharness
|
||||
LL | |
|
||||
LL | | //! let x = 12;
|
||||
LL | | //! ```
|
||||
| |_______^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/check-fail.rs:4:9
|
||||
|
|
||||
LL | #![deny(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[deny(invalid_codeblock_attributes)]` implied by `#[deny(rustdoc)]`
|
||||
= help: the code block will either not be tested if not marked as a rust one or the code will be wrapped inside a main function
|
||||
|
||||
error: unknown attribute `testharness`. Did you mean `test_harness`?
|
||||
--> $DIR/check-fail.rs:15:1
|
||||
|
|
||||
LL | / /// hello
|
||||
LL | |
|
||||
LL | | ///
|
||||
LL | | /// ```rust,testharness
|
||||
LL | | /// let x = 12;
|
||||
LL | | /// ```
|
||||
| |_______^
|
||||
|
|
||||
= help: the code block will either not be tested if not marked as a rust one or the code will be wrapped inside a main function
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
11
src/test/rustdoc-ui/check.rs
Normal file
11
src/test/rustdoc-ui/check.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
// check-pass
|
||||
// compile-flags: -Z unstable-options --check
|
||||
|
||||
#![warn(missing_docs)]
|
||||
//~^ WARN
|
||||
//~^^ WARN
|
||||
#![warn(rustdoc)]
|
||||
|
||||
pub fn foo() {}
|
||||
//~^ WARN
|
||||
//~^^ WARN
|
||||
49
src/test/rustdoc-ui/check.stderr
Normal file
49
src/test/rustdoc-ui/check.stderr
Normal file
@@ -0,0 +1,49 @@
|
||||
warning: missing documentation for the crate
|
||||
--> $DIR/check.rs:4:1
|
||||
|
|
||||
LL | / #![warn(missing_docs)]
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | #![warn(rustdoc)]
|
||||
LL | |
|
||||
LL | | pub fn foo() {}
|
||||
| |_______________^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/check.rs:4:9
|
||||
|
|
||||
LL | #![warn(missing_docs)]
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
warning: missing documentation for a function
|
||||
--> $DIR/check.rs:9:1
|
||||
|
|
||||
LL | pub fn foo() {}
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
warning: missing code example in this documentation
|
||||
--> $DIR/check.rs:4:1
|
||||
|
|
||||
LL | / #![warn(missing_docs)]
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | #![warn(rustdoc)]
|
||||
LL | |
|
||||
LL | | pub fn foo() {}
|
||||
| |_______________^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/check.rs:7:9
|
||||
|
|
||||
LL | #![warn(rustdoc)]
|
||||
| ^^^^^^^
|
||||
= note: `#[warn(missing_doc_code_examples)]` implied by `#[warn(rustdoc)]`
|
||||
|
||||
warning: missing code example in this documentation
|
||||
--> $DIR/check.rs:9:1
|
||||
|
|
||||
LL | pub fn foo() {}
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
warning: 4 warnings emitted
|
||||
|
||||
5
src/test/rustdoc/check.rs
Normal file
5
src/test/rustdoc/check.rs
Normal file
@@ -0,0 +1,5 @@
|
||||
// compile-flags: -Z unstable-options --check
|
||||
|
||||
// @!has check/fn.foo.html
|
||||
// @!has check/index.html
|
||||
pub fn foo() {}
|
||||
Reference in New Issue
Block a user