#semver #violation #scan #rustdoc #query #check #enums

已删除 cargo_semver_check

扫描您的Rust包以查找semver违规

0.2.0 2022年7月13日
0.1.0 2022年7月12日

#7#violation

Apache-2.0

51KB
1K SLoC

Rust 725 SLoC // 0.0% comments Rusty Object Notation 214 SLoC GraphQL 153 SLoC // 0.1% comments

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