Skip to content

Releases: obi1kenobi/cargo-semver-checks

v0.30.0

16 Mar 17:14
84d344b
Compare
Choose a tag to compare

What's Changed

In this release: 7 new lints + assorted UX improvements. This release requires Rust 1.74+ both to install (MSRV) and at runtime.

New lints:

Miscellaneous:

  • Improved output of reproduction command when failing to generate rustdoc JSON, by @obi1kenobi (#676)
  • Improved new-contributor workflow for better compatibility across platforms, by @jw013 (#681, #682, #683)
  • Better description and tests for inherent_method_must_use_added lint, by @pksunkara (#677)
  • Faster compilation times by deduplicating major dependency versions and major dependency version bumps where possible (many PRs, see below)

All Merged PRs

New Contributors

Full Changelog: v0.29.1...v0.30.0

v0.29.1

23 Feb 18:53
3611fd0
Compare
Choose a tag to compare

Just a small maintenance release, to avoid a yanked dependency version that was in our lockfiles. Enjoy!

All Merged PRs

Full Changelog: v0.29.0...v0.29.1

v0.29.0

18 Feb 15:09
d9265c5
Compare
Choose a tag to compare

What's Changed

In this release: 5 new lints, one fixed false-positive, and assorted UX improvements.

This is the last release to support Rust 1.71-1.73. Future releases will require Rust 1.74+ both to install (MSRV) and at runtime.

Hat-tip to everyone that came to check out my talk on cargo-semver-checks at FOSDEM 2024! We even got a chance to pair-program a few lints in the hallway after my talk: #649 with @rubdos, and #650 with @ehiggs.

Unfortunately, the FOSDEM recording had an AV glitch and lost ~10min of audio and video. But all is not lost!

New lints:

False positives fixed:

Miscellaneous:

All Merged PRs

  • Weekly cargo update of dependencies by @obi1kenobi in #646
  • Only run test with_env_var and with_flag on x86_64 by @Xeonacid in #647
  • Weekly cargo update of dependencies by @obi1kenobi in #651
  • test(with_env_var, with_flag): Add riscv64; Restrict os to Linux by @Xeonacid in #648
  • Explicitly test on Rust 1.75 now that 1.76 comes out today. by @obi1kenobi in #652
  • Weekly cargo update of dependencies by @obi1kenobi in #653
  • feat: Trailing comma error message by @devanbenz in #655
  • Improve diagnostic messages when surfacing errors from cargo. by @obi1kenobi in #656
  • Improve error message readability by adding an extra newline. by @obi1kenobi in #658
  • Weekly cargo update of dependencies by @obi1kenobi in #657
  • Support checking rlib, dylib, and staticlib library types. by @obi1kenobi in #662
  • feat: New lint trait_no_longer_object_safe by @devanbenz in #659
  • Remove ability to check bin-only targets, to fix doc = false issue. by @obi1kenobi in #663
  • Add test case for lib targets with a doc = false setting. by @obi1kenobi in #664
  • Add lint for pub field becoming doc(hidden) by @rubdos in #649
  • Fix false-positive in lint trait_method_unsafe_removed by @yottalogical in #614
  • Add lints for repr(packed) being added or removed. by @jw013 in #666
  • Minor QOL update to speed up reruns of regenerate_test_rustdocs script by @jw013 in #667
  • Improves linting for issue 503 by adding lint to check ABI has not changed between functions with same export_name by @ehiggs in #650
  • Weekly cargo update of dependencies by @obi1kenobi in #668
  • Release v0.29.0 by @obi1kenobi in #669

New Contributors

Full Changelog: v0.28.0...v0.29.0

v0.28.0

26 Jan 19:00
6c30d58
Compare
Choose a tag to compare
banner

What's Changed

New lints, new functionality, UX improvements, and an awesome new logo courtesy of NUMI!

Performance
Now running lints in parallel using rayon (#625), for a ~3-4x speedup in lint execution time (i.e. not counting rustdoc generation and parsing time, which still dominate).

  • In my measurements, the wall-clock time gains here are on the order of 12s (16s -> 4s) on the biggest crate I know of (aws-sdk-ec2, 240k+ items), and ~1s on most crates of more reasonable size.
  • Also added a better breakdown of where time is actually spent, between generating rustdoc, parsing the JSON, and running lints: #630
  • The parallelization and the time breakdown improvements were both contributed by @jw013 🎉

New lints

New functionality
Support for custom build.target cargo configurations, contributed by @Nemo157: #619

It also supports setting an explicit cargo build target via our new --build-target CLI flag.

Bugfixes
Bugfix for an unusual situation where having RUSTFLAGS="-Dwarnings" would prevent rustdoc JSON from being built in case a dependency of the crate we're checking had warnings.

This would sometimes happen with the actions-rust-lang/setup-rust-toolchain GitHub Action, which sets RUSTFLAGS="-Dwarnings" by default.

All Merged PRs

  • Add table of contents to FAQ and add a few more questions and answers. by @obi1kenobi in #618
  • Add Rust 1.74 to the test matrix. by @obi1kenobi in #623
  • Add test crate to test async fn and impl Future by @jw013 in #622
  • update repr-related reference links by @fprasx in #626
  • implement enum_repr_transparent_removed lint by @fprasx in #627
  • Add timing output for rustdoc and crate total by @jw013 in #630
  • Parallel lints by @jw013 in #625
  • cargo update to enable querying Union types' information. by @obi1kenobi in #631
  • Weekly cargo update of dependencies by @obi1kenobi in #636
  • New Logo by @agreea in #628
  • Add separate issue templates for false-positive and false-negatives. by @obi1kenobi in #639
  • Mention our lint wishlist issue in the false-negative issue template. by @obi1kenobi in #640
  • Update schema link in CONTRIBUTING.md by @obi1kenobi in #641
  • Weekly cargo update of dependencies by @obi1kenobi in #642
  • Detect when build.target is configured, and allow overriding it from the command line by @Nemo157 in #619
  • Fix occasional failure to generate rustdoc when RUSTFLAGS="-Dwarnings". by @obi1kenobi in #643
  • Manually update dependencies before publishing new release. by @obi1kenobi in #644
  • Release v0.28.0. by @obi1kenobi in #645

New Contributors

Full Changelog: v0.27.0...v0.28.0

v0.27.0

28 Dec 17:12
94a491f
Compare
Choose a tag to compare

What's Changed

New lints:

Also added support for rustdoc's new v28 JSON format.

This brings us to 57 lints to end 2023, up from 30 at the end of last year 🎉 Writing lints is one of the easiest ways to contribute to cargo-semver-checks — there are hundreds of lints yet to be added — so check out issues labeled E-mentor A-lint and give it a shot!

All Merged PRs

New Contributors

Full Changelog: v0.26.0...v0.27.0

v0.26.0

08 Dec 17:02
0d1e24f
Compare
Choose a tag to compare

What's Changed

Four new lints related to items being removed from the public API by making them #[doc(hidden)]. All contributed by @u9g:

  • struct_now_doc_hidden
  • enum_now_doc_hidden
  • function_now_doc_hidden
  • trait_now_doc_hidden

All these are semver-major changes, as described in this post: https://predr.ag/blog/checking-semver-for-doc-hidden-items/

Plus, an update to our library API to allow suppressing cargo-semver-checks logging output, to make it more pleasant for other tools to plug in cargo-semver-checks functionality as a library. Contributed by @markhaehnel.

Semver-checking with this release requires Rust 1.71+.

All Merged PRs

New Contributors

Full Changelog: v0.25.0...v0.26.0

v0.25.0

17 Nov 21:51
0279dd1
Compare
Choose a tag to compare

What's Changed

Resolved nearly all false-positive lints that were caused by improper doc(hidden) handling — nearly 60% of all false-positives observed in the real world!

Proper doc(hidden) handling requires Rust 1.73+, due to a rustdoc bug in prior versions that causes re-exported hidden items to be inappropriately omitted from rustdoc JSON files. Therefore:

  • we drop support for Rust 1.70, and
  • we advise against using Rust 1.71-1.72 even though cargo-semver-checks will still run with them, since they happen to share a rustdoc JSON format with Rust 1.73.

All Merged PRs

  • Remove erroneous curly brace from module_missing error format string. by @obi1kenobi in #574
  • Weekly cargo update of dependencies by @obi1kenobi in #575
  • Improve error message for inherent_method_const_removed lint. by @obi1kenobi in #577
  • Do not consider #[doc(hidden)] items part of the public API. by @obi1kenobi in #576
  • Weekly cargo update of dependencies by @obi1kenobi in #580
  • Add counterexample test case for ignoring doc(hidden) items. by @obi1kenobi in #581
  • Update Trustfall, trustfall_rustdoc, and gix/tame-index dependencies. by @obi1kenobi in #582
  • Release v0.25, featuring correct #[doc(hidden)] handling. by @obi1kenobi in #583

Full Changelog: v0.24.2...v0.25.0

v0.24.2

29 Oct 17:41
62dfe78
Compare
Choose a tag to compare

What's Changed

Treat quoted empty-strings as empty-string in CLI feature selection code, contributed by @HadrienG2 in #569.

All Merged PRs

  • Treat quoted empty string as an empty string by @HadrienG2 in #569
  • Update dependencies before publishing new release. by @obi1kenobi in #571
  • Release v0.24.2 with CLI tweak to ignore empty-string features. by @obi1kenobi in #572

Full Changelog: v0.24.1...v0.24.2

v0.24.1

23 Oct 04:26
4bce03d
Compare
Choose a tag to compare

What's Changed

A couple of minor tweaks:

  • If configured to use a git cargo index, and the index directory doesn't exist — create it and continue.
  • Treat --features="" as a no-op feature. Same for --current-features and --baseline-features.

Thanks to @Jake-Shadle for quickly pushing an update to tame-index to fix the git index issue, and to @HadrienG2 for contributing the --features="" change.

All Merged PRs

New Contributors

Full Changelog: v0.24.0...v0.24.1

v0.24.0

08 Oct 17:48
93baddc
Compare
Choose a tag to compare

What's Changed

This release drops our git2 dependency in favor of gix, which is much faster in practice. We already had a dependency on gix via tame-index, so this switch also improves compile times. Thanks to @Byron for this contribution!

New lints in this release:

Bugfixes:

  • Re-exporting items as _ no longer produces false positives: #536, fixed in #541
  • Checking a newly-added lib target of a crate that has a bin-only release on crates.io no longer crashes: #511, fixed in #548

This release has an MSRV of Rust 1.70. However, Rust 1.68-1.70 share a rustdoc JSON format, so semver-checking crates that need 1.68 or 1.69 is supported — just use our precompiled binaries or compile cargo-semver-checks itself on Rust 1.70+.

All Merged PRs

New Contributors

Full Changelog: v0.23.0...v0.24.0