2024年2月28日 · Clippy团队
自从Clippy v0.0.97版本以及之前通过rustup提供以来,当使用cargo clippy对你的代码进行lint时,Clippy隐式地添加了一个feature = "cargo-clippy"
配置。
回到那时(2016年),这是必要的,以允许、警告或拒绝Clippy lint使用属性:
rust
#[cfg_attr(feature = "cargo-clippy", allow(clippy_lint_name))]
长时间以来,这样做已经不再必要。今天,Clippy用户将使用带有clippy::
前缀的工具lint属性来设置lint级别:
rust
#[allow(clippy::lint_name)]
隐式的feature = "cargo-clippy"
仅为了向后兼容而保留,但将在即将到来的夜间构建中被弃用,并且之后在1.78.0版本中弃用。
替代方案 由于依赖Clippy的条件编译是一个罕见的用例,我们将提供一个替代方案。因此在未来(1.78.0版本)你将能够使用:
rust
#[cfg(clippy)]
过渡 如果你只使用稳定的工具链,你可以等到Rust 1.78.0(2024-05-02)发布后再进行过渡。
如果你的代码库中有feature = "cargo-clippy"
的实例,你将从最新的夜间构建Clippy中的新lint clippy::deprecated_clippy_cfg_attr
看到一个警告。这个lint可以自动修复你的代码。因此,如果你看到这个lint触发,只需运行:
shell
cargo clippy --fix -- -Aclippy::all -Wclippy::deprecated_clippy_cfg_attr
这将修复你代码中的所有实例。
此外,检查你的.cargo/config
文件是否有:
toml
[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中添加一个虚拟特性来消除这些警告:
toml
[features]
cargo-clippy = []
我们认为这不会对用户友好,因此决定弃用隐式的feature = "cargo-clippy"
配置,并用clippy配置替换它。
你很可能甚至不知道Clippy隐式设置了这个配置(这不是一个Cargo特性)。这是有意的,因为我们很久以前就停止宣传和记录这个了。