Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rustdoc check option #78984

Merged
merged 3 commits into from
Nov 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -514,6 +515,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 @@ -539,6 +541,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(());
jyn514 marked this conversation as resolved.
Show resolved Hide resolved
}

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() {}