List public items (public API) of library crates. Enables diffing public API between releases.

Overview

cargo-public-items

List public items (the public API) of a Rust library crate by analyzing the rustdoc JSON of the crate.

Automatically builds the rustdoc JSON for you, which requires a nightly Rust toolchain to be installed.

Installation

cargo install cargo-public-items

Usage

To print all items that make up the public API of your Rust library crate, simply do this:

cd your-rust-library
cargo public-items

and the public API will be printed with one line per item:

your_rust_library
your_rust_library::some_function
your_rust_library::SomeStruct
your_rust_library::SomeStruct::some_struct_member
your_rust_library::SomeStruct::another_struct_member

Tip: If you pipe the output of different versions of your library to different files, you can use diff to diff the public API of your Rust library across versions.

Target audience

Maintainers of Rust libraries that want to keep track of changes to their public API.

Implementation details

This utility is a convenient cargo wrapper around the public_items crate (https://github.com/Enselic/public_items).

Comments
  • Add `--deny=all` option to exit with failure if there is an API diff

    Add `--deny=all` option to exit with failure if there is an API diff

    Closes #63

    This is merely a proposal.

    I am not very sure about the actual flag name. --check seems to be ambiguous for me, maybe something along --check-diff-empty or --is-empty is more asppropriate.

    Tell me what you think!

    enhancement 
    opened by matthiasbeyer 20
  • Make `--deny=...` support `added`, `changed`, and `removed`

    Make `--deny=...` support `added`, `changed`, and `removed`

    In #72 the foundation for denying API diffs was implemented.

    This PR is the next step to allow only certain changes to APIs via CLI parameter.

    Tell me what you think, whether this looks good to you. If it does, I can of course add tests!

    enhancement 
    opened by matthiasbeyer 17
  • Add API to write all items into buffer

    Add API to write all items into buffer

    I have an expect test that checks for public API changes, but I currently have to dig into internals to get it working: https://github.com/SUPERCILEX/ftzz/blob/bc6779dd0b213f3c2c1150fb6ae8913674240815/tests/api.rs. It'd be nice to have an API that takes in a Write and spits out the items.

    enhancement 
    opened by SUPERCILEX 10
  • Syntax highlighted output

    Syntax highlighted output

    It would be nice to syntax highlight the output. Should be pretty easy.

    1. Create a custom sublime syntax for the output format
    2. Use the bat library to highlight the output
    enhancement 
    opened by Enselic 10
  • Pedantic clippy lints

    Pedantic clippy lints

    I followed pretty much all clippy lints (one was a false lint). I have the feeling these all help in cleaning up the code a tiny bit more. If you do not agree, or want some of them reverted just let me know.

    cargo clippy -- -W clippy::nursery -W clippy::pedantic
    
    category-exclude 
    opened by douweschulte 9
  • Add build `--target` option

    Add build `--target` option

    This makes it possible to generate public API listing for a crate for a specific Rust build target other than the default.

    Such as --target x86_64-unknown-linux-musl or --target wasm32-unknown-unknown

    Resolves: #105

    enhancement 
    opened by repi 9
  • Qualified path not shown for all types in signatures

    Qualified path not shown for all types in signatures

    I was hoping to use cargo-public-api to check for accidentally including dependency type in public APIs, for example:

    use aws_sdk_cloudformation::model::Tag; // import from a dependency
    
    // ...
    
    pub fn set_tags(tags: Vec<Tag>) { /* ... */ }
    

    What I had hoped to see in the output for this example (in a crate called pubapicheck) is:

    pub fn pubapicheck::set_tags(tags: Vec<aws_sdk_cloudformation::model::Tag>)
    pub mod pubapicheck
    

    But what I actually get is:

    pub fn pubapicheck::set_tags(tags: Vec<Tag>)
    pub mod pubapicheck
    

    You can narrow things down a bit with some gnarly regex shenanigans to find types without your crate (or other common words) as a prefix, but it would be easier if types in signatures were presented by their qualified path.

    gnarly regex shenanigans
    cargo public-api \
      | rg -P '(?<=[^_a-zA-Z0-9:'"'"'])(?!cloudformatious(::|\b)|pub|unsafe|type|struct|field|trait|String|Vec|Option|Result|mut|str|self|u\d+|Self|fn|mod|enum|variant|impl|Send|Sync|for|(Ref)?UnwindSafe|Unpin|std|bool|Into|where|async|const|Box|dyn|Pin|crate|_serde|__S|__D|as\b|task::|fmt::|Iterator\b|Item\b|D\b|S\b|_\b|I\b|non_exhaustive)([_a-zA-Z0-9]+::)*[_a-zA-Z0-9]+(?!:)\b'
    

    Apologies if this is a known limitation.

    bug 
    opened by connec 8
  • Be able to diff workspace crate against published crate version

    Be able to diff workspace crate against published crate version

    It would be great to have an alternative to --diff-git-checkouts that instead of syncing a previous commit of the same repo (which can be a quite heavy and complex operation on a large repo) you can compare against a previously published crate version on crates.io. Have there been any thoughts of such an alternative?

    So something like --diff-published-crate x.y.z which downloads the crate from crates.io (or the registry it was specified to use), unpacks it, and compares it from that.

    We have a monorepo that has rust-toolchain.toml and lots of forked dependencies so syncing previous git versions and comparing that can be a bit problematic and slow. Also makes it harder if you have pending staged changes etc.

    enhancement high-prio 
    opened by repi 8
  • Toml parsing fails if it uses workspace keys

    Toml parsing fails if it uses workspace keys

    This:

    [package]
    version.workspace = true
    

    Causes the following crash

    thread 'api' panicked at 'called `Result::unwrap()` on an `Err` value: CargoTomlError(Parse(Error { inner: ErrorInner { kind: Custom, line: Some(2), col: 20, at: Some(50), message: "invalid type: map, expected a string", key: ["package", "version"] } }))', fuc_engine/tests/api.rs:10:82
    

    Not using *.workspace = true fixes the issue.

    limitation-upstream 
    opened by SUPERCILEX 7
  • Public member functions & trait impls are missing for wildcard `use`ed module

    Public member functions & trait impls are missing for wildcard `use`ed module

    If one does a wildcard use of an internal module, such as use xx::* this will include public types and functions in that module, but it will miss any member functions or trait implementations of types inside that module if the module is not public.

    Example

    Given this code:

    mod a {
        pub mod a1 {
            #[derive(Copy, Clone)]
            pub struct Test {}
    
            impl Test {
                pub fn test2() {}
            }
    
            pub fn test1() {}
        }
    }
    
    pub use a::*;
    

    this generates this output which is missing the test2 member function and the derived clone member function:

    pub fn api_test::a1::test1()
    pub mod api_test
    pub mod api_test::a1
    pub struct api_test::a1::Test
    

    but it should be:

    pub fn api_test::a1::Test::clone(&self) -> api_test::a1::Test
    pub fn api_test::a1::Test::test2()
    pub fn api_test::a1::test1()
    pub mod api_test
    pub mod api_test::a
    pub mod api_test::a1
    pub mod api_test::a::a1
    pub struct api_test::a1::Test
    pub struct api_test::a::a1::Test
    

    if one change mod a to pub mod a then the member functions are correctly included both under the a module and from the use a::* statement.

    bug-upstream 
    opened by repi 7
  • Nightly 2022-09-06 fails, needs `rustdoc-types` v0.16.0 upgrade

    Nightly 2022-09-06 fails, needs `rustdoc-types` v0.16.0 upgrade

    Otherwise fails in one of our crates on:

    Error: Failed to parse rustdoc JSON
    Caused by:
        invalid type: string "0:211:1559", expected adjacently tagged enum Type at line 1 column 253901
    

    looks like a pretty small upgrade of the types.

    stabilization of rustdoc json output can't come soon enough! :)

    opened by repi 7
  • Support `cargo public-api diff latest`

    Support `cargo public-api diff latest`

    Which will diff against the latest published version of a crate.

    Downsides:

    • Using crates-index adds 22 deps, crossing the 100 deps line (we end up at 115). Maybe we can find a more light-weight solution.
    category-enhancement 
    opened by Enselic 1
  • Support for ignoring `#[automatically_derived]` (`Clone`, `Eq`, etc)

    Support for ignoring `#[automatically_derived]` (`Clone`, `Eq`, etc)

    Consider this public API:

    #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
    pub struct S {
        i: i32,
    }
    

    With cargo public-api --simplified the public API is reported as being:

    pub mod api_test
    pub struct api_test::S
    impl core::clone::Clone for api_test::S
    pub fn api_test::S::clone(&self) -> api_test::S
    impl core::fmt::Debug for api_test::S
    pub fn api_test::S::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
    impl core::cmp::Eq for api_test::S
    impl core::cmp::Ord for api_test::S
    pub fn api_test::S::cmp(&self, other: &api_test::S) -> core::cmp::Ordering
    impl core::cmp::PartialEq<api_test::S> for api_test::S
    pub fn api_test::S::eq(&self, other: &api_test::S) -> bool
    impl core::cmp::PartialOrd<api_test::S> for api_test::S
    pub fn api_test::S::partial_cmp(&self, other: &api_test::S) -> core::option::Option<core::cmp::Ordering>
    impl core::marker::StructuralEq for api_test::S
    impl core::marker::StructuralPartialEq for api_test::S
    

    which, while correct, is a bit noisy. I think there would be utility in adding a way for automatically derived impls to be omitted from the output, to make the output less noisy.

    I propose that if --simplified (short from -s) is used twice, we skip automatically derived impls. So the CLI and its output would be:

    $ cargo public-api -ss
    pub mod api_test
    pub struct api_test::S
    

    The code to exclude automatically derived impls is:

    diff --git a/public-api/src/item_processor.rs b/public-api/src/item_processor.rs
    index 136ca3f..6df32fc 100644
    --- a/public-api/src/item_processor.rs
    +++ b/public-api/src/item_processor.rs
    @@ -170,7 +170,9 @@ impl<'c> ItemProcessor<'c> {
             item: &'c Item,
             impl_: &'c Impl,
         ) {
    -        if !ImplKind::from(impl_).is_active(self.options) {
    +        if !ImplKind::from(impl_).is_active(self.options)
    +            || item.attrs.iter().any(|a| a == "#[automatically_derived]")
    +        {
                 return;
             }
     
    

    but we need to:

    1. Move it inside of ImplKind::from() to make the code look nicer
    2. Figure out how to enable multiple --simplified with clap v4 derive (From here: "Replaced Arg::multiple_occurrences with ArgAction::Append or ArgAction::Count")
    3. Add public_api::Options::skip_automatically_derived: bool and set if if --simplified is used twice

    Should be pretty straight-forward, so setting good-first-issue.

    enhancement good first issue 
    opened by Enselic 1
  • Group items even if multiple inherent `impl`s are used

    Group items even if multiple inherent `impl`s are used

    pub struct pdbtbx::PDB
    pub struct field pdbtbx::PDB::identifier: core::option::Option<alloc::string::String>
    ... (more fields)
    impl pdbtbx::PDB
    impl pdbtbx::PDB
    impl pdbtbx::PDB
    impl<'a> pdbtbx::PDB
    

    This example is from the crate pdbtbx where I have used multiple impl blocks on a single struct to allow fro grouping of functions with some general comments about those groups. That is why it stands out so much. But I would assume these impl blocks (just the main block with all attached functions) to not be shown in the list here. An argument could be made to have the functions grouped below their respective impl blocks, especially when generic bounds are used. But this seems to not be the case here.

    enhancement high-prio 
    opened by douweschulte 7
  • Plain `--help` should also show `diff --help`

    Plain `--help` should also show `diff --help`

    So that a single --help invocation is sufficient to learn how to use the tool.

    Blocked on https://github.com/clap-rs/clap/issues/1334 (unless we work around this somehow, which I would be in favor doing, unless it's very complicated).

    limitation-upstream 
    opened by Enselic 0
  • Re-exporting an external module does not include its public API

    Re-exporting an external module does not include its public API

    One of our crates, cervo, is a basic wrapper crate that depends on 4 other crates and just use them like this to have a single convenient crate with that includes the API of all of the 4 ones it depends on.

    pub use cervo_asset as asset;
    pub use cervo_core as core;
    pub use cervo_nnef as nnef;
    pub use cervo_onnx as onnx;
    

    This results in this output:

    pub mod cervo
    pub use cervo::asset
    pub use cervo::core
    pub use cervo::nnef
    pub use cervo::onnx
    

    which is similar to the rustdoc output:

    image

    but it is not correct in the case of exhaustively describing the public API of the crate.

    Think it would have to for re-exports instead of listing that just as a use statement in the output instead include the entire module output for each re-export?

    limitation-upstream 
    opened by repi 4
Releases(v0.25.0)
  • v0.25.0(Dec 28, 2022)

    What's Changed

    Bugfixes

    • Group impl blocks together with their respective functions by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/252

    Other Changes

    • Get rid of enum variant and struct field prefixes by @Enselic in https://github.com/Enselic/cargo-public-api/pull/250
    • Upgrade all deps by @SUPERCILEX in https://github.com/Enselic/cargo-public-api/pull/254

    rustdoc-json library

    • Add rustdoc_json::Builder::package_target() to build for bin, test, bench, etc by @dimpolo in https://github.com/Enselic/cargo-public-api/pull/246
    • Correctly determine JSON path for Builder::package("[email protected]") by @dimpolo in https://github.com/Enselic/cargo-public-api/pull/247

    New Contributors

    • @SUPERCILEX made their first contribution in https://github.com/Enselic/cargo-public-api/pull/254

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.24.2...v0.25.0

    Source code(tar.gz)
    Source code(zip)
  • v0.24.2(Dec 15, 2022)

    What's Changed

    New Features

    • Interpret --color as --color=always by @Enselic in https://github.com/Enselic/cargo-public-api/pull/239

    Other Changes

    • Deprecate legacy --diff CLI and point to new diff subcommand instead by @Enselic in https://github.com/Enselic/cargo-public-api/pull/241

    rustdoc-json library

    • Support --document-private-items by @dimpolo in https://github.com/Enselic/cargo-public-api/pull/242
    • Derive Clone for rustdoc_json::Builder by @dimpolo in https://github.com/Enselic/cargo-public-api/pull/244

    New Contributors

    • @dimpolo made their first contribution in https://github.com/Enselic/cargo-public-api/pull/242

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.24.1...v0.24.2

    Source code(tar.gz)
    Source code(zip)
  • v0.24.1(Dec 5, 2022)

    What's Changed

    New Features

    • Add new CLI for diffing: a diff subcommand by @Enselic in https://github.com/Enselic/cargo-public-api/pull/235

    New Contributors

    • @EnselicCICD made their first contribution in https://github.com/Enselic/cargo-public-api/pull/230

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.24.0...v0.24.1

    Source code(tar.gz)
    Source code(zip)
  • v0.24.0(Nov 22, 2022)

    What's Changed

    New Features

    • Include Blanket and Auto Trait impls by default. Use --simplified to opt-out. by @Enselic in https://github.com/Enselic/cargo-public-api/pull/201
    • Allow omitting package name when diffing against crates.io by @Enselic in https://github.com/Enselic/cargo-public-api/pull/209

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.23.0...v0.24.0

    Source code(tar.gz)
    Source code(zip)
  • v0.23.0(Nov 15, 2022)

    What's Changed

    New Features

    • Show fully qualified paths for external items (with some limitations) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/185

    Other Changes

    • Update clap to v4 by @dnaka91 in https://github.com/Enselic/cargo-public-api/pull/202

    New Contributors

    • @dnaka91 made their first contribution in https://github.com/Enselic/cargo-public-api/pull/203

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.22.0...v0.23.0

    Source code(tar.gz)
    Source code(zip)
  • v0.22.0(Nov 13, 2022)

    What's Changed

    New Features

    • Render all impl items themselves by @Enselic in https://github.com/Enselic/cargo-public-api/pull/195
    • Support --diff-published [email protected] to diff against crates.io by @Enselic in https://github.com/Enselic/cargo-public-api/pull/196
    • Group items logically when sorting them by @Enselic in https://github.com/Enselic/cargo-public-api/pull/198

    Bugfixes

    • Fix crash with package.edition.workspace = true by @Jake-Shadle in https://github.com/Enselic/cargo-public-api/pull/199

    public_api library

    • public_api: Remove deprecated fn public_api_from_rustdoc_json_str() by @Enselic in https://github.com/Enselic/cargo-public-api/pull/197

    New Contributors

    • @Jake-Shadle made their first contribution in https://github.com/Enselic/cargo-public-api/pull/199

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.21.0...v0.22.0

    Source code(tar.gz)
    Source code(zip)
  • v0.21.0(Oct 21, 2022)

    What's Changed

    New Features

    • Add smart --diff shorthand for --diff-git-checkouts and --diff-rustdoc-json by @Enselic in https://github.com/Enselic/cargo-public-api/pull/187
    • Validate and resolve CLI commit references by @mqudsi in https://github.com/Enselic/cargo-public-api/pull/182

    Bugfixes

    • Fix version.workspace = true crash by bumping cargo_toml to 0.13.0 by @Enselic in https://github.com/Enselic/cargo-public-api/pull/186

    public_api library

    • Rename PublicItemsDiff to PublicApiDiff by @Enselic in https://github.com/Enselic/cargo-public-api/pull/189
    • Make PublicApiDiff::between(...) take PublicApis instead of Vec<PublicItem>s by @Enselic in https://github.com/Enselic/cargo-public-api/pull/190
    • Hide PublicApi::items behind PublicApi::items() iterator by @Enselic in https://github.com/Enselic/cargo-public-api/pull/191
    • Add PublicApi::from_rustdoc_json(...) that takes a rustdoc JSON file Path by @Enselic in https://github.com/Enselic/cargo-public-api/pull/193

    New Contributors

    • @mqudsi made their first contribution in https://github.com/Enselic/cargo-public-api/pull/182

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.20.1...v0.21.0

    Source code(tar.gz)
    Source code(zip)
  • v0.20.1(Oct 13, 2022)

    What's Changed

    New Features

    • Add option --force-git-checkouts to force git checkouts by @inikulin in https://github.com/Enselic/cargo-public-api/pull/174
    • Support std and core pre-built JSON via new --rustdoc-json option by @Enselic in https://github.com/Enselic/cargo-public-api/pull/177

    Bugfixes

    • Render supertraits of traits by @Enselic in https://github.com/Enselic/cargo-public-api/pull/178

    public_api library

    • Allow to specify --target-dir when building rustdoc JSON by @Enselic in https://github.com/Enselic/cargo-public-api/pull/171

    New Contributors

    • @inikulin made their first contribution in https://github.com/Enselic/cargo-public-api/pull/174

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.20.0...v0.20.1

    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(Oct 2, 2022)

    What's Changed

    New Features

    • Always fully qualify paths to structs, enums, unions, etc when possible by @Enselic in https://github.com/Enselic/cargo-public-api/pull/156
    • Include Auto Trait Implementations in API listings (and diffs) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/152

    Bugfixes

    • Properly render short-hand qualified paths with Self:: by @Enselic in https://github.com/Enselic/cargo-public-api/pull/141
    • fix windows +toolchain invocation by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/147

    public_api library

    • deprecate public_api_from_rustdoc_json_str and replace with method on PublicApi by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/159
    • move rustdoc_json::build into a struct fn BuildOptions::build by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/158

    Other Changes

    • Make --toolchain take toolchain name without + by @Enselic in https://github.com/Enselic/cargo-public-api/pull/168
    • Bump min nightly to nightly-2022-09-28 by @Enselic in https://github.com/Enselic/cargo-public-api/pull/170

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.19.0...v0.20.0

    Source code(tar.gz)
    Source code(zip)
  • v0.19.0(Sep 8, 2022)

    What's Changed

    New Features

    • Properly render tuple structs (requires nightly-2022-09-08) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/139

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.18.0...v0.19.0

    Source code(tar.gz)
    Source code(zip)
  • v0.18.0(Sep 7, 2022)

    What's Changed

    New Features

    • Support proper rendering of hidden tuple fields (requires nightly-2022-09-07) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/99

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.17.0...v0.18.0

    Source code(tar.gz)
    Source code(zip)
  • v0.17.0(Sep 6, 2022)

    What's Changed

    Bugfixes and Other Changes

    • Support edge-case command cargo public-api -p public-api by @Enselic in https://github.com/Enselic/cargo-public-api/pull/133
    • List explicit enum variant discriminant values (requires nightly-2022-09-06) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/135

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.16.0...v0.17.0

    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(Sep 4, 2022)

    What's Changed

    Bugfixes and Other Changes

    • Remove support for --output-format markdown by @Enselic in https://github.com/Enselic/cargo-public-api/pull/127
    • ensure --toolchain begins with + by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/128
    • correctly identify toolchain specified with --toolchain by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/129
    • Emit a warning when toolchain is overridden and not usable with rustdoc_json by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/126

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.15.0...v0.16.0

    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Aug 28, 2022)

    What's Changed

    New Features

    • Add build --target option by @repi in https://github.com/Enselic/cargo-public-api/pull/107
    • Support for --features / --all-features / --no-default-features by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/115
    • Support for --package workspace-package (or short form -p) by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/116
    • Make cargo +custom public-api build rustdoc JSON with toolchain custom by @Emilgardis in https://github.com/Enselic/cargo-public-api/pull/113

    Bugfixes and Other Changes

    • Show rustdoc JSON build progress info on stderr by @Enselic in https://github.com/Enselic/cargo-public-api/pull/97
    • Properly handle wildcard re-exports (pub use foo::*) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/104
    • Prevent stack overflow when encountering recursive re-exports by @Enselic in https://github.com/Enselic/cargo-public-api/pull/108
    • Rename --rustdoc-json-toolchain to just --toolchain by @Enselic in https://github.com/Enselic/cargo-public-api/pull/109
    • Make --verbose print missing item IDs by @Enselic in https://github.com/Enselic/cargo-public-api/pull/110

    New Contributors

    • @repi made their first contribution in https://github.com/Enselic/cargo-public-api/pull/107
    • @Emilgardis made their first contribution in https://github.com/Enselic/cargo-public-api/pull/115

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.14.0...v0.15.0

    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Aug 15, 2022)

    What's Changed

    New Features

    • Make --deny=... support added, changed, and removed by @matthiasbeyer in https://github.com/Enselic/cargo-public-api/pull/85

    Bugfixes and Other Changes

    • Support rustdoc JSON from nightly-2022-08-15 and onwards by @Enselic in https://github.com/Enselic/cargo-public-api/pull/95

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.13.0...v0.14.0

    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Aug 12, 2022)

    What's Changed

    New Features

    • Automatically restore original branch/commit after --diff-git-checkouts by @Enselic in https://github.com/Enselic/cargo-public-api/pull/90

    Bugfixes and Other Changes

    • Properly render dyn ... (requires nightly-2022-08-10) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/86

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.12.4...v0.13.0

    Source code(tar.gz)
    Source code(zip)
  • v0.12.4(Jul 24, 2022)

    What's Changed

    New Features

    • Add --deny=all option to exit with failure if there is an API diff by @matthiasbeyer in https://github.com/Enselic/cargo-public-api/pull/72

    Other Changes and Fixes

    • Inline imports instead of showing pub use in APIs by @Enselic in https://github.com/Enselic/cargo-public-api/pull/77

    New Contributors

    • @matthiasbeyer made their first contribution in https://github.com/Enselic/cargo-public-api/pull/72

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.12.3...v0.12.4

    Source code(tar.gz)
    Source code(zip)
  • v0.12.3(Jul 12, 2022)

    What's Changed

    Noteworthy changes in this release

    • Make us work with recently released rustup 1.25.0 by @Enselic in https://github.com/Enselic/cargo-public-api/pull/74

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.12.2...v0.12.3

    Source code(tar.gz)
    Source code(zip)
  • v0.12.2(Jul 1, 2022)

    What's Changed

    Noteworthy changes in this release

    • --cap-lints warn when building rustdoc JSON by @Enselic in https://github.com/Enselic/cargo-public-api/pull/64
    • Remove --only-build-rustdoc-json which was a hack for tests by @Enselic in https://github.com/Enselic/cargo-public-api/pull/68
    • Support --git-diff-checkouts together with --manifest-path by @Enselic in https://github.com/Enselic/cargo-public-api/pull/66

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.12.1...v0.12.2

    Source code(tar.gz)
    Source code(zip)
  • v0.12.1(Jun 25, 2022)

    What's Changed

    Noteworthy changes in this release

    • Upgrade hashbag to 0.1.6 and remove vendored code by @Enselic in https://github.com/Enselic/cargo-public-api/pull/60

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.12.0...v0.12.1

    Source code(tar.gz)
    Source code(zip)
  • v0.12.0(Jun 21, 2022)

    What's Changed

    Noteworthy changes in this release

    • Add --rustdoc-json-toolchain +custom to cargo public-api by @Enselic in https://github.com/Enselic/cargo-public-api/pull/56
    • Add helper script to diff multiple versions serially by @Enselic in https://github.com/Enselic/cargo-public-api/pull/57
    • Render relevant #[attributes] in front of items by @Enselic in https://github.com/Enselic/cargo-public-api/pull/59

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.11.5...v0.12.0

    Source code(tar.gz)
    Source code(zip)
  • v0.11.5(Jun 6, 2022)

    What's Changed

    Noteworthy changes in this release

    • Highlight changes on a Token level in coloured diff output by @Fraser999 in https://github.com/Enselic/cargo-public-api/pull/49
    • Rewrite diff algo with hashbag to fix off-by-one skewing by @Enselic in https://github.com/Enselic/cargo-public-api/pull/53

    New Contributors

    • @Fraser999 made their first contribution in https://github.com/Enselic/cargo-public-api/pull/49

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.11.4...v0.11.5

    Source code(tar.gz)
    Source code(zip)
  • v0.11.4(May 30, 2022)

    What's Changed

    • Disable serde_json recursion limit by @Enselic in https://github.com/Enselic/cargo-public-api/pull/47
    • Remove render_id() to fix panic with diesel by @Enselic in https://github.com/Enselic/cargo-public-api/pull/48

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.11.3...v0.11.4

    Source code(tar.gz)
    Source code(zip)
  • v0.11.3(May 26, 2022)

    What's Changed

    • Release.yml: Wait for public-api version before deploying cargo-public-api by @Enselic in https://github.com/Enselic/cargo-public-api/pull/46
    • Make cargo-public-api part of a workspace by @Enselic in https://github.com/Enselic/cargo-public-api/pull/35
    • Move public-api crate code here by @Enselic in https://github.com/Enselic/cargo-public-api/pull/34
    • doc/development.md: Update 'How to release' by @Enselic in https://github.com/Enselic/cargo-public-api/pull/44
    • Bump to v0.11.2 so we can later try to release from the new repo structure by @Enselic in https://github.com/Enselic/cargo-public-api/pull/45

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.11.1...v0.11.3

    Source code(tar.gz)
    Source code(zip)
  • v0.11.1(May 22, 2022)

    What's Changed

    • Provide helpful instructions when encountering virtual manifest errors by @Enselic in https://github.com/Enselic/cargo-public-api/pull/33

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.11.0...v0.11.1

    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(May 22, 2022)

    What's Changed

    • Gracefully handle ErrorKind::BrokenPipe (public-api ... | head -n 1) by @Enselic in https://github.com/Enselic/cargo-public-api/pull/31
    • Bump public-api dependency to v0.11.0 by @Enselic in https://github.com/Enselic/cargo-public-api/pull/32

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.10.2...v0.11.0

    Source code(tar.gz)
    Source code(zip)
  • v0.10.2(Apr 27, 2022)

    What's Changed

    • CI/CD: Create GitHub Releases with auto-generated release notes by @Enselic in https://github.com/Enselic/cargo-public-api/pull/30

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.10.0...v0.10.2

    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Apr 27, 2022)

    What's Changed

    • Adapt to removal of TokenStream from public-api public API by @Enselic in https://github.com/Enselic/cargo-public-api/pull/27
    • Set up making releases from GitHub Actions by @Enselic in https://github.com/Enselic/cargo-public-api/pull/28
    • CI: Add --locked to ensure Cargo.lock is also up to date by @Enselic in https://github.com/Enselic/cargo-public-api/pull/29

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.9.3...v0.10.0

    Source code(tar.gz)
    Source code(zip)
  • v0.9.3(Apr 27, 2022)

    What's Changed

    • Add support for --diff-rustdoc-json FILE1 FILE2 by @Enselic in https://github.com/Enselic/cargo-public-api/pull/24
    • Perform syntax highlighting on output format plain by @douweschulte in https://github.com/Enselic/cargo-public-api/pull/23

    New Contributors

    • @douweschulte made their first contribution in https://github.com/Enselic/cargo-public-api/pull/23

    Full Changelog: https://github.com/Enselic/cargo-public-api/compare/v0.9.2...v0.9.3

    Source code(tar.gz)
    Source code(zip)
  • v0.9.2(Apr 27, 2022)

Owner
Martin Nordholts
Co-maintaining and improving bat. A cat(1) clone with syntax highlighting and more.
Martin Nordholts
A gui tool written in Dioxus to make it easy to release a workspace of crates to crates.io

Easy-Release: a visual tool for releasing workspaces of libraries A work-in-progress GUI for releasing a large workspace of crates manually, but easil

Jon Kelley 13 Jan 18, 2023
An interface for managing collections of labeled items and generating random subsets with specified restrictions

An interface for managing collections of labeled items and generating random subsets with specified restrictions

Kaio Vieira 3 Oct 30, 2022
rpsc is a *nix command line tool to quickly search for file systems items matching varied criterions like permissions, extended attributes and much more.

rpsc rpsc is a *nix command line tool to quickly search for file systems items matching varied criterions like permissions, extended attributes and mu

null 3 Dec 15, 2022
A list of crates with snippets used by me to learn more about Rust.

my-rust-examples This is a list of crates used by me to learn Rust. How to execute You can use a dependency called cargo-play: cargo install cargo-pla

Ronald 0 Jan 3, 2022
1 library and 2 binary crates to run SSH/SCP commands on a "mass" of hosts in parallel

massh 1 library and 2 binary crates to run SSH/SCP commands on a "mass" of hosts in parallel. The binary crates are CLI and GUI "frontends" for the li

null 2 Oct 16, 2022
argmax is a library that allows Rust applications to avoid Argument list too long errors (E2BIG) by providing a std::process::Command wrapper with a

argmax argmax is a library that allows Rust applications to avoid Argument list too long errors (E2BIG) by providing a std::process::Command wrapper w

David Peter 22 Nov 20, 2022
Rust bindings to the RVVM's public api

rvvm [WIP] Safe Rust bindings to the RVVM's public API. Provides the Rust-idiomatic interface to the RVVM public API. Implemented Virtual machine crea

null 3 Jan 9, 2023
This repo contains crates that are used to create the micro services and keep shared code in a common place.

MyEmma Helper Crates This repo contains crates that can are reused over different services. These crate are used in projects at MyEmma. But these crat

MyEmma 1 Jan 14, 2022
A complete imgui-rs example using dependencies only from crates.io.

Dear imgui-rs, hello. This is a fairly basic, but complete and standalone example application for the Rust version of dear imgui (https://github.com/o

null 0 Nov 30, 2022
Use raw-window-handle 0.5 with crates that depend on 0.4.

OldHasRawWindowHandleWrapper Wrap any type that implements HasRawWindowHandle and HasRawDisplayHandle from raw-window-handle 0.5 in OldHasRawWindowHan

null 1 Nov 25, 2022
A series of crates that I made to compile images/video into asciinema & play them.

Bad Apple A series of crates that I made to compile images/video into asciinema & play them. The end goal is to make a kernel & legacy bootloader that

S0ra 10 Nov 29, 2022
belt is a command line app that can show your time from a list of selected time zones

A CLI app to show your time from a list of selected time zones, and a rust lib to parse dates in string formats that are commonly used.

Rollie Ma 23 Nov 4, 2022
A curated list of replacements for existing software written in Rust

Awesome Alternatives in Rust A curated list of replacements for existing software written in Rust. If you want to contribute, please read CONTRIBUTING

Takayuki Maeda 2.7k Jan 8, 2023
CLI app to display list of trending anime, music charts or recommend anime to watch or song to listen to.

Description Anitrendz is a cli app that uses data from the anitiop api to list the top anime and songs or recommend a random anime to watch or song to

Jimmy 9 Jun 11, 2022
Curated list of awesome projects and resources related to Rust and computer security

Awesome Rust Security Curated list of awesome projects and resources related to Rust and computer security Table of Contents Tools Web and Cloud Secur

Alan 131 Jan 1, 2023
A command-line tool to generate a list of required missing Android OS Project blobs.

aosp-missing-blobs aosp-missing-blobs is a nifty tool to identify required blobs (.so) that are missing from AOSP ROM builds, and to show which existi

Josh 176 Dec 16, 2022
Cargo-about - 📜 Cargo plugin to generate list of all licenses for a crate 🦀

?? cargo-about Cargo plugin for generating a license listing for all dependencies of a crate See the book ?? for in-depth documentation. Please Note:

Embark 281 Jan 1, 2023
As-tree - Print a list of paths as a tree of paths 🌳

as-tree Print a list of paths as a tree of paths. For example, given: dir1/foo.txt dir1/bar.txt dir2/qux.txt it will print: . ├── dir1 │ ├── foo.tx

Jake Zimmerman 396 Dec 10, 2022
⚙️ A curated list of static analysis (SAST) tools for all programming languages, config files, build tools, and more.

This repository lists static analysis tools for all programming languages, build tools, config files and more. The official website, analysis-tools.de

Analysis Tools 10.7k Jan 2, 2023