自 Clippy v0.0.97
版本起,以及在它随 rustup
一起发布之前,Clippy 在使用 cargo clippy
对代码进行 lint 时,会隐式添加一个 feature = "cargo-clippy"
配置1。
在过去(2016 年),这是必要的,以便允许、警告或拒绝使用属性的 Clippy lint。
#[cfg_attr(feature = "cargo-clippy", allow(clippy_lint_name))]
这样做已经很久没有必要了。如今,Clippy 用户会使用工具 lint 属性(使用 clippy::
前缀)来设置 lint 级别。
#[allow(clippy::lint_name)]
隐式的 feature = "cargo-clippy"
一直保留是为了向后兼容,但将在即将发布的 nightly 版本中被弃用,并在 1.78.0
版本中正式弃用。
替代方案
由于存在一个罕见的 用例,它依赖于 Clippy 进行条件编译,因此我们将提供一个替代方案。因此,在未来(1.78.0
)版本中,您可以使用
#[cfg(clippy)]
迁移
如果您只使用稳定版工具链,您可以等到 Rust
1.78.0
(2024-05-02)发布后再进行迁移。
如果您的代码库中存在 feature = "cargo-clippy"
实例,您将看到来自新的 Clippy lint clippy::deprecated_clippy_cfg_attr
的警告,该 lint 可在最新的 nightly Clippy 中使用。此 lint 可以自动修复您的代码。因此,如果您看到此 lint 被触发,只需运行
cargo clippy --fix -- -Aclippy::all -Wclippy::deprecated_clippy_cfg_attr
这将修复您代码中的所有实例。
此外,请检查您的 .cargo/config
文件,查看是否有
[target.'cfg(feature = "cargo-clippy")']
rustflags = ["-Aclippy::..."]
如果您有此配置,您需要手动更新它,要么将其更改为 cfg(clippy)
,要么趁此机会直接迁移到 在 Cargo.toml
中设置 lint 级别。
弃用原因
目前,有一个 测试请求,旨在稳定 在编译时检查条件编译,即 cargo check -Zcheck-cfg
。如果我们保留 feature = "cargo-clippy"
配置,用户将在他们的 feature = "cargo-clippy"
条件上看到很多警告。为了解决这个问题,他们要么需要允许 lint,要么需要在他们的 Cargo.toml
中添加一个虚拟功能来消除这些警告。
[features]
cargo-clippy = []
我们认为这并不友好,因此决定弃用隐式的 feature = "cargo-clippy"
配置,并用 clippy
配置替换它。
-
您可能甚至不知道 Clippy 隐式设置了此配置(这不是 Cargo 功能)。这是故意的,因为我们很久以前就停止宣传和记录它了。 ↩