Clippy:弃用 `feature = "cargo-clippy"`

Clippy:弃用 `feature = "cargo-clippy"`

💡 原文英文,约300词,阅读约需2分钟。
📝

内容提要

自Clippy v0.0.97开始,使用cargo clippy进行代码lint时,不再需要隐式的feature = "cargo-clippy"配置。现在可以使用clippy::前缀来设置lint级别。为了向后兼容,可以使用#[cfg(clippy)]进行条件编译。如果代码中存在feature = "cargo-clippy"的实例,会收到警告,可以通过运行cargo clippy --fix -- -Aclippy::all -Wclippy::deprecated_clippy_cfg_attr来修复。同时,需要检查.cargo/config文件中的[target.'cfg(feature = "cargo-clippy")']配置,并将其更改为cfg(clippy)或直接在Cargo.toml中设置lint级别。这个决定的动机是为了稳定检查编译时的条件编译。

🔎

延伸解读

弃用背景与动机

Clippy 弃用隐式 feature = "cargo-clippy" 是为了配合 cargo check -Zcheck-cfg 的稳定化。该功能会在编译时检查条件编译配置,若保留旧 feature,用户将看到大量警告,不得不允许 lint 或在 Cargo.toml 中添加 dummy feature 来消除警告。因此,弃用有助于减少噪音,推动更清晰的配置方式。

迁移步骤与自动修复

若代码中存在 feature = "cargo-clippy",会触发 clippy::deprecated_clippy_cfg_attr 警告。可运行 cargo clippy --fix -- -Aclippy::all -Wclippy::deprecated_clippy_cfg_attr 自动修复。此外,需手动检查 .cargo/config 中的 [target.'cfg(feature = "cargo-clippy")'] 配置,将其改为 cfg(clippy) 或直接在 Cargo.toml 中

条件编译的替代方案

对于依赖 Clippy 进行条件编译的罕见场景,未来可使用 #[cfg(clippy)] 替代旧的 feature 方式。这提供了更直接的语法,同时避免了隐式 feature 带来的警告问题。用户应逐步将现有代码中的 cfg_attr 迁移到新的 tool lint 属性或 cfg(clippy)。

❓

Q&A

从哪个Clippy版本开始,使用cargo clippy时不再需要隐式的feature = "cargo-clippy"配置?

自Clippy v0.0.97开始,使用cargo clippy进行代码lint时,不再需要隐式的feature = "cargo-clippy"配置。

现在如何设置Clippy的lint级别?

现在可以使用clippy::前缀来设置lint级别,例如#[allow(clippy::lint_name)]。

如果代码中还有feature = "cargo-clippy",会有什么提示?

会收到警告clippy::deprecated_clippy_cfg_attr。

如何自动修复代码中已弃用的feature = "cargo-clippy"?

可以运行cargo clippy --fix -- -Aclippy::all -Wclippy::deprecated_clippy_cfg_attr来自动修复代码。

需要检查.cargo/config文件中的什么配置?

需要检查.cargo/config文件中的[target.'cfg(feature = "cargo-clippy")']配置,并将其更改为cfg(clippy)或直接在Cargo.toml中设置lint级别。

为什么弃用feature = "cargo-clippy"?

弃用的动机是为了稳定检查编译时的条件编译,避免用户看到大量警告。

🏷️

标签

➡️

继续阅读