Wire up --check-cfg to rustdoc
This commit is contained in:
parent
4e82f35492
commit
97059397ca
11 changed files with 66 additions and 2 deletions
|
@ -80,6 +80,8 @@ crate struct Options {
|
||||||
crate extern_strs: Vec<String>,
|
crate extern_strs: Vec<String>,
|
||||||
/// List of `cfg` flags to hand to the compiler. Always includes `rustdoc`.
|
/// List of `cfg` flags to hand to the compiler. Always includes `rustdoc`.
|
||||||
crate cfgs: Vec<String>,
|
crate cfgs: Vec<String>,
|
||||||
|
/// List of check cfg flags to hand to the compiler.
|
||||||
|
crate check_cfgs: Vec<String>,
|
||||||
/// Codegen options to hand to the compiler.
|
/// Codegen options to hand to the compiler.
|
||||||
crate codegen_options: CodegenOptions,
|
crate codegen_options: CodegenOptions,
|
||||||
/// Codegen options strings to hand to the compiler.
|
/// Codegen options strings to hand to the compiler.
|
||||||
|
@ -172,6 +174,7 @@ impl fmt::Debug for Options {
|
||||||
.field("libs", &self.libs)
|
.field("libs", &self.libs)
|
||||||
.field("externs", &FmtExterns(&self.externs))
|
.field("externs", &FmtExterns(&self.externs))
|
||||||
.field("cfgs", &self.cfgs)
|
.field("cfgs", &self.cfgs)
|
||||||
|
.field("check-cfgs", &self.check_cfgs)
|
||||||
.field("codegen_options", &"...")
|
.field("codegen_options", &"...")
|
||||||
.field("debugging_options", &"...")
|
.field("debugging_options", &"...")
|
||||||
.field("target", &self.target)
|
.field("target", &self.target)
|
||||||
|
@ -506,6 +509,7 @@ impl Options {
|
||||||
};
|
};
|
||||||
|
|
||||||
let cfgs = matches.opt_strs("cfg");
|
let cfgs = matches.opt_strs("cfg");
|
||||||
|
let check_cfgs = matches.opt_strs("check-cfg");
|
||||||
|
|
||||||
let extension_css = matches.opt_str("e").map(|s| PathBuf::from(&s));
|
let extension_css = matches.opt_str("e").map(|s| PathBuf::from(&s));
|
||||||
|
|
||||||
|
@ -677,6 +681,7 @@ impl Options {
|
||||||
externs,
|
externs,
|
||||||
extern_strs,
|
extern_strs,
|
||||||
cfgs,
|
cfgs,
|
||||||
|
check_cfgs,
|
||||||
codegen_options,
|
codegen_options,
|
||||||
codegen_options_strs,
|
codegen_options_strs,
|
||||||
debugging_opts,
|
debugging_opts,
|
||||||
|
|
|
@ -192,6 +192,7 @@ crate fn create_config(
|
||||||
libs,
|
libs,
|
||||||
externs,
|
externs,
|
||||||
mut cfgs,
|
mut cfgs,
|
||||||
|
check_cfgs,
|
||||||
codegen_options,
|
codegen_options,
|
||||||
debugging_opts,
|
debugging_opts,
|
||||||
target,
|
target,
|
||||||
|
@ -219,6 +220,7 @@ crate fn create_config(
|
||||||
// these are definitely not part of rustdoc, but we want to warn on them anyway.
|
// these are definitely not part of rustdoc, but we want to warn on them anyway.
|
||||||
rustc_lint::builtin::RENAMED_AND_REMOVED_LINTS.name.to_string(),
|
rustc_lint::builtin::RENAMED_AND_REMOVED_LINTS.name.to_string(),
|
||||||
rustc_lint::builtin::UNKNOWN_LINTS.name.to_string(),
|
rustc_lint::builtin::UNKNOWN_LINTS.name.to_string(),
|
||||||
|
rustc_lint::builtin::UNEXPECTED_CFGS.name.to_string(),
|
||||||
];
|
];
|
||||||
lints_to_show.extend(crate::lint::RUSTDOC_LINTS.iter().map(|lint| lint.name.to_string()));
|
lints_to_show.extend(crate::lint::RUSTDOC_LINTS.iter().map(|lint| lint.name.to_string()));
|
||||||
|
|
||||||
|
@ -253,7 +255,7 @@ crate fn create_config(
|
||||||
interface::Config {
|
interface::Config {
|
||||||
opts: sessopts,
|
opts: sessopts,
|
||||||
crate_cfg: interface::parse_cfgspecs(cfgs),
|
crate_cfg: interface::parse_cfgspecs(cfgs),
|
||||||
crate_check_cfg: interface::parse_check_cfg(vec![]),
|
crate_check_cfg: interface::parse_check_cfg(check_cfgs),
|
||||||
input,
|
input,
|
||||||
input_path: cpath,
|
input_path: cpath,
|
||||||
output_file: None,
|
output_file: None,
|
||||||
|
|
|
@ -91,7 +91,7 @@ crate fn run(options: RustdocOptions) -> Result<(), ErrorReported> {
|
||||||
let config = interface::Config {
|
let config = interface::Config {
|
||||||
opts: sessopts,
|
opts: sessopts,
|
||||||
crate_cfg: interface::parse_cfgspecs(cfgs),
|
crate_cfg: interface::parse_cfgspecs(cfgs),
|
||||||
crate_check_cfg: interface::parse_check_cfg(vec![]),
|
crate_check_cfg: interface::parse_check_cfg(options.check_cfgs.clone()),
|
||||||
input,
|
input,
|
||||||
input_path: None,
|
input_path: None,
|
||||||
output_file: None,
|
output_file: None,
|
||||||
|
@ -321,6 +321,12 @@ fn run_test(
|
||||||
for cfg in &rustdoc_options.cfgs {
|
for cfg in &rustdoc_options.cfgs {
|
||||||
compiler.arg("--cfg").arg(&cfg);
|
compiler.arg("--cfg").arg(&cfg);
|
||||||
}
|
}
|
||||||
|
if !rustdoc_options.check_cfgs.is_empty() {
|
||||||
|
compiler.arg("-Z").arg("unstable-options");
|
||||||
|
for check_cfg in &rustdoc_options.check_cfgs {
|
||||||
|
compiler.arg("--check-cfg").arg(&check_cfg);
|
||||||
|
}
|
||||||
|
}
|
||||||
if let Some(sysroot) = rustdoc_options.maybe_sysroot {
|
if let Some(sysroot) = rustdoc_options.maybe_sysroot {
|
||||||
compiler.arg("--sysroot").arg(sysroot);
|
compiler.arg("--sysroot").arg(sysroot);
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,6 +259,7 @@ fn opts() -> Vec<RustcOptGroup> {
|
||||||
o.optmulti("L", "library-path", "directory to add to crate search path", "DIR")
|
o.optmulti("L", "library-path", "directory to add to crate search path", "DIR")
|
||||||
}),
|
}),
|
||||||
stable("cfg", |o| o.optmulti("", "cfg", "pass a --cfg to rustc", "")),
|
stable("cfg", |o| o.optmulti("", "cfg", "pass a --cfg to rustc", "")),
|
||||||
|
unstable("check-cfg", |o| o.optmulti("", "check-cfg", "pass a --check-cfg to rustc", "")),
|
||||||
stable("extern", |o| o.optmulti("", "extern", "pass an --extern to rustc", "NAME[=PATH]")),
|
stable("extern", |o| o.optmulti("", "extern", "pass an --extern to rustc", "NAME[=PATH]")),
|
||||||
unstable("extern-html-root-url", |o| {
|
unstable("extern-html-root-url", |o| {
|
||||||
o.optmulti(
|
o.optmulti(
|
||||||
|
|
12
src/test/rustdoc-ui/check-cfg-test.rs
Normal file
12
src/test/rustdoc-ui/check-cfg-test.rs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// check-pass
|
||||||
|
// compile-flags: --test --nocapture --check-cfg=values(feature,"test") -Z unstable-options
|
||||||
|
// normalize-stderr-test: "src/test/rustdoc-ui" -> "$$DIR"
|
||||||
|
// normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
|
||||||
|
// normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
|
||||||
|
|
||||||
|
/// The doctest will produce a warning because feature invalid is unexpected
|
||||||
|
/// ```
|
||||||
|
/// #[cfg(feature = "invalid")]
|
||||||
|
/// assert!(false);
|
||||||
|
/// ```
|
||||||
|
pub struct Foo;
|
11
src/test/rustdoc-ui/check-cfg-test.stderr
Normal file
11
src/test/rustdoc-ui/check-cfg-test.stderr
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
warning: unexpected `cfg` condition value
|
||||||
|
--> $DIR/check-cfg-test.rs:9:7
|
||||||
|
|
|
||||||
|
LL | #[cfg(feature = "invalid")]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `#[warn(unexpected_cfgs)]` on by default
|
||||||
|
= note: expected values for `feature` are: test
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
6
src/test/rustdoc-ui/check-cfg-test.stdout
Normal file
6
src/test/rustdoc-ui/check-cfg-test.stdout
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
running 1 test
|
||||||
|
test $DIR/check-cfg-test.rs - Foo (line 8) ... ok
|
||||||
|
|
||||||
|
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME
|
||||||
|
|
2
src/test/rustdoc-ui/check-cfg-unstable.rs
Normal file
2
src/test/rustdoc-ui/check-cfg-unstable.rs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
// check-fail
|
||||||
|
// compile-flags: --check-cfg=names()
|
2
src/test/rustdoc-ui/check-cfg-unstable.stderr
Normal file
2
src/test/rustdoc-ui/check-cfg-unstable.stderr
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
error: the `-Z unstable-options` flag must also be passed to enable the flag `check-cfg`
|
||||||
|
|
7
src/test/rustdoc-ui/check-cfg.rs
Normal file
7
src/test/rustdoc-ui/check-cfg.rs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// check-pass
|
||||||
|
// compile-flags: --check-cfg=names() -Z unstable-options
|
||||||
|
|
||||||
|
/// uniz is nor a builtin nor pass as arguments so is unexpected
|
||||||
|
#[cfg(uniz)]
|
||||||
|
//~^ WARNING unexpected `cfg` condition name
|
||||||
|
pub struct Bar;
|
10
src/test/rustdoc-ui/check-cfg.stderr
Normal file
10
src/test/rustdoc-ui/check-cfg.stderr
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
warning: unexpected `cfg` condition name
|
||||||
|
--> $DIR/check-cfg.rs:5:7
|
||||||
|
|
|
||||||
|
LL | #[cfg(uniz)]
|
||||||
|
| ^^^^ help: did you mean: `unix`
|
||||||
|
|
|
||||||
|
= note: `#[warn(unexpected_cfgs)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue