Scan your Rust crate for semver violations.

Overview

cargo-semver-checks

Scan your Rust crate for semver violations.

Queries rustdoc-generated crate documentation using the trustfall "query everything" engine. Each query looks for a particular kind of semver violation, such as:

  • public struct was removed
  • public plain struct's public field was removed
  • public enum was removed
  • public enum's variant was removed
cargo install cargo-semver-checks

cargo semver-checks diff-files --current <new-rustdoc-json> --baseline <previous-rustdoc-json>

# To have rustdoc generate JSON output, use:
cargo +nightly rustdoc -- -Zunstable-options --output-format json

This crate is a work-in-progress. It can catch some semver violations, and will miss many more. Its queries and adapter implementation have not been optimized for runtime, and will currently exhibit O(n^2) runtime growth on large codebases. See the notes in the section below for details.

Using cargo-semver-checks to check your crate

Steps:

  • Perform a git checkout of your crate's last published version, which will represent your semver baseline.
  • Generate rustdoc documentation in JSON format for the crate's last published version by running cargo +nightly rustdoc -- -Zunstable-options --output-format json.
  • The above command will generate a file named doc/<your-crate-name>.json in your crate's build target directory. Copy this file somewhere else -- otherwise it will be overwritten by the next steps.
  • Switch to the version of your crate that you'd like to check.
  • Repeat the cargo rustdoc command above, and note the newly-generated doc/<your-crate-name>.json file in your build target directory.
  • Run cargo semver-checks diff-files --current <new-rustdoc> --baseline <previous-rustdoc>. This step will run multiple queries that look for particular kinds of semver violations, and report violations they find.

Notes:

  • Only 5 violations per category are reported for now.
  • If using it on a massive codebase (multiple hundreds of thousands of lines of Rust), the queries may be a bit slow: there is some O(n^2) scaling for n items in a few places that I haven't had time to optimize down to O(n) yet. Apologies! I have temporarily prioritized features over speed, and the runtime will improve significantly with a small amount of extra work.
  • No false positives: Currently, all queries report constructive proof of semver violations: there are no false positives. They always list a file name and line number for the baseline item that could not be found in the new code.
  • There are false negatives: This tool is a work-in-progress, and cannot check all kinds of semver violations yet. Just because it doesn't find any semver issues doesn't mean they don't exist.

Naming note

This crate was intended to be published under the name cargo-semver-check, and may indeed one day be published under that name. Due to an unfortunate mishap, it remains cargo-semver-checks for the time being.

Comments
  • Tests fail on nightly/beta 1.66+

    Tests fail on nightly/beta 1.66+

    Steps to reproduce the bug with the above code

    Run cargo test using cargo 1.67.0-nightly (9286a1beb 2022-11-04)

    Actual Behaviour

    failures:
    
    ---- query::tests::derive_trait_impl_removed stdout ----
    thread 'query::tests::derive_trait_impl_removed' panicked at 'assertion failed: `(left == right)`
      left: `[{"name": String("DebugFoo"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("DebugFoo")]), "span_begin_line": Uint64(7), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("Debug"), "trait_path": List([String("core"), String("fmt"), String("Debug")]), "visibility_limit": String("public")}, {"name": String("CopyBar"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("CopyBar")]), "span_begin_line": Uint64(17), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("Copy"), "trait_path": List([String("core"), String("marker"), String("Copy")]), "visibility_limit": String("public")}, {"name": String("EqFoo"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("EqFoo")]), "span_begin_line": Uint64(27), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("Eq"), "trait_path": List([String("core"), String("cmp"), String("Eq")]), "visibility_limit": String("public")}]`,
     right: `[{"name": String("DebugFoo"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("DebugFoo")]), "span_begin_line": Uint64(7), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("Debug"), "trait_path": List([String("core"), String("fmt"), String("Debug")]), "visibility_limit": String("public")}, {"name": String("CopyBar"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("CopyBar")]), "span_begin_line": Uint64(17), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("Copy"), "trait_path": List([String("core"), String("marker"), String("Copy")]), "visibility_limit": String("public")}, {"name": String("EqFoo"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("EqFoo")]), "span_begin_line": Uint64(27), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("StructuralEq"), "trait_path": List([String("core"), String("marker"), String("StructuralEq")]), "visibility_limit": String("public")}, {"name": String("EqFoo"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("EqFoo")]), "span_begin_line": Uint64(27), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("Eq"), "trait_path": List([String("core"), String("cmp"), String("Eq")]), "visibility_limit": String("public")}, {"name": String("ManualEqFoo"), "path": List([String("semver_tests"), String("test_cases"), String("derive_trait_impl_removed"), String("ManualEqFoo")]), "span_begin_line": Uint64(38), "span_filename": String("src/test_cases/derive_trait_impl_removed.rs"), "trait_name": String("StructuralEq"), "trait_path": List([String("core"), String("marker"), String("StructuralEq")]), "visibility_limit": String("public")}]`', src/query.rs:260:9
    

    Expected Behaviour

    I expect the tests to pass.

    Generated System Information

    Software version

    cargo-semver-checks 0.12.1

    Operating system

    Linux 6.0.6-arch1-1

    Command-line

    /home/tonowak/.cargo/bin/cargo-semver-checks semver-checks --bugreport
    

    cargo nightly version

    > cargo +nightly -V
    cargo 1.67.0-nightly (9286a1beb 2022-11-04)
    

    Compile time information

    • Profile: release
    • Target triple: x86_64-unknown-linux-gnu
    • Family: unix
    • OS: linux
    • Architecture: x86_64
    • Pointer width: 64
    • Endian: little
    • CPU features: fxsr,llvm14-builtins-abi,sse,sse2
    • Host: x86_64-unknown-linux-gnu

    Additional Context

    This appears to be due to a new marker trait StructuralEq added in 1.66+.

    C-bug 
    opened by tonowak 16
  • First pass at implementing 'trait_missing.ron'

    First pass at implementing 'trait_missing.ron'

    Closes #73

    I was referencing the struct_missing.ron file, and in there there's a struct_type @output @tag line in the query that doesn't exist in the enum lint. Curious what this is for.

    TODOs

    • [ ] Add trait_missing.ron query file
    • [ ] Add trait_missing.rs file
    • [ ] Add test case(s)
    • [ ] Add the outputs you expect your query to produce over your test case in a new file: src/test_data/<query_name>.output.run.
    • [ ] Add <query_name> to the list of queries tested by the query_execution_tests!() macro near the bottom of src/adapter.rs.
    • [ ] Re-run ./scripts/regenerate_test_rustdocs.sh to generate the new rustdoc JSON file.
    • [ ] Run cargo test and ensure your new test appears in the test list and runs correctly.
    • [ ] Add an include_str!("queries/<query_name>.ron"), line to SemverQuery::all_queries() in the src/query.rs file, to ensure your query is enabled for use in query runs.
    opened by seanchen1991 9
  • semver-checks check-release detects non-existant changes in core-graphics crate

    semver-checks check-release detects non-existant changes in core-graphics crate

    Steps to reproduce the bug with the above code

    Check out https://github.com/servo/core-foundation-rs and run cargo semver-checks check-release --verbose in the core-graphics directory.

    Actual Behaviour

        Updating index
         Parsing core-graphics v0.22.3 (current)
    warning: use of deprecated type alias `libc::int32_t`: Use i32 instead.
      --> core-graphics-types/src/base.rs:29:26
       |
    29 | pub type CGError = libc::int32_t;
       |                          ^^^^^^^
       |
       = note: `#[warn(deprecated)]` on by default
    
    warning: `core-graphics-types` (lib) generated 1 warning
     Documenting core-graphics v0.22.3 (/Users/jrmuizel/src/core-foundation-rs/core-graphics)
        Finished dev [unoptimized + debuginfo] target(s) in 0.66s
         Parsing core-graphics v0.22.3 (baseline)
        Updating crates.io index
     Documenting core-graphics v0.22.3
        Finished dev [unoptimized + debuginfo] target(s) in 0.93s
        Checking core-graphics v0.22.3 -> v0.22.3 (no change)
        Starting 22 checks, 0 unnecessary
            PASS [   0.167s]       major        auto_trait_impl_removed
            PASS [   0.049s]       major        derive_trait_impl_removed
            PASS [   0.001s]       major        enum_marked_non_exhaustive
            PASS [   0.020s]       major        enum_missing
            PASS [   0.008s]       major        enum_repr_c_removed
            PASS [   0.004s]       major        enum_repr_int_changed
            PASS [   0.004s]       major        enum_repr_int_removed
            PASS [   0.001s]       major        enum_struct_variant_field_missing
            PASS [   0.063s]       major        enum_variant_added
            PASS [   0.064s]       major        enum_variant_missing
            PASS [   0.048s]       major        function_missing
            PASS [   0.105s]       major        function_parameter_count_changed
            PASS [   0.156s]       major        inherent_method_missing
            FAIL [   0.004s]       major        method_parameter_count_changed
            PASS [   0.048s]       major        sized_impl_removed
            PASS [   0.001s]       major        struct_marked_non_exhaustive
            PASS [   0.038s]       major        struct_missing
            PASS [   0.004s]       major        struct_pub_field_missing
            PASS [   0.004s]       major        struct_repr_c_removed
            PASS [   0.001s]       major        struct_repr_transparent_removed
            PASS [   0.002s]       major        unit_struct_changed_kind
            PASS [   0.063s]       major        variant_marked_non_exhaustive
       Completed [   0.853s] 22 checks; 21 passed, 1 failed, 0 unnecessary
    
    --- failure method_parameter_count_changed: pub method parameter count changed ---
    
    Description:
    A publicly-visible method now takes a different number of parameters.
            ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
           impl: https://github.com/obi1kenobi/cargo-semver-check/tree/v0.13.0/src/queries/method_parameter_count_changed.ron
    
    Failed in:
      core_graphics::path::CGPath now takes 1 parameters instead of 0, in :
      core_graphics::font::CGFont now takes 1 parameters instead of 0, in :
      core_graphics::event_source::CGEventSource now takes 1 parameters instead of 0, in :
      core_graphics::image::CGImage now takes 1 parameters instead of 0, in :
      core_graphics::context::CGContext now takes 1 parameters instead of 0, in :
      core_graphics::event::CGEvent now takes 1 parameters instead of 0, in :
      core_graphics::data_provider::CGDataProvider now takes 1 parameters instead of 0, in :
      core_graphics::color_space::CGColorSpace now takes 1 parameters instead of 0, in :
           Final [   1.330s] semver requires new major version: 1 major and 0 minor checks failed
           
    

    Expected Behaviour

    No changes should be detected. I think this might have something to do with the foreign_type! macro.

    Generated System Information

    Software version

    cargo-semver-checks 0.13.0

    Operating system

    Mac OS X 10.15.6 (Darwin 19.6.0)

    Command-line

    /Users/jrmuizel/.cargo/bin/cargo-semver-checks semver-checks --bugreport
    

    cargo version

    > cargo -V
    cargo 1.64.0 (387270bc7 2022-09-16)
    

    Compile time information

    • Profile: release
    • Target triple: x86_64-apple-darwin
    • Family: unix
    • OS: macos
    • Architecture: x86_64
    • Pointer width: 64
    • Endian: little
    • CPU features: fxsr,sse,sse2,sse3,ssse3
    • Host: x86_64-apple-darwin

    Additional Context

    No response

    C-bug 
    opened by jrmuizel 8
  • Changed how Cargo.toml of baseline is being built, added all features to baseline's manifest

    Changed how Cargo.toml of baseline is being built, added all features to baseline's manifest

    Fixes https://github.com/obi1kenobi/cargo-semver-check/issues/147 Tested on the repo from this issue - seems to work. (Should I write some tests besides manually checking?)

    In the issue you mentioned deleting the baseline's Cargo.lock. Is it also needed here? I don't really understand why this step is necessary.

    opened by tonowak 8
  • Rename skipped checks to unnecessary checks for clarity.

    Rename skipped checks to unnecessary checks for clarity.

    Users reported some confusion around why checks were being skipped: https://github.com/libp2p/rust-libp2p/pull/2647#issuecomment-1256852275

    This PR updates the "skipped" message terminology to use "unnecessary" instead. Here's an example before/after.

    Before:

    Completed [   0.551s] 18 checks; 17 passed, 1 failed, 0 skipped
    

    After:

    Completed [   0.551s] 18 checks; 17 passed, 1 failed, 0 unnecessary
    
    C-enhancement 
    opened by obi1kenobi 7
  • Convert tests to pairs of Rust projects with their own manifests

    Convert tests to pairs of Rust projects with their own manifests

    Currently, test data is generated from a single project which has a (complicated) way to trigger semver violations by enabling or disabling its features.

    In addition to being complicated and non-obvious, this also prevents us from semver-checking manifest information (#48) since there's currently only a single manifest.

    It would be an improvement to switch to a test structure where each query is associated with a pair of Rust projects, complete with Cargo.toml files and their own source files:

    /semver_tests/<query_name>/old/
    /semver_tests/<query_name>/new/
    

    Each of these two projects should have a crate name matching the query name, and the same version (e.g. 1.0.0).

    To form a test case, one could create the "old" project, then cp -R old new and delete / alter code as necessary to cause the desired changes for the test. In this way, the new project is pretending to be the "next version" of the old project.

    Running the tests would involve generating all the rustdoc JSON files as normal, and then asserting that cargo-semver-checks finds only the expected semver issues, with no false positives, in each pair of projects.

    A crate like insta might be helpful here as well, since this is essentially a collection of snapshot tests.

    C-enhancement E-help-wanted E-mentor 
    opened by obi1kenobi 7
  • Windows: failed when running cargo-doc; no such subcommand: `+nightly`

    Windows: failed when running cargo-doc; no such subcommand: `+nightly`

    Steps to reproduce the bug with the above code

    On Windows 10:

    git clone https://github.com/Bromeon/js-sandbox.git
    cd js-sandbox
    cargo semver-checks check-release -p js-sandbox
    

    Actual Behaviour

    cargo semver-checks check-release -p js-sandbox
        Updating index
         Parsing js-sandbox v0.2.0-rc.0 (current)
    Error: Failed when running cargo-doc on <path>\js-sandbox\Cargo.toml: error: no such subcommand: `+nightly`
    

    Expected Behaviour

    Getting output about semver compatibility, or at least a logic-related error.

    Additional Context

    I tried with both cargo-semver-checks versions 0.9.1 and 0.9.2, same results. I also tried alternative ways to invoke Cargo:

    rustup run nightly cargo semver-checks check-release
        Updating index
         Parsing js-sandbox v0.2.0-rc.0 (current)
    Error: Failed when running cargo-doc on <path>\js-sandbox\Cargo.toml: error: no such subcommand: `+nightly`
    
            Cargo does not handle `+toolchain` directives.
            Did you mean to invoke `cargo` through `rustup` instead?
    

    It works when I run it on WSL2 (Linux) from the same Windows machine.

    Debug Output

    Software version

    cargo-semver-checks 0.9.2

    Operating system

    Windows 6.2.9200

    Command-line

    C:\Users\<me>\.cargo\bin\cargo-semver-checks.exe semver-checks check-release -p js-sandbox --bugreport
    

    cargo nightly version

    > cargo +nightly -V
    cargo 1.65.0-nightly (6da726708 2022-08-23)
    

    Compile time information

    • Profile: release
    • Target triple: x86_64-pc-windows-msvc
    • Family: windows
    • OS: windows
    • Architecture: x86_64
    • Pointer width: 64
    • Endian: little
    • CPU features: fxsr,sse,sse2
    • Host: x86_64-pc-windows-msvc
    C-bug 
    opened by Bromeon 7
  • Prototype for simultaneous support of multiple rustdoc format versions.

    Prototype for simultaneous support of multiple rustdoc format versions.

    Prototype for supporting multiple rustdoc format versions in the same version of cargo-semver-checks (related to #126). Intended for discussion, and not planned to merge as-is.

    It supports rustdoc JSON format v18 and v21, and will happily deserialize either file format. However, the baseline and current JSON files must have the same version -- no mixing and matching is allowed. This constraint is not a problem for the GitHub Action or the common ways of using cargo-semver-checks from the terminal.

    I'm strongly considering splitting out the version-specific rustdoc_vX directories (containing the Trustfall adapters for each format version) into their own crate, which for ease of use could have major version X compatible with rustdoc JSON format version X. Another crate could perhaps include the "choose whichever version makes sense" functionality and provide a Box<dyn Adapter> for Trustfall querying. This would probably be useful outside of cargo-semver-checks since this is not the only use case for querying rustdoc JSON.

    opened by obi1kenobi 6
  • Ensure the lint files are part of the binary file itself.

    Ensure the lint files are part of the binary file itself.

    As part of the add_lints!() macro, we had accidentally made the lints no longer be part of the cargo-semver-checks binary itself. This means that everything worked fine as long as it was run from the cargo-semver-checks repo itself, and failed spectacularly as soon as that was not the case (e.g. after cargo install cargo-semver-checks).

    This PR re-adds the lints into the binary using include_str!().

    A-cli C-bug 
    opened by obi1kenobi 5
  • Wrong path to generated rustdoc when giving a manifest path

    Wrong path to generated rustdoc when giving a manifest path

    Steps to reproduce the bug with the above code

    Run cargo run semver-checks check-release --manifest-path="../rust-libp2p/Cargo.toml" on rust-libp2p from github

    Actual Behaviour

    Error: Could not find expected rustdoc output for `libp2p`: ../rust-libp2p/target/semver-checks/registry-libp2p-0_49_0/target/semver-checks/target/doc/rustdoc.json
    

    Expected Behaviour

    It should search for libp2p.json instead of rustdoc.json

    Generated System Information

    Software version

    cargo-semver-checks 0.12.1

    Operating system

    Linux 6.0.6-arch1-1

    Command-line

    /home/tonowak/.cargo/bin/cargo-semver-checks semver-checks --bugreport
    

    cargo nightly version

    > cargo +nightly -V
    cargo 1.67.0-nightly (9286a1beb 2022-11-04)
    

    Compile time information

    • Profile: release
    • Target triple: x86_64-unknown-linux-gnu
    • Family: unix
    • OS: linux
    • Architecture: x86_64
    • Pointer width: 64
    • Endian: little
    • CPU features: fxsr,llvm14-builtins-abi,sse,sse2
    • Host: x86_64-unknown-linux-gnu

    Additional Context

    https://github.com/obi1kenobi/cargo-semver-check/commit/fb3b8651ce70dc23f944ccec3b34125325a48ec3#diff-287794009d29d730666bc52a753aa89762117c87581cf348cc9b38def528ffcbR105 This seems to be the issue.

    Fixing this will help with merging https://github.com/obi1kenobi/cargo-semver-check/pull/173

    C-bug 
    opened by tonowak 5
  • Make default baseline the previous stable version in the registry

    Make default baseline the previous stable version in the registry

    With just cargo semver-checks in package directory, it should take the current version and select the previous one. For pre-release versions, it should select the previous non-pre-release as breaking changes between prereleases is fine.

    A-cli C-enhancement 
    opened by epage 5
  • Strenghten back the derive_trait_impl_removed lint

    Strenghten back the derive_trait_impl_removed lint

    Describe your use case

    Due to changes in the rustdoc, the trait items defined in external crates are no longer present in the generated rustdoc.

    A temporary solution was made in the adapter https://github.com/obi1kenobi/trustfall-rustdoc-adapter/pull/24 which adds some hand-written items for the most common Rust built-in traits. This change fixes the tests, but now an user can use a trait that is not in the hand-written list of items and the derive_trait_impl_removed will not find the trait.

    Example baseline: an object that implements a trait that is defined in another crate and not from the hand-written list. Example current: the object without this trait. Expected behavior: the derive_trait_impl_removed lint finds this scenario. Current behavior: the derive_trait_impl_removed doesn't find this scenario.

    Describe the solution you'd like

    A long-term solution would be to implement in the adapter the support for rustdocs of foreign crates.

    Alternatives, if applicable

    No response

    Additional Context

    No response

    C-enhancement 
    opened by tonowak 0
  • Expose enum variant fields on interface Variant

    Expose enum variant fields on interface Variant

    I created this issue to track task assignments.

    Original description: - they are already available on type StructVariant - the edge on type PlainVariant should exist but never produce any vertices - the edge on type TupleVariant should produce fields similarly to how tuple structs produce their fields - new lints enabled by this: - tuple variant field removed - exhaustive tuple variant field added

    opened by staniewzki 0
  • New lint: `unsafe` trait becomes safe

    New lint: `unsafe` trait becomes safe

    This is the opposite direction of #231, and perhaps surprisingly this is also a breaking change since unsafe impl is not allowed for safe traits.

    Implementing an unsafe trait requires an unsafe impl block, but safe traits cannot be implemented with an unsafe impl block. https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#implementing-an-unsafe-trait

    Needs schema additions to expose whether the trait is unsafe: https://doc.rust-lang.org/nightly/nightly-rustc/rustdoc_json_types/struct.Trait.html https://github.com/obi1kenobi/trustfall-rustdoc-adapter/blob/0b1f021c22aab6e48f38156e52c7b8331447149a/src/rustdoc_schema.graphql#L382

    A-lint E-help-wanted E-mentor 
    opened by obi1kenobi 0
  • Improve error message when testing on not-yet-published crate

    Improve error message when testing on not-yet-published crate

    Right now, if a user runs cargo-semver-checks on a new package that hasn't been uploaded to crates.io, they'll get a fairly opaque error message saying the crate was "not found in registry."

    This is a common failure mode for first-time users of the tool, since most linters only depend on the current state of the repo instead of also depending on prior versions.

    We should consider adding hint/info text reminding the user that the default mode assumes there's a prior version on crates.io and suggesting other baseline options if that's not the case.

    A-cli C-enhancement 
    opened by obi1kenobi 0
  • Tests fail for unknown reasons

    Tests fail for unknown reasons

    Steps to reproduce the bug with the above code

    git clone [email protected]:obi1kenobi/cargo-semver-checks.git
    
    Cloning into 'cargo-semver-checks'...
    remote: Enumerating objects: 1886, done.
    remote: Counting objects: 100% (1886/1886), done.
    remote: Compressing objects: 100% (648/648), done.
    remote: Total 1886 (delta 1143), reused 1826 (delta 1122), pack-reused 0
    Receiving objects: 100% (1886/1886), 388.04 KiB | 671.00 KiB/s, done.
    Resolving deltas: 100% (1143/1143), done.
    
    cd cargo-semver-checks
    ./scripts/regenerate_test_rustdocs.sh
    
    Generating: auto_trait_impl_removed/new
    ~/zpp/cargo-semver-checks/test_crates/auto_trait_impl_removed/new ~/zpp/cargo-semver-checks
     Documenting auto_trait_impl_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/auto_trait_impl_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: auto_trait_impl_removed/old
    ~/zpp/cargo-semver-checks/test_crates/auto_trait_impl_removed/old ~/zpp/cargo-semver-checks
     Documenting auto_trait_impl_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/auto_trait_impl_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: constructible_struct_adds_field/new
    ~/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_field/new ~/zpp/cargo-semver-checks
     Documenting constructible_struct_adds_field v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_field/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: constructible_struct_adds_field/old
    ~/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_field/old ~/zpp/cargo-semver-checks
     Documenting constructible_struct_adds_field v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_field/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.20s
    ~/zpp/cargo-semver-checks
    Generating: constructible_struct_adds_private_field/new
    ~/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_private_field/new ~/zpp/cargo-semver-checks
     Documenting constructible_struct_adds_private_field v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_private_field/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: constructible_struct_adds_private_field/old
    ~/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_private_field/old ~/zpp/cargo-semver-checks
     Documenting constructible_struct_adds_private_field v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/constructible_struct_adds_private_field/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: derive_trait_impl_removed/new
    ~/zpp/cargo-semver-checks/test_crates/derive_trait_impl_removed/new ~/zpp/cargo-semver-checks
     Documenting derive_trait_impl_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/derive_trait_impl_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.20s
    ~/zpp/cargo-semver-checks
    Generating: derive_trait_impl_removed/old
    ~/zpp/cargo-semver-checks/test_crates/derive_trait_impl_removed/old ~/zpp/cargo-semver-checks
     Documenting derive_trait_impl_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/derive_trait_impl_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_missing/new
    ~/zpp/cargo-semver-checks/test_crates/enum_missing/new ~/zpp/cargo-semver-checks
     Documenting enum_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_missing/old
    ~/zpp/cargo-semver-checks/test_crates/enum_missing/old ~/zpp/cargo-semver-checks
     Documenting enum_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_repr_c_removed/new
    ~/zpp/cargo-semver-checks/test_crates/enum_repr_c_removed/new ~/zpp/cargo-semver-checks
     Documenting enum_repr_c_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_repr_c_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_repr_c_removed/old
    ~/zpp/cargo-semver-checks/test_crates/enum_repr_c_removed/old ~/zpp/cargo-semver-checks
     Documenting enum_repr_c_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_repr_c_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_repr_int_changed/new
    ~/zpp/cargo-semver-checks/test_crates/enum_repr_int_changed/new ~/zpp/cargo-semver-checks
     Documenting enum_repr_int_changed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_repr_int_changed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_repr_int_changed/old
    ~/zpp/cargo-semver-checks/test_crates/enum_repr_int_changed/old ~/zpp/cargo-semver-checks
     Documenting enum_repr_int_changed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_repr_int_changed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_repr_int_removed/new
    ~/zpp/cargo-semver-checks/test_crates/enum_repr_int_removed/new ~/zpp/cargo-semver-checks
     Documenting enum_repr_int_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_repr_int_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_repr_int_removed/old
    ~/zpp/cargo-semver-checks/test_crates/enum_repr_int_removed/old ~/zpp/cargo-semver-checks
     Documenting enum_repr_int_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_repr_int_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_struct_variant_field_added/new
    ~/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_added/new ~/zpp/cargo-semver-checks
     Documenting enum_struct_variant_field_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_added/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_struct_variant_field_added/old
    ~/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_added/old ~/zpp/cargo-semver-checks
     Documenting enum_struct_variant_field_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_added/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_struct_variant_field_missing/new
    ~/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_missing/new ~/zpp/cargo-semver-checks
     Documenting enum_struct_variant_field_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.20s
    ~/zpp/cargo-semver-checks
    Generating: enum_struct_variant_field_missing/old
    ~/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_missing/old ~/zpp/cargo-semver-checks
     Documenting enum_struct_variant_field_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_struct_variant_field_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_variant_added/new
    ~/zpp/cargo-semver-checks/test_crates/enum_variant_added/new ~/zpp/cargo-semver-checks
     Documenting enum_variant_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_variant_added/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_variant_added/old
    ~/zpp/cargo-semver-checks/test_crates/enum_variant_added/old ~/zpp/cargo-semver-checks
     Documenting enum_variant_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_variant_added/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_variant_missing/new
    ~/zpp/cargo-semver-checks/test_crates/enum_variant_missing/new ~/zpp/cargo-semver-checks
     Documenting enum_variant_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_variant_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: enum_variant_missing/old
    ~/zpp/cargo-semver-checks/test_crates/enum_variant_missing/old ~/zpp/cargo-semver-checks
     Documenting enum_variant_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/enum_variant_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: function_const_removed/new
    ~/zpp/cargo-semver-checks/test_crates/function_const_removed/new ~/zpp/cargo-semver-checks
     Documenting function_const_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/function_const_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: function_const_removed/old
    ~/zpp/cargo-semver-checks/test_crates/function_const_removed/old ~/zpp/cargo-semver-checks
     Documenting function_const_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/function_const_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: function_missing/new
    ~/zpp/cargo-semver-checks/test_crates/function_missing/new ~/zpp/cargo-semver-checks
     Documenting function_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/function_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: function_missing/old
    ~/zpp/cargo-semver-checks/test_crates/function_missing/old ~/zpp/cargo-semver-checks
     Documenting function_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/function_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: function_unsafe_added/new
    ~/zpp/cargo-semver-checks/test_crates/function_unsafe_added/new ~/zpp/cargo-semver-checks
     Documenting function_unsafe_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/function_unsafe_added/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: function_unsafe_added/old
    ~/zpp/cargo-semver-checks/test_crates/function_unsafe_added/old ~/zpp/cargo-semver-checks
     Documenting function_unsafe_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/function_unsafe_added/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: inherent_method_const_removed/new
    ~/zpp/cargo-semver-checks/test_crates/inherent_method_const_removed/new ~/zpp/cargo-semver-checks
     Documenting inherent_method_const_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/inherent_method_const_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: inherent_method_const_removed/old
    ~/zpp/cargo-semver-checks/test_crates/inherent_method_const_removed/old ~/zpp/cargo-semver-checks
     Documenting inherent_method_const_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/inherent_method_const_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: inherent_method_missing/new
    ~/zpp/cargo-semver-checks/test_crates/inherent_method_missing/new ~/zpp/cargo-semver-checks
     Documenting inherent_method_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/inherent_method_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: inherent_method_missing/old
    ~/zpp/cargo-semver-checks/test_crates/inherent_method_missing/old ~/zpp/cargo-semver-checks
     Documenting inherent_method_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/inherent_method_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: inherent_method_unsafe_added/new
    ~/zpp/cargo-semver-checks/test_crates/inherent_method_unsafe_added/new ~/zpp/cargo-semver-checks
     Documenting inherent_method_unsafe_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/inherent_method_unsafe_added/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: inherent_method_unsafe_added/old
    ~/zpp/cargo-semver-checks/test_crates/inherent_method_unsafe_added/old ~/zpp/cargo-semver-checks
     Documenting inherent_method_unsafe_added v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/inherent_method_unsafe_added/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: item_relocation/new
    ~/zpp/cargo-semver-checks/test_crates/item_relocation/new ~/zpp/cargo-semver-checks
     Documenting item_relocation v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/item_relocation/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: item_relocation/old
    ~/zpp/cargo-semver-checks/test_crates/item_relocation/old ~/zpp/cargo-semver-checks
     Documenting item_relocation v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/item_relocation/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: non_exhaustive/new
    ~/zpp/cargo-semver-checks/test_crates/non_exhaustive/new ~/zpp/cargo-semver-checks
     Documenting non_exhaustive v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/non_exhaustive/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: non_exhaustive/old
    ~/zpp/cargo-semver-checks/test_crates/non_exhaustive/old ~/zpp/cargo-semver-checks
     Documenting non_exhaustive v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/non_exhaustive/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: parameter_count_changed/new
    ~/zpp/cargo-semver-checks/test_crates/parameter_count_changed/new ~/zpp/cargo-semver-checks
     Documenting parameter_count_changed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/parameter_count_changed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: parameter_count_changed/old
    ~/zpp/cargo-semver-checks/test_crates/parameter_count_changed/old ~/zpp/cargo-semver-checks
     Documenting parameter_count_changed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/parameter_count_changed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: pub_use_handling/new
    ~/zpp/cargo-semver-checks/test_crates/pub_use_handling/new ~/zpp/cargo-semver-checks
     Documenting pub_use_handling v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/pub_use_handling/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: pub_use_handling/old
    ~/zpp/cargo-semver-checks/test_crates/pub_use_handling/old ~/zpp/cargo-semver-checks
     Documenting pub_use_handling v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/pub_use_handling/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: sized_impl_removed/new
    ~/zpp/cargo-semver-checks/test_crates/sized_impl_removed/new ~/zpp/cargo-semver-checks
     Documenting sized_impl_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/sized_impl_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: sized_impl_removed/old
    ~/zpp/cargo-semver-checks/test_crates/sized_impl_removed/old ~/zpp/cargo-semver-checks
     Documenting sized_impl_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/sized_impl_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: struct_missing/new
    ~/zpp/cargo-semver-checks/test_crates/struct_missing/new ~/zpp/cargo-semver-checks
     Documenting struct_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: struct_missing/old
    ~/zpp/cargo-semver-checks/test_crates/struct_missing/old ~/zpp/cargo-semver-checks
     Documenting struct_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.20s
    ~/zpp/cargo-semver-checks
    Generating: struct_pub_field_missing/new
    ~/zpp/cargo-semver-checks/test_crates/struct_pub_field_missing/new ~/zpp/cargo-semver-checks
     Documenting struct_pub_field_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_pub_field_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: struct_pub_field_missing/old
    ~/zpp/cargo-semver-checks/test_crates/struct_pub_field_missing/old ~/zpp/cargo-semver-checks
     Documenting struct_pub_field_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_pub_field_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: struct_repr_c_removed/new
    ~/zpp/cargo-semver-checks/test_crates/struct_repr_c_removed/new ~/zpp/cargo-semver-checks
     Documenting struct_repr_c_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_repr_c_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: struct_repr_c_removed/old
    ~/zpp/cargo-semver-checks/test_crates/struct_repr_c_removed/old ~/zpp/cargo-semver-checks
     Documenting struct_repr_c_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_repr_c_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: struct_repr_transparent_removed/new
    ~/zpp/cargo-semver-checks/test_crates/struct_repr_transparent_removed/new ~/zpp/cargo-semver-checks
     Documenting struct_repr_transparent_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_repr_transparent_removed/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: struct_repr_transparent_removed/old
    ~/zpp/cargo-semver-checks/test_crates/struct_repr_transparent_removed/old ~/zpp/cargo-semver-checks
     Documenting struct_repr_transparent_removed v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/struct_repr_transparent_removed/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: template/new
    ~/zpp/cargo-semver-checks/test_crates/template/new ~/zpp/cargo-semver-checks
     Documenting template v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/template/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: template/old
    ~/zpp/cargo-semver-checks/test_crates/template/old ~/zpp/cargo-semver-checks
     Documenting template v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/template/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: trait_missing/new
    ~/zpp/cargo-semver-checks/test_crates/trait_missing/new ~/zpp/cargo-semver-checks
     Documenting trait_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/trait_missing/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: trait_missing/old
    ~/zpp/cargo-semver-checks/test_crates/trait_missing/old ~/zpp/cargo-semver-checks
     Documenting trait_missing v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/trait_missing/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: unit_struct_changed_kind/new
    ~/zpp/cargo-semver-checks/test_crates/unit_struct_changed_kind/new ~/zpp/cargo-semver-checks
     Documenting unit_struct_changed_kind v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/unit_struct_changed_kind/new)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    Generating: unit_struct_changed_kind/old
    ~/zpp/cargo-semver-checks/test_crates/unit_struct_changed_kind/old ~/zpp/cargo-semver-checks
     Documenting unit_struct_changed_kind v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_crates/unit_struct_changed_kind/old)
        Finished dev [unoptimized + debuginfo] target(s) in 0.19s
    ~/zpp/cargo-semver-checks
    
    cargo test
    
       Compiling proc-macro2 v1.0.48
       Compiling unicode-ident v1.0.6
       Compiling quote v1.0.22
       Compiling syn v1.0.106
       Compiling autocfg v1.1.0
       Compiling serde_derive v1.0.151
       Compiling serde v1.0.151
       Compiling libc v0.2.138
       Compiling cfg-if v1.0.0
       Compiling memchr v2.5.0
       Compiling thiserror v1.0.38
       Compiling once_cell v1.16.0
       Compiling log v0.4.17
       Compiling bitflags v1.3.2
       Compiling serde_json v1.0.90
       Compiling version_check v0.9.4
       Compiling ryu v1.0.12
       Compiling itoa v1.0.5
       Compiling jobserver v0.1.25
       Compiling aho-corasick v0.7.20
       Compiling ucd-trie v0.1.5
       Compiling regex-syntax v0.6.28
       Compiling cc v1.0.78
       Compiling pkg-config v0.3.26
       Compiling bstr v0.2.17
       Compiling indexmap v1.9.2
       Compiling num-traits v0.2.15
       Compiling camino v1.1.1
       Compiling fnv v1.0.7
       Compiling num-integer v0.1.45
       Compiling hashbrown v0.12.3
       Compiling either v1.8.0
       Compiling same-file v1.0.6
       Compiling crossbeam-utils v0.8.14
       Compiling walkdir v2.3.2
       Compiling regex v1.7.0
       Compiling base64 v0.13.1
       Compiling openssl-src v111.24.0+1.1.1s
       Compiling time v0.1.45
       Compiling proc-macro-error-attr v1.0.4
       Compiling memoffset v0.7.1
       Compiling io-lifetimes v1.0.3
       Compiling iana-time-zone v0.1.53
       Compiling lazy_static v1.4.0
       Compiling openssl-sys v0.9.79
       Compiling libz-sys v1.1.8
       Compiling itertools v0.10.5
       Compiling globset v0.4.9
       Compiling proc-macro-error v1.0.4
       Compiling crossbeam-epoch v0.9.13
       Compiling tinyvec_macros v0.1.0
       Compiling maplit v1.0.2
       Compiling rustix v0.36.5
       Compiling tinyvec v1.6.0
       Compiling linux-raw-sys v0.1.4
       Compiling semver v1.0.15
       Compiling proc-macro-hack v0.5.19
       Compiling termcolor v1.1.3
       Compiling scopeguard v1.1.0
       Compiling unicode-normalization v0.1.22
       Compiling libgit2-sys v0.14.0+1.5.0
       Compiling sys-info v0.9.1
       Compiling rayon-core v1.10.1
       Compiling thiserror-impl v1.0.38
       Compiling unicode-bidi v0.3.8
       Compiling heck v0.4.0
       Compiling percent-encoding v2.2.0
       Compiling trustfall_filetests_macros v0.2.0
       Compiling os_str_bytes v6.4.1
       Compiling clap_derive v4.0.21
       Compiling idna v0.3.0
       Compiling clap_lex v0.3.0
       Compiling form_urlencoded v1.1.0
       Compiling is-terminal v0.4.1
       Compiling crossbeam-deque v0.8.2
       Compiling crossbeam-channel v0.5.6
       Compiling backtrace v0.3.67
       Compiling num_cpus v1.14.0
       Compiling smartstring v1.0.1
       Compiling gimli v0.27.0
       Compiling anyhow v1.0.67
       Compiling adler v1.0.2
       Compiling doc-comment v0.3.3
       Compiling strsim v0.10.0
       Compiling pest v2.5.1
       Compiling miniz_oxide v0.6.2
       Compiling git-version-macro v0.3.5
       Compiling url v2.3.1
       Compiling pest_meta v2.5.1
       Compiling clap v4.0.29
       Compiling addr2line v0.19.0
       Compiling pest_generator v2.5.1
       Compiling getrandom v0.2.8
       Compiling object v0.30.0
       Compiling rustc-demangle v0.1.21
       Compiling openssl-probe v0.1.5
       Compiling bugreport v0.5.0
       Compiling static_assertions v1.1.0
       Compiling uuid v0.8.2
       Compiling git-version v0.3.5
       Compiling rayon v1.6.1
       Compiling os_type v2.6.0
       Compiling pest_derive v2.5.1
       Compiling thread_local v1.1.4
       Compiling termcolor_output_impl v1.0.0
       Compiling rustc-hash v1.1.0
       Compiling home v0.5.4
       Compiling shell-escape v0.1.5
       Compiling termcolor_output v1.0.1
       Compiling ignore v0.4.18
       Compiling clap-verbosity-flag v2.0.0
       Compiling atty v0.2.14
       Compiling bytes v1.3.0
       Compiling chrono v0.4.23
       Compiling ron v0.6.6
       Compiling smallvec v1.10.0
       Compiling toml v0.5.10
       Compiling async-graphql-value v2.11.3
       Compiling rustdoc-types v0.17.0
       Compiling async-graphql-parser v2.11.3
       Compiling cargo-platform v0.1.2
       Compiling rustdoc-types v0.19.0
       Compiling rustdoc-types v0.12.0
       Compiling rustdoc-types v0.18.0
       Compiling cargo_metadata v0.15.2
       Compiling trustfall_core v0.1.1
       Compiling hex v0.4.3
       Compiling clap-cargo v0.10.0
       Compiling human-panic v1.0.3
       Compiling cargo_toml v0.13.0
       Compiling handlebars v4.3.5
       Compiling ron v0.7.1
       Compiling trustfall-rustdoc-adapter v22.3.0
       Compiling trustfall-rustdoc-adapter v16.3.0
       Compiling trustfall-rustdoc-adapter v21.3.0
       Compiling trustfall-rustdoc-adapter v23.0.0
       Compiling trustfall_rustdoc v0.6.0
       Compiling git2 v0.15.0
       Compiling crates-index v0.18.11
       Compiling cargo-semver-checks v0.14.0 (/home/tonowak/zpp/cargo-semver-checks)
        Finished test [unoptimized + debuginfo] target(s) in 1m 02s
         Running unittests src/main.rs (target/debug/deps/cargo_semver_checks-2edac408f968bea3)
    
    running 50 tests
    test check_release::test::classify_major_changed ... ok
    test check_release::test::classify_double_zerover_major_changed ... ok
    test check_release::test::classify_ignores_build ... ok
    test check_release::test::classify_minor_changed ... ok
    test check_release::test::classify_minor_changed_with_pre ... ok
    test check_release::test::classify_no_version ... ok
    test check_release::test::classify_patch_changed ... ok
    test check_release::test::classify_pre ... ok
    test check_release::test::classify_pre_same ... ok
    test check_release::test::classify_same_version ... ok
    test check_release::test::classify_same_version_with_pre ... ok
    test check_release::test::classify_zerover_major_changed ... ok
    test check_release::test::classify_zerover_minor_changed ... ok
    test query::tests::pub_use_handling ... ok
    test query::tests::all_queries_parse_correctly ... ok
        Blocking waiting for file lock on package cache
        Blocking waiting for file lock on package cache
     Documenting renamed_bin v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_rustdoc/renamed_bin)
     Documenting implicit_lib v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_rustdoc/implicit_lib)
     Documenting implicit_bin v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_rustdoc/implicit_bin)
     Documenting renamed_lib v0.1.0 (/home/tonowak/zpp/cargo-semver-checks/test_rustdoc/renamed_lib)
        Finished dev [unoptimized + debuginfo] target(s) in 0.70s
    test dump::tests::rustdoc_for_bin_crate_with_bin_section ... ok
        Finished dev [unoptimized + debuginfo] target(s) in 0.75s
    test dump::tests::rustdoc_for_bin_crate_without_bin_section ... ok
        Finished dev [unoptimized + debuginfo] target(s) in 0.78s
    test dump::tests::rustdoc_for_lib_crate_with_lib_section ... ok
        Finished dev [unoptimized + debuginfo] target(s) in 0.86s
    test dump::tests::rustdoc_for_lib_crate_without_lib_section ... ok
    test query::tests_lints::auto_trait_impl_removed ... FAILED
    test query::tests_lints::derive_trait_impl_removed ... FAILED
    test query::tests_lints::constructible_struct_adds_private_field ... ok
    test query::tests_lints::constructible_struct_adds_field ... ok
    test query::tests_lints::enum_marked_non_exhaustive ... ok
    test query::tests_lints::enum_repr_c_removed ... ok
    test query::tests_lints::enum_missing ... ok
    test query::tests_lints::enum_repr_int_changed ... ok
    test query::tests_lints::enum_repr_int_removed ... ok
    test query::tests_lints::enum_struct_variant_field_added ... ok
    test query::tests_lints::enum_struct_variant_field_missing ... ok
    test query::tests_lints::function_const_removed ... ok
    test query::tests_lints::enum_variant_missing ... ok
    test query::tests_lints::function_missing ... ok
    test query::tests_lints::enum_variant_added ... ok
    test query::tests_lints::function_parameter_count_changed ... ok
    test query::tests_lints::function_unsafe_added ... ok
    test query::tests_lints::inherent_method_missing ... ok
    test query::tests_lints::inherent_method_const_removed ... ok
    test query::tests_lints::inherent_method_unsafe_added ... ok
    test query::tests_lints::struct_missing ... ok
    test query::tests_lints::method_parameter_count_changed ... ok
    test query::tests_lints::struct_marked_non_exhaustive ... ok
    test verify_cli ... ok
    test query::tests_lints::sized_impl_removed ... FAILED
    test query::tests_lints::struct_repr_c_removed ... ok
    test query::tests_lints::struct_repr_transparent_removed ... ok
    test query::tests_lints::struct_pub_field_missing ... ok
    test query::tests_lints::unit_struct_changed_kind ... ok
    test query::tests_lints::trait_missing ... ok
    test query::tests_lints::variant_marked_non_exhaustive ... ok
    
    failures:
    
    ---- query::tests_lints::auto_trait_impl_removed stdout ----
    thread 'query::tests_lints::auto_trait_impl_removed' panicked at '
    Query auto_trait_impl_removed produced incorrect output (./src/lints/auto_trait_impl_removed.ron).
    
    Expected output (./test_outputs/auto_trait_impl_removed.output.ron):
    {
        "./test_crates/auto_trait_impl_removed/": [
            {
                "auto_trait": String("Sync"),
                "auto_trait_path": List([
                    String("core"),
                    String("marker"),
                    String("Sync"),
                ]),
                "name": String("SyncStruct"),
                "path": List([
                    String("auto_trait_impl_removed"),
                    String("SyncStruct"),
                ]),
                "span_begin_line": Uint64(8),
                "span_filename": String("src/lib.rs"),
                "visibility_limit": String("public"),
            },
            {
                "auto_trait": String("Send"),
                "auto_trait_path": List([
                    String("core"),
                    String("marker"),
                    String("Send"),
                ]),
                "name": String("SendStruct"),
                "path": List([
                    String("auto_trait_impl_removed"),
                    String("SendStruct"),
                ]),
                "span_begin_line": Uint64(15),
                "span_filename": String("src/lib.rs"),
                "visibility_limit": String("public"),
            },
            {
                "auto_trait": String("UnwindSafe"),
                "auto_trait_path": List([
                    String("core"),
                    String("panic"),
                    String("unwind_safe"),
                    String("UnwindSafe"),
                ]),
                "name": String("UnwindSafeStruct"),
                "path": List([
                    String("auto_trait_impl_removed"),
                    String("UnwindSafeStruct"),
                ]),
                "span_begin_line": Uint64(21),
                "span_filename": String("src/lib.rs"),
                "visibility_limit": String("public"),
            },
            {
                "auto_trait": String("RefUnwindSafe"),
                "auto_trait_path": List([
                    String("core"),
                    String("panic"),
                    String("unwind_safe"),
                    String("RefUnwindSafe"),
                ]),
                "name": String("RefUnwindSafeStruct"),
                "path": List([
                    String("auto_trait_impl_removed"),
                    String("RefUnwindSafeStruct"),
                ]),
                "span_begin_line": Uint64(26),
                "span_filename": String("src/lib.rs"),
                "visibility_limit": String("public"),
            },
            {
                "auto_trait": String("Unpin"),
                "auto_trait_path": List([
                    String("core"),
                    String("marker"),
                    String("Unpin"),
                ]),
                "name": String("UnpinStruct"),
                "path": List([
                    String("auto_trait_impl_removed"),
                    String("UnpinStruct"),
                ]),
                "span_begin_line": Uint64(39),
                "span_filename": String("src/lib.rs"),
                "visibility_limit": String("public"),
            },
        ],
    }
    
    Actual output:
    {}
    
    Note that the individual outputs might have been deliberately reordered.
    
    Also, remember about running ./scripts/regenerate_test_rustdocs.sh when needed.
    ', src/query.rs:346:13
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    
    ---- query::tests_lints::derive_trait_impl_removed stdout ----
    thread 'query::tests_lints::derive_trait_impl_removed' panicked at '
    Query derive_trait_impl_removed produced incorrect output (./src/lints/derive_trait_impl_removed.ron).
    
    Expected output (./test_outputs/derive_trait_impl_removed.output.ron):
    {
        "./test_crates/derive_trait_impl_removed/": [
            {
                "name": String("DebugFoo"),
                "path": List([
                    String("derive_trait_impl_removed"),
                    String("DebugFoo"),
                ]),
                "span_begin_line": Uint64(2),
                "span_filename": String("src/lib.rs"),
                "trait_name": String("Debug"),
                "trait_path": List([
                    String("core"),
                    String("fmt"),
                    String("Debug"),
                ]),
                "visibility_limit": String("public"),
            },
            {
                "name": String("CopyBar"),
                "path": List([
                    String("derive_trait_impl_removed"),
                    String("CopyBar"),
                ]),
                "span_begin_line": Uint64(5),
                "span_filename": String("src/lib.rs"),
                "trait_name": String("Copy"),
                "trait_path": List([
                    String("core"),
                    String("marker"),
                    String("Copy"),
                ]),
                "visibility_limit": String("public"),
            },
            {
                "name": String("EqFoo"),
                "path": List([
                    String("derive_trait_impl_removed"),
                    String("EqFoo"),
                ]),
                "span_begin_line": Uint64(10),
                "span_filename": String("src/lib.rs"),
                "trait_name": String("Eq"),
                "trait_path": List([
                    String("core"),
                    String("cmp"),
                    String("Eq"),
                ]),
                "visibility_limit": String("public"),
            },
        ],
    }
    
    Actual output:
    {}
    
    Note that the individual outputs might have been deliberately reordered.
    
    Also, remember about running ./scripts/regenerate_test_rustdocs.sh when needed.
    ', src/query.rs:346:13
    
    ---- query::tests_lints::sized_impl_removed stdout ----
    thread 'query::tests_lints::sized_impl_removed' panicked at '
    Query sized_impl_removed produced incorrect output (./src/lints/sized_impl_removed.ron).
    
    Expected output (./test_outputs/sized_impl_removed.output.ron):
    {
        "./test_crates/sized_impl_removed/": [
            {
                "name": String("SizedStruct"),
                "path": List([
                    String("sized_impl_removed"),
                    String("SizedStruct"),
                ]),
                "span_begin_line": Uint64(1),
                "span_filename": String("src/lib.rs"),
                "visibility_limit": String("public"),
            },
        ],
    }
    
    Actual output:
    {}
    
    Note that the individual outputs might have been deliberately reordered.
    
    Also, remember about running ./scripts/regenerate_test_rustdocs.sh when needed.
    ', src/query.rs:346:13
    
    
    failures:
        query::tests_lints::auto_trait_impl_removed
        query::tests_lints::derive_trait_impl_removed
        query::tests_lints::sized_impl_removed
    
    test result: FAILED. 47 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 24.50s
    
    error: test failed, to rerun pass `--bin cargo-semver-checks`
    

    Actual Behaviour

    Three tests fail.

    Expected Behaviour

    Tests should work, there is no reason why they shouldn't work -- a freshly cloned repo with a beta rust version.

    Generated System Information

    cargo run -- semver-checks --bugreport
    

    Software version

    cargo-semver-checks 0.14.0 (1567ecc)

    Operating system

    Linux 6.0.12-arch1-1

    Command-line

    target/debug/cargo-semver-checks semver-checks --bugreport
    

    cargo version

    > cargo -V
    cargo 1.67.0-beta.2 (f6e737b1e 2022-12-02)
    

    Compile time information

    • Profile: debug
    • Target triple: x86_64-unknown-linux-gnu
    • Family: unix
    • OS: linux
    • Architecture: x86_64
    • Pointer width: 64
    • Endian: little
    • CPU features: fxsr,sse,sse2
    • Host: x86_64-unknown-linux-gnu
    
    ### Additional Context
    
    _No response_
    C-bug 
    opened by tonowak 1
Owner
Predrag Gruevski
Predrag Gruevski
Explain semver requirements by converting them into less than, greater than, and/or equal to form.

semver-explain Convert SemVer requirements to their most-obvious equivalents. semver-explain is a CLI tool to explain Semantic Versioning requirements

Andrew Lilley Brinker 27 Oct 29, 2022
scan markdown files and execute `console` blocks

exec-commands − scan markdown files and execute console blocks exec-commands is a utility to update command-line-tool examples embedded in markdown fi

Hajime Suzuki 3 Nov 27, 2022
Fast tool to scan for valid 7-long imgur ids for the ArchiveTeam imgur efforts (not affiliated or endorsed)

imgur_id7 Fast tool to scan for valid 7-long imgur ids for the ArchiveTeam imgur efforts (not affiliated or endorsed) Optionally uses supplied http pr

Robin Rolf 6 Jun 3, 2023
Socket Monitor: A prettier and simpler alternative to netstat or ss for socket monitoring with the ability to scan for malicious IP addresses.

?? Somo A prettier alternative to netstat or ss for socket monitoring. ⬇️ Installation: 1. Install cargo: From crates.io. 2. Install the somo crate: c

Theodor Peifer 13 Jun 6, 2023
Scan the symbols of all ELF binaries in all Arch Linux packages for usage of malloc_usable_size

Scan the symbols of all ELF binaries in all Arch Linux packages for usage of malloc_usable_size (-D_FORTIFY_SOURCE=3 compatibility)

null 3 Sep 9, 2023
Efficient scan conversion of a line segment with clipping to a rectangular window.

✂️ clipline ?? clipline is a Rust crate for efficient scan conversion of a line segment with clipping to a rectangular window. It is an implementation

Nurzhan Sakén 5 Oct 26, 2023
🐢 Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands

Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands. Additionally, it provides optional and fully encrypted synchronisation of your history between machines, via an Atuin server.

Ellie Huxtable 4.6k Jan 1, 2023
Save image from your clipboard 📋 as an image file directly from your command line! 🔥

Clpy ?? Save copied image from clipboard as an image file directly from your command line! Note It works only on windows as of now. I'll be adding sup

Piyush Suthar 13 Nov 28, 2022
FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config.

Connect quickly to your services ?? FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config. Instal

Julien 85 Dec 14, 2022
Deadliner helps you keep track of the time left for your deadline by dynamically updating the wallpaper of your desktop with the time left.

Deadliner Watch the YouTube video What's Deadliner? Deadliner is a cross-platform desktop application for setting deadline for a project and keeping t

Deadliner 34 Dec 16, 2022
By mirroring traffic to and from your machine, mirrord surrounds your local service with a mirror image of its cloud environment.

mirrord lets you easily mirror traffic from your Kubernetes cluster to your development environment. It comes as both Visual Studio Code extension and

MetalBear 2.1k Jan 3, 2023
A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team

yb (Yocto Buddy) yb is designed to make it easy to setup and (perhaps more importantly) keep Yocto environments up-to-date and in-sync with your team.

null 13 Oct 31, 2022
Print your git contributions in your terminal, blazingly fast

Takoyaki Blazingly fast git contribution graph in your terminal Features ✔️ Customizable ✔️ Plugins to support a bunch of cloud based git repositories

kyeboard 13 Feb 6, 2023
Convert your favorite images and wallpapers with your favorite color palettes/themes

dipc doprz' image palette converter Convert your favorite images and wallpapers with your favorite color palettes/themes Color Palettes/Themes catppuc

null 50 Apr 26, 2023
Get your loadshedding schedule in your calendar and never be left in the dark! Open-source, up-to-date, and developer friendly.

Loadshedding schedules in your digital calendar. No apps, no ads, up-to-date, and developer friendly. Get it • Key Features • Using the data • Project

Boyd Kane 117 Apr 26, 2023
Reddit - Liberate your Reddit Chats. This tool will export your reddit chats into a plethora of formats

Rexit Rexit - Liberate your Reddit Chats. This tool will export your Reddit chats into a plethora of formats Tool to export Reddit chats into a variet

Maximilian Pult 6 May 3, 2023
Quickly setup your development environment on your Chromebook/ChromeOS or any Linux distribution 🐧 ❄️ 💻 🚀 ✨

Crosup ?? ?? ?? ✨ Crosup is a CLI tool to help you quickly setup your development environment on a new Chromebook (ChromeOS) or any Linux distribution

Tsiry Sandratraina 11 Jun 15, 2023
Get your github contributions right in your terminal, blazingly fast!

GitColorScripts Get your github contributions right in your terminal! Installation Install via yay yay -S gitcolorscripts Install manually Download t

VoidCupboard 56 Jul 12, 2023
A filesystem driver that allows you to view your Blackboard course contents as if they were normal files and folders on your system!

BlackboardFS Blackboard: noun A website so bad that it might as well be a network drive. BlackboardFS is a filesystem driver that allows you to view y

null 22 Sep 4, 2023