0.2.0 |
|
---|---|
0.1.0 |
|
#7 在 #violation
51KB
1K SLoC
cargo-semver-check
扫描您的Rust包以查找semver违规。
使用 rustdoc
生成的包文档查询使用 trustfall
“查询一切”引擎。每个查询都寻找特定类型的semver违规,例如
- public struct 被移除
- public plain struct 的公共字段被移除
- public enum 被移除
- public enum 的变体被移除
此包是正在进行中的工作。它可以捕获一些semver违规,但会错过许多。它的查询和适配器实现尚未针对运行时优化,将在大型代码库上目前表现出 O(n^2)
运行时增长。有关详细信息,请参阅下面的注释部分。
使用 cargo-semver-check
检查您的包
步骤
- 选择一个您想扫描semver违规的包,并
cd
到其源目录,为以下一些rustdoc
命令做准备。 - 检出您包的最后一个已发布版本,这将成为您的semver基线。
- 通过运行
cargo +nightly rustdoc -- -Zunstable-options --output-format json
为包的最后一个已发布版本生成rustdoc
文档的JSON格式。 - 上述命令将在您的包构建目标目录中生成一个名为
doc/<your-crate-name>.json
的文件。将此文件复制到其他地方 -- 否则它将被下一步覆盖。 - 检出您想检查semver违规的包的源代码。
- 重复上述
cargo rustdoc
命令,并注意新生成的doc/<your-crate-name>.json
文件。 cd
返回到cargo-semver-check
目录(临时,将很快删除)。- 在
cargo-semver-check
目录下,运行cargo run diff <path-to-new-rustdoc-json> <path-to-baseline-rustdoc-json>
。这一步将运行多个查询,以查找特定类型的 semver 违规,并报告它们发现的违规。
注意
- 目前每个类别仅报告 5 个违规。
- 如果在一个庞大的代码库(数百万行 Rust 代码)上使用它,查询可能会稍微慢一些:有几个地方的查询存在一些
O(n^2)
缩放,对于n
个项目,我还没有时间将其优化到O(n)
。抱歉!我暂时优先考虑功能而不是速度,通过一点额外的工作,运行时间将显著提高。 - 无假阳性:目前,所有查询都报告了 semver 违规的有力证据:没有假阳性。它们总是列出基线项的文件名和行号,这些基线项在新代码中找不到。
- 存在假阴性:这个工具还在开发中,还不能检查所有类型的 semver 违规。正是因为它没有找到任何 semver 问题,并不意味着它们不存在。
依赖项
~14–24MB
~397K SLoC