I'm taking a few days off from work, let's see how far I can get with having cargo-semver-checks scan the Rust standard library for accidental breakage... Idea courtesy of a random hallway conversation with @amanieu.bsky.social at the Rust All Hands part of @rustnl.bsky.social this year.
Post
It's Tuesday, and so far so good! Two things happened today, by which I mean after midnight last night. First, I merged a PR to allow unstable stdlib items to be considered non-public-API. Similarly, const-unstable items are considered non-const in public API: github.com/obi1kenobi/t...
Second, the last required upstream PR got merged into rustdoc! It lets us know which default values (like on associated consts, or default method impls in traits) are considered stable and therefore public API. This is the last "partial stability" mechanism we need. github.com/rust-lang/ru...
I had to take a brief detour to triage a surprising new class of SemVer breakage. It's always *a time* when the net result is "8 issues across 5 repos" 😅 The net result is the same: even more lints! github.com/obi1kenobi/c...
It's Thursday, day 4. Today's haul so far is ~2500 LoC. First, making use of default-value stability which we previously exposed in rustdoc JSON. Codex caught a subtle edge case that affects which traits are considered sealed. Copious test cases are standard, of course. github.com/obi1kenobi/t...
1 repost1 like
Second, an improvement to how we normalize types. We'll need this to implement type-checking lints in the future. This will eliminate a large class of expensive type-checks where the previous logic was unnecessarily conservative and quite inefficient. github.com/obi1kenobi/t...