TL;DR
Rust のクレートに、SemVer の違反がないかを検査するツール。公開する前に cargo semver-checks を実行すると、バージョン番号に見合わない破壊的変更を見つけられる。
なぜ必要か
Effective Rust 項目21 によると、変更が後方互換かどうかを目で確かめるのは大変なので、cargo-semver-checks などを CI で動かすとよい。
仕組み
README によると、rustdoc の JSON 出力を情報源にしている。リントは Trustfall というクエリエンジンのクエリとして書かれていて、リントを作る手間と保守する手間を減らしている。比べる基準は、デフォルトでは crates.io にある前のバージョンである。バージョン、git のリビジョン、ソースのディレクトリ、rustdoc の JSON ファイルで基準を指定することもできる。
例
cargo install cargo-semver-checks --locked
cargo semver-checksGitHub Actions 用のアクション obi1kenobi/cargo-semver-checks-action も用意されている。
注意点
すべての破壊的変更を検出できるわけではない。フィールドや引数の型の変更、ジェネリクスやライフタイムの変更などには、まだリントがない。一部のフィーチャを有効にしたときだけ起きる破壊的変更も見逃すことがある。一方で、誤検知はバグとして扱われる。