#semver #diff #cargo #rustdoc-json

public-api

列出并比较Rust库crate的公共API。依赖于nightly工具链的rustdoc JSON输出。

54个版本 (28个破坏性更新)

0.37.0 2024年7月26日
0.35.1 2024年6月20日
0.33.1 2023年11月29日
0.31.2 2023年6月18日
0.12.4 2022年7月24日

72开发工具

Download history 1512/week @ 2024-04-25 1271/week @ 2024-05-02 738/week @ 2024-05-09 933/week @ 2024-05-16 965/week @ 2024-05-23 1416/week @ 2024-05-30 1934/week @ 2024-06-06 1393/week @ 2024-06-13 2002/week @ 2024-06-20 1889/week @ 2024-06-27 1497/week @ 2024-07-04 1304/week @ 2024-07-11 1117/week @ 2024-07-18 2188/week @ 2024-07-25 1952/week @ 2024-08-01 1667/week @ 2024-08-08

每月7,142 次下载
15 个crate中(10个直接使用)

MIT 许可证

110KB
2K SLoC

public-api

通过分析来自 rustdoc +nightly 的rustdoc JSON输出文件来列出并比较Rust库crate的公共API。

用法

… 作为Rust库

查看docs.rs以获取库文档和示例代码。

… 作为CLI

使用cargo public-api进行CLI用例。

… 作为CI检查

在CI中运行常规的 cargo test 命令,您将能够

  • 防止意外更改公共API
  • 审查故意更改的公共API差异

首先将推荐的库的最新版本添加到您的 [dev-dependencies]

cargo add --dev \
    rustup-toolchain \
    rustdoc-json \
    public-api \
    expect-test

然后向您的项目添加以下测试。作为以下测试代码的作者,我特此将其与CC0关联,并在法律允许的范围内放弃所有版权和相关或邻近的权利

#[test]
fn public_api() {
    // Install a compatible nightly toolchain if it is missing
    rustup_toolchain::install(public_api::MINIMUM_NIGHTLY_RUST_VERSION).unwrap();

    // Build rustdoc JSON
    let rustdoc_json = rustdoc_json::Builder::default()
        .toolchain(public_api::MINIMUM_NIGHTLY_RUST_VERSION)
        .build()
        .unwrap();

    // Derive the public API from the rustdoc JSON
    let public_api = public_api::Builder::from_rustdoc_json(rustdoc_json)
        .build()
        .unwrap();

    // Assert that the public API looks correct
    expect_test::expect_file!["public-api.txt"].assert_eq(&public_api.to_string());
}

在您首次运行测试之前,您需要祝福当前的公共API

UPDATE_EXPECT=1 cargo test public_api

这将在您的项目中创建一个 tests/public-api.txt 文件,您需要使用 git add 与您的其他项目文件一起添加。每次更改公共API时,您都需要使用上述命令再次祝福它。如果您忘记祝福,测试将失败,并附带有关如何祝福的说明。

变更日志

请参阅 CHANGELOG.md

维护者

请参阅此处

依赖项

~0.9–1.8MB
~37K SLoC