Skip to content

Commit

Permalink
Rollup merge of #78984 - GuillaumeGomez:rustdoc-check-option, r=jyn514
Browse files Browse the repository at this point in the history
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`
  • Loading branch information
GuillaumeGomez committed Nov 13, 2020
2 parents 0b7a793 + a06fd1f commit 804ca1d
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/librustdoc/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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()
}
}
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -616,6 +621,7 @@ impl Options {
runtool_args,
enable_per_target_ignores,
test_builder,
run_check,
render_options: RenderOptions {
output,
external_html,
Expand Down
5 changes: 5 additions & 0 deletions src/librustdoc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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")),
]
}

Expand Down Expand Up @@ -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");
Expand All @@ -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");
Expand Down
21 changes: 21 additions & 0 deletions src/test/rustdoc-ui/check-fail.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 57 additions & 0 deletions src/test/rustdoc-ui/check-fail.stderr
Original file line number Diff line number Diff line change
@@ -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 changes: 11 additions & 0 deletions src/test/rustdoc-ui/check.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 49 additions & 0 deletions src/test/rustdoc-ui/check.stderr
Original file line number Diff line number Diff line change
@@ -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 changes: 5 additions & 0 deletions src/test/rustdoc/check.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// compile-flags: -Z unstable-options --check

// @!has check/fn.foo.html
// @!has check/index.html
pub fn foo() {}

0 comments on commit 804ca1d

Please sign in to comment.