Releases: obi1kenobi/cargo-semver-checks
v0.33.0
What's Changed
In this release:
- lint configuration
- a new lint
- support for rustdoc format v32
PSA: Installing cargo install cargo-semver-checks --no-default-features
will no longer work, due to a change in our dependencies that unfortunately had to propagate to our own features as well. Users should update that invocation to cargo install cargo-semver-checks --no-default-features --features gix-reqwest
to recover the old behavior. Thanks to @Lorak-mmk for flagging this change!
This release requires Rust 1.74+ both to install (MSRV) and at runtime. This is the last release to support Rust 1.74-1.76; future releases will require Rust 1.77+.
Lint configuration
Thanks to @suaviloquence's hard work as part of our participation in Google Summer of Code, users can now customize the SemVer (major/minor) and severity (deny/warn/allow) levels of cargo-semver-checks
lints 🎉
While we've already extensively tested this feature, we know that complex new code often reveals surprises when it first faces the real world. Please kindly report any bugs or reach out in the GSoC project's Zulip if you have questions or concerns.
Read more about this new feature on @suaviloquence's blog: https://blog.mcarr.one/
New lints
inherent_associated_const_now_doc_hidden
by @DeluxeRaph in #820
Support for rustdoc format v32
Latest nightly
Rust has switched to rustdoc format v32, so you'll want to update to this new release if you are relying on nightly. Implemented in #825, and in obi1kenobi/trustfall-rustdoc-adapter#338 by @Xuanwo.
All Merged PRs
- deserialize [package.metadata] and [workspace.metadata] tables by @suaviloquence in #798
- read package/workspace config from Cargo manifest by @suaviloquence in #799
- Bump mozilla-actions/sccache-action from 0.0.4 to 0.0.5 by @dependabot in #801
- Weekly
cargo update
of dependencies by @obi1kenobi in #802 - use configured required update version by @suaviloquence in #800
- Move lint configuration to [cargo-semver-checks.lints] table by @suaviloquence in #804
- add lint level field to query skeleton by @suaviloquence in #806
- Weekly
cargo update
of dependencies by @obi1kenobi in #807 - Handle lint level in check_release by @suaviloquence in #805
- annotate
unreachable!()
statements by @suaviloquence in #808 - add test for
allow
lint level by @suaviloquence in #809 - Weekly
cargo update
of dependencies by @obi1kenobi in #810 - Add
workspace
key to[cargo-semver-checks.lints]
table by @suaviloquence in #811 - Implement opt-in workspace overrides by @suaviloquence in #812
- make specifying
workspace = false
a hard error by @suaviloquence in #813 - Test that config is only read from new (i.e., current) manifest by @suaviloquence in #814
- Weekly
cargo update
of dependencies by @obi1kenobi in #817 - Make lint table entries compatible with cargo
[lints]
by @suaviloquence in #818 - Added inherent_associated_const_now_doc_hidden by @DeluxeRaph in #820
- Weekly
cargo update
of dependencies by @obi1kenobi in #822 - Add support for rustdoc JSON format v32. by @obi1kenobi in #825
- add lint config guide to README by @suaviloquence in #826
- Add explicit features for gix backend by @ggwpez in #824
- Expand lint-level configuration section in README. by @obi1kenobi in #828
- Minor fixes for lint config docs by @suaviloquence in #829
- Update all dependencies to compatible versions prior to release. by @obi1kenobi in #830
- Adjust semver-checking step for mutually-exclusive features. by @obi1kenobi in #832
- Release v0.33.0. by @obi1kenobi in #831
New Contributors
- @DeluxeRaph made their first contribution in #820
- @ggwpez made their first contribution in #824
Full Changelog: v0.32.0...v0.33.0
v0.32.0
What's Changed
In this release:
- 3 new lints
- support for rustdoc format v30
- performance improvements
This release requires Rust 1.74+ both to install (MSRV) and at runtime.
New lints
pub_static_mut_now_immutable
by @arpity22 in #768trait_associated_type_now_doc_hidden
by @arpity22 in #776trait_associated_const_now_doc_hidden
by @arpity22 in #779
Support for rustdoc format v30
Latest nightly
Rust has switched to rustdoc format v30, so you'll want to update to this new release if you are relying on nightly. Implemented in #790 and obi1kenobi/trustfall-rustdoc-adapter@65dc425
Performance improvements
@jw013 in #777 figured out a way to improve the performance of a lint that could get quite slow on large codebases. Kudos! 🎉
Google Summer of Code (GSoC)
cargo-semver-checks
is participating in Google Summer of Code: @suaviloquence is working on allowing workspaces and packages to customize the SemVer (major/minor/patch) and severity (error/warn/allow) levels of our lints.
Just like how Rustaceans don't enable all clippy
lints in all projects, not all SemVer lints are suitable for every circumstance either. This GSoC project will allow us to ship many more lints that we've been holding off on due to their more situational usefulness. Thank you, @suaviloquence!
You can follow this work at @suaviloquence's blog: https://blog.mcarr.one/rust-lint-config/
All Merged PRs
- Add lint pub_static_mut_now_immutable by @arpity22 in #768
- Weekly
cargo update
of dependencies by @obi1kenobi in #772 - Add next Rust minor to test matrix by @obi1kenobi in #773
- Enable auto-merge for adding new Rust release to CI by @obi1kenobi in #774
- Weekly
cargo update
of dependencies by @obi1kenobi in #775 - Improve function_abi_no_longer_unwind performance by reordering current, baseline by @jw013 in #777
- Added lint trait_associated_type_now_doc_hidden by @arpity22 in #776
- Weekly
cargo update
of dependencies by @obi1kenobi in #778 - Added lint trait_associated_const_now_doc_hidden by @arpity22 in #779
- Weekly
cargo update
of dependencies by @obi1kenobi in #780 - Weekly
cargo update
of dependencies by @obi1kenobi in #782 - Check deserialized query id matches expected id by @jw013 in #783
- Weekly
cargo update
of dependencies by @obi1kenobi in #785 - refactoring to add lint levels on queries by @suaviloquence in #787
- Weekly
cargo update
of dependencies by @obi1kenobi in #789 - Add support for rustdoc JSON format v30. by @obi1kenobi in #790
- Upgrade
gix
andtame-index
in lockstep with each other. by @obi1kenobi in #791 - Upgrade to itertools v0.13.0. by @obi1kenobi in #792
- add query override data structures by @suaviloquence in #788
- Add next Rust minor to test matrix by @obi1kenobi in #794
- Fix typo in docstring. by @obi1kenobi in #795
- Upgrade to cargo_toml v0.20.2. by @obi1kenobi in #793
- Weekly
cargo update
of dependencies by @obi1kenobi in #796 - Release v0.32.0. by @obi1kenobi in #797
Full Changelog: v0.31.0...v0.32.0
v0.31.0
What's Changed
In this release:
- 5 new lints
- support for rustdoc format v29
- improved diagnostic messages
- tightening existing lints to catch more breaking changes
- new CLI flags for color output
- improved API if using
cargo-semver-checks
as a library (breaking changes — see Migration Guide below!)
This release requires Rust 1.74+ both to install (MSRV) and at runtime.
New lints
inherent_associated_pub_const_missing
by @arpity22 in #714pub_static_now_doc_hidden
by @arpity22 in #712function_export_name_changed
by @suaviloquence in #728union_missing
by @jw013 in #731union_field_missing
by @me-diru in #729
Support for rustdoc format v29
Latest nightly
Rust has switched to rustdoc format v29, so you'll want to update to this new release if you are using a nightly released in the last week or so. Implemented in #769 and obi1kenobi/trustfall-rustdoc-adapter@9fb656a
Improved diagnostic messages
cargo-semver-checks
can only semver-check library crates, since binaries have no API surface area to check. But it might not be obvious which crates cargo-semver-checks
considered while looking for library crates to check — that's how we get issues like #723. As of this release, we have a better error message here:
error: no crates with library targets selected, nothing to semver-check
note: only library targets contain an API surface that can be checked for semver
note: skipped the following crates since they have no library target: example, other_example
Implemented in #741.
Two other, smaller quality-of-life improvements here are printing which crate features are enabled in --verbose
mode (#725), and improving the error message when a crate fails to compile in cases where no features are used (#726).
Huge thanks to @jw013 who has been on a roll here 🙏
Tightening existing lints to catch more breaking changes
cargo-semver-checks
has an explicit goal of "zero false-positives" — every lint we emit should point to a real issue deserving of maintainers' attention. (We are decent at this, but not perfect yet. We're working on getting better!)
But many cases aren't clear-cut — some things might be a major breaking change, and the final "yes/no" decision on it depends on many factors. In such cases, cargo-semver-checks
is conservative, meaning that we choose to not emit a lint unless absolutely certain. For example:
pub struct MyIterator;
impl MyIterator {
// We *do not* consider removing this pub method
// a major breaking change!
//
// If removed, *most* callers will seamlessly use
// the `Iterator` trait's version of the `next()` method.
pub fn next(&mut self) -> Option<i64> {
<Self as Iterator>::next(self)
}
}
impl Iterator for MyIterator {
type Item = i64;
fn next(&mut self) -> Option<Self::Item> {
None
}
}
In the above example, removing the inherent MyIterator::next()
method will not trigger a lint because for most users it won't be breaking. (It could still be breaking for some users though! For example, users who use #![no_implicit_prelude]
and don't have the Iterator
trait in scope.)
In some cases, we might overshoot and end up being overly conservative: there was a real breaking change, but we failed to emit it because we were too worried about it being a false positive.
This release removes overly conservative cases in the inherent_associated_pub_const_missing
and inherent_method_missing
lints related to when the impl Trait
whose items we're falling back to is #[doc(hidden)]
and not public API. The PR has the full details: #763
New CLI flags for color output
The CLI now accepts --color=always/never/auto
to match cargo
's own behavior. If set, the CLI flag overrides any CARGO_TERM_COLOR
env variable that might be set.
Implemented by @suaviloquence in #721
Improved API if using cargo-semver-checks
as a library
@suaviloquence took on the work of improving our library APIs:
- Switched us from
termcolor
to the neweranstyle
crate for our terminal color needs, to match whatcargo
itself uses. (#737) - Allow directing our stdout/stderr to buffers instead of the "real" stdout/stderr (#765)
- Improve the naming and structural consistency of our API's methods (#765)
Additional thanks go to @pksunkara for the help and advice around switching to anstyle
!
@suaviloquence put together this handy migration guide to help library users migrate 👏
Major changes
-
Check::check_release
takes a new&mut GlobalConfig
parameter, andGlobalConfig
now holds log level and color settings.- Change:
let mut check = Check::new(rustdoc); check.with_packages(packages) .with_log_level(Some(log_level)) .with_color_choice(Some(termcolor::ColorChoice::Always)); let result = check.check_release();
- To:
let mut config = GlobalConfig::new() .set_level(Some(log_level)); config.set_color_choice(true); // or set_{err,out)_color_choice for finer-grained control let mut check = Check::new(rustdoc); check.with_packages(packages); let result = check.check_release(&mut config);
- Change:
-
Set color choice in one of three ways:
- Change:
let choice: termcolor::ColorChoice = ...; config = config.set_color_choice(choice);
- To: one of the three following options, depending on desired granularity
- Set global color choice for all crates using the
anstream
library:let choice: anstream::ColorChoice = ...; // set *before* creating `GlobalConfig` instance (if using default stdout/stderr) // or before calling `GlobalConfig::set_std{out,err}` (if configuring them) choice.write_global(); // configures `choice` for all crates using `anstream`
- Set whether to use colors for both stdout and stderr in the
cargo-semver-checks
library:let use_colors: bool = ...; config.set_color_choice(use_colors);
- Set whether to use colors for a specific stream in the
cargo-semver-checks
library:let use_colors_for_stderr: bool = ...; let use_colors_for_stdout: bool = ...; config.set_err_color_choice(use_colors_for_stderr); config.set_out_color_choice(use_colors_for_stdout);
- Set global color choice for all crates using the
- Change:
-
config structs (
Check
,GlobalConfig
,PackageSelection
) now have a consistent setter convention:pub fn set_[property](&mut self, prop: T) -> &mut Self
:- note: this does not apply to
Check::with_[...]_features()
methods as they are toggles vs property setters. - Change:
selection.with_excluded_packages(packages); check.with_selection(selection).with_all_features();
- To:
selection.set_excluded_packages(packages); check.set_package_selection(selection).with_all_features();
- Change:
config = config.set_level(level);
- To:
config.set_log_level(level); // now takes and returns &mut Self instead of owned Self
- note: this does not apply to
New features
- Users can configure the stdout and stderr streams for
cargo-semver-checks
to be different from default:let stderr: Box<dyn std::io::Write> = Box::new(stderr_buffer); config.set_stderr(stderr);
Minor changes
#[must_use]
added onGlobalConfig::std{err,out}
GlobalConfig::shell_print
takes ananstyle::Color
instead of atermcolor::Color
:- Change
config.shell_print(status, message, termcolor::Color::Red, justified)
- To
config.shell_print(status, message, anstyle::Color::Ansi(anstyle::AnsiColor::Red, justified)
- Change
- To write colors to stdout/stderr, use
writeln!(config.stdout(), "{}styled text", anstyle::Style::new().bold().[...]);
instead of thetermcolor
API - use
GlobalConfig::{out,err}_color_choice()
to query whether to print colors for the stdout/stderr stream instead of usingGlobalConfig::is_err_tty
as a heuristic GlobalConfig::std{out,err}
returns an opaqueimpl Write + '_
type instead of atermcolor::StandardStream
All Merged PRs
- Weekly
cargo update
of dependencies by @obi1kenobi in #708 - Add reminder to update MSRV in GH Action's CI suite. by @obi1kenobi in #709
- Add lint pub_static_now_doc_hidden by @arpity22 in #712
- Add Rust 1.76 to CI explicitly, now that stable is 1.77. by @obi1kenobi in #713
- Weekly
cargo update
of dependencies by @obi1kenobi in #716 - Fix test_crates directory url typo by @me-diru in #720
- Add
--color
setting to CLI. by @suaviloquence in #721 - Print crate features in verbose mode (#711) by @jw013 in #725
- Do not print --features with empty list (#718) by @jw013 in #726
- Add lint for union field missing case by @me-diru in #729
- add function_export_name_changed lint by @suaviloquence in #728
- Add union_missing lint by @jw013 in https://git...
v0.30.0
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:
union_now_doc_hidden
by @vasucp1207 (#679)trait_method_now_doc_hidden
by @suaviloquence (#684)enum_tuple_variant_field_now_doc_hidden
by @arpity22 (#685)enum_struct_variant_field_now_doc_hidden
by @arpity22 (#687)function_abi_no_longer_unwind
by @qstommyshu (#689)pub_module_level_const_now_doc_hidden
by @arpity22 (#690, #703)repr_c_removed
lint covering all struct/enum/union types, by @pksunkara (#678)- This lint augments and replaces the previous
struct_repr_c_removed
andenum_repr_c_removed
lints.
- This lint augments and replaces the previous
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
- Output complete repro command when failing to generate rustdoc JSON. by @obi1kenobi in #676
- rule: add
union_now_doc_hidden
by @vasucp1207 in #679 - Fix description and tests for inherent_method_must_use_added by @pksunkara in #677
- Replace per-type
repr(C)
lints with a single lint for all of struct/enum/union by @pksunkara in #678 - Update scripts and contributing guide by @jw013 in #681
- Replace GNU-specific commands with more portable alternatives by @jw013 in #682
- Remove script usage of globstar, improving compatibility by @jw013 in #683
- add trait_method_now_doc_hidden lint by @suaviloquence in #684
- Added lint enum_tuple_variant_field_now_doc_hidden by @arpity22 in #685
- Raise compile-time and runtime MSRV to Rust 1.74. by @obi1kenobi in #686
- Weekly
cargo update
of dependencies by @obi1kenobi in #673 - Added lint enum_struct_variant_field_now_doc_hidden by @arpity22 in #687
- Update
tame_index
andgix
to new major versions. by @obi1kenobi in #691 - Update cargo and toml-related dependencies. by @obi1kenobi in #692
- Update
handlebars
to new major version. by @obi1kenobi in #693 - Update dev dependency major versions. by @obi1kenobi in #694
- Remove
lazy_static
from dev dependencies. by @obi1kenobi in #695 - Update
itertools
to v0.12 by @obi1kenobi in #696 - Set up dependabot updates to GitHub Actions. by @obi1kenobi in #697
- Added lint public_module_level_constant_now_doc_hidden by @arpity22 in #690
- Bump mozilla-actions/sccache-action from 0.0.3 to 0.0.4 by @dependabot in #698
- Bump actions/checkout from 3 to 4 by @dependabot in #702
- Bump actions/upload-artifact from 3 to 4 by @dependabot in #699
- Bump actions/download-artifact from 3 to 4 by @dependabot in #700
- Bump actions/cache from 3 to 4 by @dependabot in #701
- Rename new lint to
pub_module_level_const_now_doc_hidden
. by @obi1kenobi in #703 - Set dependabot to weekly runs. by @obi1kenobi in #704
- New lint: add function_abi_no_longer_unwind lint by @qstommyshu in #689
- Update dependencies in preparation for release. by @obi1kenobi in #705
- Release v0.30 with Rust 1.74+ MSRV and many new lints. by @obi1kenobi in #706
New Contributors
- @vasucp1207 made their first contribution in #679
- @pksunkara made their first contribution in #677
- @suaviloquence made their first contribution in #684
- @arpity22 made their first contribution in #685
- @dependabot made their first contribution in #698
- @qstommyshu made their first contribution in #689
Full Changelog: v0.29.1...v0.30.0
v0.29.1
Just a small maintenance release, to avoid a yanked dependency version that was in our lockfiles. Enjoy!
All Merged PRs
- Update to a non-yanked version of bumpalo by @yottalogical in #671
- Weekly
cargo update
of dependencies by @obi1kenobi in #670 - Release v0.29.1 to avoid yanked dependency version. by @obi1kenobi in #672
Full Changelog: v0.29.0...v0.29.1
v0.29.0
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!
- If you're in the Boston area, come to the Boston Rust meetup this Wednesday (Feb 21) where I'll again talk about cargo-semver-checks!
- I'm going to re-record the missing parts and post a new video, so follow me on Mastodon, Twitter, or Bluesky.
New lints:
exported_function_changed_abi
by @ehiggs (#650)repr_packed_added
by @jw013 (#666)repr_packed_removed
by @jw013 (#666)struct_pub_field_now_doc_hidden
by @rubdos (#649)trait_no_longer_object_safe
(Rust 1.77+ only) by @devanbenz (#659)
False positives fixed:
trait_method_unsafe_removed
no longer triggers on traits sealed using the pub-in-priv supertrait technique. Contributed by @yottalogical in #614.
Miscellaneous:
- Support checking
rlib
,dylib
, andstaticlib
Rust library types, by @obi1kenobi (#662, #663, #664). - Improve diagnostic messages when a crate fails to build, by @obi1kenobi (#656, #658)
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
- @Xeonacid made their first contribution in #647
- @devanbenz made their first contribution in #655
- @rubdos made their first contribution in #649
- @ehiggs made their first contribution in #650
Full Changelog: v0.28.0...v0.29.0
v0.28.0
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
enum_repr_transparent_removed
, contributed by @fprasx in #627- Ability to write lints for
union
types, also contributed by @fprasx: obi1kenobi/trustfall-rustdoc-adapter#309- This immediately enables writing at least a half dozen new lints, for which I'm happy to mentor contributors: #633
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 queryingUnion
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
- @fprasx made their first contribution in #626
- @agreea made their first contribution in #628
- @Nemo157 made their first contribution in #619
Full Changelog: v0.27.0...v0.28.0
v0.27.0
What's Changed
New lints:
trait_method_unsafe_added
, contributed by @jw013 in #608trait_method_unsafe_removed
, contributed by @yottalogical in #612
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
- Weekly
cargo update
of dependencies by @obi1kenobi in #603 - Add new lint: trait_method_unsafe_added (#605) by @jw013 in #608
- Weekly
cargo update
of dependencies by @obi1kenobi in #610 - Add new lint: trait_method_unsafe_removed by @yottalogical in #612
- Update dependencies to support rustdoc v28. by @obi1kenobi in #615
- Weekly
cargo update
of dependencies by @obi1kenobi in #616 - Release v0.27 with support for rustdoc v28. by @obi1kenobi in #617
New Contributors
- @jw013 made their first contribution in #608
- @yottalogical made their first contribution in #612
Full Changelog: v0.26.0...v0.27.0
v0.26.0
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
- Test on Rust 1.73 explicitly since stable is now 1.74. by @obi1kenobi in #584
- Weekly
cargo update
of dependencies by @obi1kenobi in #585 - Weekly
cargo update
of dependencies by @obi1kenobi in #588 - implement struct_now_doc_hidden lint by @u9g in #587
- Weekly
cargo update
of dependencies by @obi1kenobi in #591 - implement enum_now_doc_hidden lint by @u9g in #593
- implement function_now_doc_hidden lint by @u9g in #594
- implement trait_now_doc_hidden lint by @u9g in #595
- Add more details to MSRV policy in README FAQ by @obi1kenobi in #598
- Enable suppressing all output ("silent mode") by @markhaehnel in #592
- release v0.26 by @obi1kenobi in #601
New Contributors
- @markhaehnel made their first contribution in #592
Full Changelog: v0.25.0...v0.26.0
v0.25.0
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!
- Joint work with @davidhewitt: #576
- Description of how it works, and why it was much more complex than just "pretend
doc(hidden)
items don't exist": https://predr.ag/blog/checking-semver-for-doc-hidden-items/
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