自从 Clippy v0.0.97
版本发布,并且在与 rustup
一同分发之前,当你使用 cargo clippy
对代码进行 lint 检查时,Clippy 会隐式添加一个 feature = "cargo-clippy"
配置1。
早在过去(2016 年),这是在使用属性来允许、警告或拒绝 Clippy lint 规则时所必需的
这样做已经很久不再必要了。现在,Clippy 用户会使用带有 clippy::
前缀的工具 lint 属性来设置 lint 级别
隐式的 feature = "cargo-clippy"
一直仅为保持向后兼容而保留,但将在未来的 nightly 版本以及之后的 1.78.0
版本中被弃用。
替代方案
由于存在一种罕见的 用例,即依赖于 Clippy 进行条件编译,我们将提供一个替代方案。因此,将来(在 1.78.0
版本中)你将能够使用
迁移
如果你只使用 stable 工具链,可以等到 Rust
1.78.0
版本 (2024-05-02) 发布后再进行迁移。
如果你的代码库中存在 feature = "cargo-clippy"
的实例,最新的 nightly Clippy 中提供的新的 Clippy lint 规则 clippy::deprecated_clippy_cfg_attr
会发出警告。这个 lint 可以自动修复你的代码。因此,如果你看到这个 lint 触发,只需运行
cargo clippy --fix -- -Aclippy::all -Wclippy::deprecated_clippy_cfg_attr
这将修复你代码中的所有相关实例。
此外,检查你的 .cargo/config
文件中是否存在
[]
= ["-Aclippy::..."]
如果你有这个配置,你需要手动更新它,可以将其更改为 cfg(clippy)
,或者借此机会直接迁移到在 Cargo.toml
中设置 lint 级别。
弃用的动机
目前,有一个 测试征集,旨在稳定 在编译时检查条件编译,即 cargo check -Zcheck-cfg
。如果我们保留 feature = "cargo-clippy"
配置,用户将会在 their feature = "cargo-clippy"
条件上看到大量警告。为了解决这个问题,他们要么需要允许该 lint,要么必须在 Cargo.toml
中添加一个虚设的 feature 来消除这些警告
[]
= []
我们认为这不符合用户友好性,因此决定弃用隐式的 feature = "cargo-clippy"
配置,并将其替换为 clippy
配置。