Add warning against unexpected --cfg with --check-cfg
This commit is contained in:
parent
137eea86db
commit
eccdccf4eb
@ -354,6 +354,12 @@ lint_builtin_unreachable_pub = unreachable `pub` {$what}
|
||||
.suggestion = consider restricting its visibility
|
||||
.help = or consider exporting it for use by other crates
|
||||
|
||||
lint_builtin_unexpected_cli_config_name = unexpected `{$name}` as condition name
|
||||
.help = was set with `--cfg` but isn't in the `--check-cfg` expected names
|
||||
|
||||
lint_builtin_unexpected_cli_config_value = unexpected condition value `{$value}` for condition name `{$name}`
|
||||
.help = was set with `--cfg` but isn't in the `--check-cfg` expected values
|
||||
|
||||
lint_builtin_type_alias_bounds_help = use fully disambiguated paths (i.e., `<T as Trait>::Assoc`) to refer to associated types in type aliases
|
||||
|
||||
lint_builtin_type_alias_where_clause = where clauses are not enforced in type aliases
|
||||
|
@ -3250,3 +3250,39 @@ fn check_crate(&mut self, cx: &EarlyContext<'_>, krate: &ast::Crate) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub use rustc_session::lint::builtin::UNEXPECTED_CFGS;
|
||||
|
||||
declare_lint_pass!(UnexpectedCfgs => [UNEXPECTED_CFGS]);
|
||||
|
||||
impl EarlyLintPass for UnexpectedCfgs {
|
||||
fn check_crate(&mut self, cx: &EarlyContext<'_>, _: &ast::Crate) {
|
||||
let cfg = &cx.sess().parse_sess.config;
|
||||
let check_cfg = &cx.sess().parse_sess.check_config;
|
||||
for &(name, value) in cfg {
|
||||
if let Some(names_valid) = &check_cfg.names_valid {
|
||||
if !names_valid.contains(&name) {
|
||||
cx.lookup(UNEXPECTED_CFGS, None::<MultiSpan>, |diag| {
|
||||
diag.build(fluent::lint::builtin_unexpected_cli_config_name)
|
||||
.help(fluent::lint::help)
|
||||
.set_arg("name", name)
|
||||
.emit();
|
||||
});
|
||||
}
|
||||
}
|
||||
if let Some(value) = value {
|
||||
if let Some(values) = &check_cfg.values_valid.get(&name) {
|
||||
if !values.contains(&value) {
|
||||
cx.lookup(UNEXPECTED_CFGS, None::<MultiSpan>, |diag| {
|
||||
diag.build(fluent::lint::builtin_unexpected_cli_config_value)
|
||||
.help(fluent::lint::help)
|
||||
.set_arg("name", name)
|
||||
.set_arg("value", value)
|
||||
.emit();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -144,6 +144,7 @@ macro_rules! early_lint_passes {
|
||||
IncompleteFeatures: IncompleteFeatures,
|
||||
RedundantSemicolons: RedundantSemicolons,
|
||||
UnusedDocComment: UnusedDocComment,
|
||||
UnexpectedCfgs: UnexpectedCfgs,
|
||||
]
|
||||
);
|
||||
};
|
||||
|
@ -3365,7 +3365,6 @@
|
||||
DEPRECATED_CFG_ATTR_CRATE_TYPE_NAME,
|
||||
DUPLICATE_MACRO_ATTRIBUTES,
|
||||
SUSPICIOUS_AUTO_TRAIT_IMPLS,
|
||||
UNEXPECTED_CFGS,
|
||||
DEPRECATED_WHERE_CLAUSE_LOCATION,
|
||||
TEST_UNSTABLE_LINT,
|
||||
FFI_UNWIND_CALLS,
|
||||
|
8
src/test/ui/check-cfg/allow-at-crate-level.rs
Normal file
8
src/test/ui/check-cfg/allow-at-crate-level.rs
Normal file
@ -0,0 +1,8 @@
|
||||
// This test check that #![allow(unexpected_cfgs)] works with --cfg
|
||||
//
|
||||
// check-pass
|
||||
// compile-flags: --cfg=unexpected --check-cfg=names() -Z unstable-options
|
||||
|
||||
#![allow(unexpected_cfgs)]
|
||||
|
||||
fn main() {}
|
@ -15,5 +15,9 @@ LL | #[cfg(feature = "rand")]
|
||||
|
|
||||
= note: expected values for `feature` are: full, serde
|
||||
|
||||
warning: 2 warnings emitted
|
||||
warning: unexpected condition value `rand` for condition name `feature`
|
||||
|
|
||||
= help: was set with `--cfg` but isn't in the `--check-cfg` expected values
|
||||
|
||||
warning: 3 warnings emitted
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
// we correctly lint on the `cfg!` macro and `cfg_attr` attribute.
|
||||
//
|
||||
// check-pass
|
||||
// compile-flags: --check-cfg=names() --check-cfg=values(feature,"foo") --cfg feature="bar" -Z unstable-options
|
||||
// compile-flags: --check-cfg=names() --check-cfg=values(feature,"foo") --cfg feature="bar" --cfg unknown_name -Z unstable-options
|
||||
|
||||
#[cfg(windows)]
|
||||
fn do_windows_stuff() {}
|
||||
|
@ -28,6 +28,14 @@ warning: unexpected `cfg` condition name
|
||||
LL | #[cfg_attr(uu, test)]
|
||||
| ^^
|
||||
|
||||
warning: unexpected condition value `bar` for condition name `feature`
|
||||
|
|
||||
= help: was set with `--cfg` but isn't in the `--check-cfg` expected values
|
||||
|
||||
warning: unexpected `unknown_name` as condition name
|
||||
|
|
||||
= help: was set with `--cfg` but isn't in the `--check-cfg` expected names
|
||||
|
||||
warning: unexpected `cfg` condition name
|
||||
--> $DIR/mix.rs:35:10
|
||||
|
|
||||
@ -170,5 +178,5 @@ LL | cfg!(all(feature = "zebra", feature = "zebra", feature = "zebra"));
|
||||
|
|
||||
= note: expected values for `feature` are: foo
|
||||
|
||||
warning: 25 warnings emitted
|
||||
warning: 27 warnings emitted
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user