mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Add special check-cfg
config for the unexpected_cfgs
lint
This permits things like this to be recognized and passed to rustc/rustdoc. ```rust [lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ["cfg(foo)"] } ```
This commit is contained in:
parent
1e4857a4d9
commit
e6dca67a84
@ -1353,12 +1353,37 @@ fn check_cfg_args(build_runner: &BuildRunner<'_, '_>, unit: &Unit) -> Vec<OsStri
|
|||||||
// Cargo and docs.rs than rustc and docs.rs. In particular, all users of docs.rs use
|
// Cargo and docs.rs than rustc and docs.rs. In particular, all users of docs.rs use
|
||||||
// Cargo, but not all users of rustc (like Rust-for-Linux) use docs.rs.
|
// Cargo, but not all users of rustc (like Rust-for-Linux) use docs.rs.
|
||||||
|
|
||||||
vec![
|
let mut args = vec![
|
||||||
OsString::from("--check-cfg"),
|
OsString::from("--check-cfg"),
|
||||||
OsString::from("cfg(docsrs)"),
|
OsString::from("cfg(docsrs)"),
|
||||||
OsString::from("--check-cfg"),
|
OsString::from("--check-cfg"),
|
||||||
arg_feature,
|
arg_feature,
|
||||||
]
|
];
|
||||||
|
|
||||||
|
// Also include the custom arguments specified in `[lints.rust.unexpected_cfgs.check_cfg]`
|
||||||
|
if let Ok(Some(lints)) = unit.pkg.manifest().resolved_toml().resolved_lints() {
|
||||||
|
if let Some(rust_lints) = lints.get("rust") {
|
||||||
|
if let Some(unexpected_cfgs) = rust_lints.get("unexpected_cfgs") {
|
||||||
|
if let Some(config) = unexpected_cfgs.config() {
|
||||||
|
if let Some(check_cfg) = config.get("check-cfg") {
|
||||||
|
if let Ok(check_cfgs) =
|
||||||
|
toml::Value::try_into::<Vec<String>>(check_cfg.clone())
|
||||||
|
{
|
||||||
|
for check_cfg in check_cfgs {
|
||||||
|
args.push(OsString::from("--check-cfg"));
|
||||||
|
args.push(OsString::from(check_cfg));
|
||||||
|
}
|
||||||
|
// warn (if wise) about `check-cfg` not being a list-of-string
|
||||||
|
} else if unit.show_warnings(&build_runner.bcx.gctx) {
|
||||||
|
let _ = build_runner.bcx.gctx.shell().warn("`lints.rust.unexpected_cfgs.check-cfg` must be a list of string");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
args
|
||||||
} else {
|
} else {
|
||||||
Vec::new()
|
Vec::new()
|
||||||
}
|
}
|
||||||
|
@ -2282,9 +2282,14 @@ supported tools: {}",
|
|||||||
for config_name in config.keys() {
|
for config_name in config.keys() {
|
||||||
// manually report unused manifest key warning since we collect all the "extra"
|
// manually report unused manifest key warning since we collect all the "extra"
|
||||||
// keys and values inside the config table
|
// keys and values inside the config table
|
||||||
let message =
|
//
|
||||||
format!("unused manifest key: `lints.{tool}.{name}.{config_name}`");
|
// except for `rust.unexpected_cfgs.check-cfg` which is used by rustc/rustdoc
|
||||||
warnings.push(message);
|
if !(tool == "rust" && name == "unexpected_cfgs" && config_name == "check-cfg")
|
||||||
|
{
|
||||||
|
let message =
|
||||||
|
format!("unused manifest key: `lints.{tool}.{name}.{config_name}`");
|
||||||
|
warnings.push(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -496,3 +496,28 @@ fn build_script_test() {
|
|||||||
.with_stdout_contains_n("test [..] ... ok", 3)
|
.with_stdout_contains_n("test [..] ... ok", 3)
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cargo_test(>=1.79, reason = "--check-cfg was stabilized in Rust 1.79")]
|
||||||
|
fn config_simple() {
|
||||||
|
let p = project()
|
||||||
|
.file(
|
||||||
|
"Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[package]
|
||||||
|
name = "foo"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2015"
|
||||||
|
|
||||||
|
[lints.rust]
|
||||||
|
unexpected_cfgs = { level = "warn", check-cfg = ["cfg(has_foo)", "cfg(has_bar, values(\"yes\", \"no\"))"] }
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.file("src/main.rs", "fn main() {}")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
p.cargo("check -v")
|
||||||
|
.with_stderr_contains(x!("rustc" => "cfg" of "has_foo"))
|
||||||
|
.with_stderr_contains(x!("rustc" => "cfg" of "has_bar" with "yes" "no"))
|
||||||
|
.with_stderr_does_not_contain("[..]unused manifest key[..]")
|
||||||
|
.run();
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user