mirror of
https://github.com/rust-lang/rust.git
synced 2026-01-20 12:50:39 +00:00
Adds an internal lint to check for `#[derive(serde::Deserialize)]` without [`#[serde(deny_unknown_fields)]`](https://serde.rs/container-attrs.html#deny_unknown_fields). Today, if you run Clippy with the following clippy.toml, Clippy will produce a warning, but there will be no accompanying note: ```toml # In the following configuration, "recommendation" should be "reason" or "replacement". disallowed-macros = [ { path = "std::panic", recommendation = "return a `std::result::Result::Error` instead" }, ] ``` ```sh $ cargo clippy Checking a v0.1.0 (/home/smoelius/tmp/a) warning: use of a disallowed macro `std::panic` --> src/lib.rs:2:5 | 2 | panic!(); | ^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#disallowed_macros = note: `#[warn(clippy::disallowed_macros)]` on by default ``` The underlying problem is: the enum that derives `serde::Deserialize` ([`DisallowedPathEnum`](81643e297c/clippy_config/src/types.rs (L47))) does not have the attribute `#[serde(deny_unknown_fields)]`. This lint identifies such problems by checking trait `impl`s. An alternative I considered was to walk `clippy_config::conf::Conf` directly. However, that would not catch the `DisallowedPathEnum` case because it [is not used in `Conf` directly](81643e297c/clippy_config/src/types.rs (L31)). Just to be clear, no one asked for this. So I hope the maintainers do not mind. changelog: none