cargo-semver-checks
v0.37 新功能:可扫描Cargo.toml
文件以检测破坏。文中以my_crate
的Cargo.toml
差异为例,展示看似无害的更改却可能导致用户构建错误。- Rust 包特性基础:Cargo 允许包携带可条件性启用和编译的功能,用户可选择启用或禁用。如通过
[features]
定义可选功能,下游用户可通过features
字段选择启用。 - 删除包特性是重大破坏变更:引用不存在的包特性会触发构建错误,删除以前存在的包特性是重大破坏变更,
cargo-semver-checks
新版本可捕获此类情况。 - 可选依赖(有时)创建隐式特性:
cargo
允许定义可选依赖,每个可选依赖会定义一个同名隐式特性,方便用户按需选择依赖,但也可能成为隐患,因为隐式特性并非总是创建。 Cargo.toml
中的破坏!:包特性可引用其他特性和可选依赖,若在[features]
表中使用dep:
前缀指定可选依赖,会禁用隐式特性,如示例中max_performance
特性会移除rayon
和rustc-hash
特性,cargo-semver-checks
v0.37 可检测到此类破坏。cargo-semver-checks
内部工作原理:构建此功能具有挑战性,cargo-semver-checks
以前依赖 rustdoc JSON,现在引入cargo metadata
作为数据源,通过繁琐的重构和编织将其贯穿整个系统,先将元数据的数据模型表示为 Trustfall 查询引擎模式,再编写新的 lint 文件并添加测试用例。
- Rust 包特性基础:Cargo 允许包携带可条件性启用和编译的功能,用户可选择启用或禁用。如通过
- 总结与呼吁:询问读者是否能发现文章开头
Cargo.toml
示例中的破坏,强调cargo-semver-checks
可处理此类问题,呼吁读者订阅博客、关注社交媒体或通过 GitHub Sponsors 支持作者。同时提供讨论链接。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。