-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Begin resolving cargo-semver-checks
blockers for merging into cargo
#104
Comments
This issue is intended for status updates only. For general questions or comments, please contact the owner(s) directly. |
Status update as of September 1. Key developments: We've laid a lot of the groundwork to make manifest linting possible.
Not blocked on anything. No opportunities to contribute yet, but stay tuned — there will be some in future updates! |
Status update as of September 17. Key developments: Working prototype of manifest querying. WIP branch here: https://github.com/obi1kenobi/trustfall-rustdoc-adapter/compare/manifest_querying An example SemVer lint this enables would be: "a non- {
CrateDiff {
baseline {
feature {
feature: name
@filter(op: "!=", value: ["$nightly"])
@tag
@output
}
}
current {
feature @fold @transform(op: "count") @filter(op: "=", value: ["$zero"]) {
name @filter(op: "=", value: ["%feature"])
}
}
}
}
# args:
{
"nightly": "nightly",
"zero": 0
} This is SemVer-major because it'll break uses like: Not blocked on anything. No opportunities to contribute yet, but stay tuned — there will be some in future updates! |
No major updates to report. Preparing my talk for next week's EuroRust has taken away most of my free time. |
Key developments:
Partial schema design and implementation of type information in lintsThe schema we use for writing lints now contains information on:
This newly allows the implementation of breaking-change lints such as "generic const parameter no longer has default value" or "trait bound removed from generic parameter in trait method." Additionally, @suaviloquence has implemented the ability to print rustdoc JSON type information into human-readable source code form, which will allow us to produce higher-quality diagnostics for type-related breaking changes. This required a lot of care, perseverance, and testing — thank you 🙏 Resolved multi-team questions that were blocking cross-crate checkingFor a long time, cross-crate checking was blocked on a multi-team coordination problem: cargo-semver-checks needs more data from rustdoc, which in turn needs more data from rustc. This was a classic "everyone's third-most important thing" problem: important, but not critical and therefore never top of the agenda for resolving the open questions there. In-person meetings with Rust Project members during my trips to RustConf and EuroRust helped nudge this forward:
Refactor of cargo-semver-checks data handlingPlumbing in manifest information was proving challenging due to a significant amount of tech debt accrued in the cargo-semver-checks code that loads the data of scanned crates. This PR is a significant clean-up and refactor of that portion of the tool, allowing us to move forward with retrieving manifest information while also supporting other quality-of-life improvements. With the mountain of tech debt largely resolved, I expect that adding manifest information should be relatively straightforward from here. This portion of the goal also greatly benefited from the Google Summer of Code work that @suaviloquence did — it wouldn't have been possible without the significant effort he put into improving our test suites and harnesses. |
Key developments:
Cargo manifest lintingAs a recap, the idea here is catching breakage caused by manifest ( An example of such breakage is the removal of a package feature: any crates that enabled the removed feature will no longer build. The PR above builds upon the data-handling refactor from the previous update post, and makes it possible to lint manifests for breaking changes. The PR includes the |
Summary
Design and implement
cargo-semver-checks
functionality that lies on the critical path for merging the tool into cargo itself.Tasks and status
The text was updated successfully, but these errors were encountered: