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

原文链接

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特性)。这是有意的,因为我们很久以前就停止宣传和记录这个了。

相关推荐
星释5 分钟前
Rust 练习册 103:维吉尼亚密码与安全通信
网络·安全·rust
美味小鱼15 分钟前
DupFinder:一个用 Rust 编写的高性能重复文件查找工具
开发语言·后端·rust
Source.Liu16 分钟前
【Chrono库】 时区转换规则(TransitionRule)实现详解(src/offset/local/tz_info/rule.rs)
rust·time
星释9 小时前
Rust 练习册 100:音乐音阶生成器
开发语言·后端·rust
木易 士心14 小时前
Go、Rust、Kotlin、Python 与 Java 从性能到生态,全面解读五大主流编程语言
java·golang·rust
badmonster015 小时前
AI ETL需要不同的原语:从构建CocoIndex中学到的Rust经验🦀
rust·aigc
Source.Liu18 小时前
【Chrono库】Chrono 本地时区模块解析(src/offset/local/mod.rs)
rust·time
干饭比赛第一名获得者19 小时前
🚀 终极指南:Mac M4 编译 Rust 至 Linux (AMD64)
后端·rust
未来之窗软件服务20 小时前
幽冥大陆(三十六)S18酒店门锁SDK rust语言——东方仙盟筑基期
开发语言·c++·rust·智能门锁·东方仙盟sdk·东方仙盟一体化
ALex_zry21 小时前
C语言底层编程与Rust的现代演进:内存管理、系统调用与零成本抽象
c语言·算法·rust