-
Notifications
You must be signed in to change notification settings - Fork 2.4k
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
Add "unit struct to normal struct" case to semver.md #10871
Conversation
Changing a public unit struct to a normal struct is a breaking change that should require a major version bump. Adding an entry to the semver page in the reference to document this.
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @ehuss (or someone else) soon. Please see the contribution instructions for more information. |
I think I would prefer to add a more general rule. I'm pretty sure it is not allowed to change a struct from any of the forms (unit, tuple, or brace). They each have subtle differences. I'm also fairly sure you can't change between other ADTs (union, enum). https://internals.rust-lang.org/t/pre-rfc-stable-rustdoc-urls/13099 contains a long discussion about the possibility of semver compatibility between types. It's been a long while since I've read it, so I don't remember all the details there, but it would be good to review. However, my instinct is that there is no compatibility between changes (although the context of rustdoc URLs may be a little different from Cargo's SemVer guidelines). I've also been contemplating changing the approach here to only list what is explicitly allowed (at least in terms of signatures), and then all other changes are assumed to be not allowed. I suspect the list of what is not allowed is going to be much longer than what is allowed. I haven't really thought this through much, but it is something that seems like a possibly better direction. Otherwise we'll just keep adding an endless list of rules of what you can't do. Also, I'm not sure if you've seen it, but I've been keeping a list of changes that haven't been added in #8736. A problem with managing these rules is that they can be very subtle and can require a lot of thought and consideration. I would like to address as many rules as possible, but most of those rules are tricky. |
Currently, I believe it does not appear that changing a unit struct to a tuple struct must be a breaking change: Of course, we could decide that, despite the conversion being technically allowed by the compiler, a unit -> tuple struct change requires a major version bump regardless. I just wanted to raise this edge case for your consideration. If the struct has no private fields, any other struct form change is clearly breaking because of differing struct literals rules. However, if the struct is
Great link — thanks! It's a bit of a long read and I'm about to go on a trip, so I'll need a bit of time to digest it.
I understand the hesitation around the very long list of rules. That said, I think having the "explicitly not allowed" approach is overall better for several reasons:
It's also much easier to create a good end-user experience when building semver-checkers (again, like my own The allow-list approach requires much more "understanding" of what the user's change is in order to generate good error messages, and comes with a bigger UX risk: "Is this really a breaking change or did the checker misunderstand my change?" With simple deny-list rules, it's easier to look at the query that captures the rule and verify that it faithfully encodes the rule because of the relative simplicity. Any violations that query finds can also be easily explained to the user. Since the tool might not cover all rules (since there are many and adding them all to the tool will take time), this approach will make it easier to explain to users which rules are checked by the tool and which are not: one can just show a table of all the semver rules in the reference and show checkmarks next to the ones checked by the tool. As @oli-obk said on Twitter the other day, we should strongly consider writing the rules in a form amenable to being checked automatically since they are complex and difficult to check by hand. I hope I've convinced you that the deny-list approach is better for checking automatically than the allow-list approach. I understand that the deny-list approach means more work to write and maintain the semver reference docs. As I'm advocating for that approach, I'm also happy to share in that burden by writing and reviewing new additions to the semver reference docs.
That's a fantastic list! I hadn't seen it, thanks for sharing — it will be very useful to me. |
This isn't quite right. // but both of these ways to create a Bar work fine
let _a = Bar;
let _b = Bar();
The subtleties are also around which entities exist in various namespaces. All structs place an entity in the type namespace. Tuple structs also place a constructor function in the value namespace. A unit-struct places a Thanks for the comments on the negative rules. That does sound like it'll be useful. Hopefully we can wrangle the rules so that they don't become too endless. |
Ah, my bad — thanks. Do you know if |
I believe the tuple constructor becomes private (it removes the EDIT: (I have an issue open to clarify that.) |
Once again, great link — thanks :) Removing the Here's my reasoning:
What do you think? Happy to amend the PR with what you think the rule should be. |
I think only if they have zero public fields. I can't think of a specific case otherwise where that would be a problem. So, in summary, I think the only safe conversion (aside from If there are any public fields, then it could cause problems with pattern matching. |
☔ The latest upstream changes (presumably #12339) made this pull request unmergeable. Please resolve the merge conflicts. |
## 🤖 New release * `logging`: 0.1.3 -> 0.2.0 (⚠️ API breaking changes) ###⚠️ `logging` breaking changes ``` --- failure derive_trait_impl_removed: built-in derived trait no longer implemented --- Description: A public type has stopped deriving one or more traits. This can break downstream code that depends on those types implementing those traits. ref: https://doc.rust-lang.org/reference/attributes/derive.html#derive impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.27.0/src/lints/derive_trait_impl_removed.ron Failed in: type MakeSpanWithId no longer derives Copy, in /tmp/.tmpL0GyxN/logging/src/http.rs:13 --- failure unit_struct_changed_kind: unit struct changed kind --- Description: A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax. ref: rust-lang/cargo#10871 impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.27.0/src/lints/unit_struct_changed_kind.ron Failed in: struct MakeSpanWithId in /tmp/.tmpL0GyxN/logging/src/http.rs:13 ``` <details><summary><i><b>Changelog</b></i></summary><p> </p></details> --- This PR was generated with [release-plz](https://github.com/MarcoIeni/release-plz/). Signed-off-by: the-hacker-app-releases[bot] <150499272+the-hacker-app-releases[bot]@users.noreply.github.com> Co-authored-by: the-hacker-app-releases[bot] <150499272+the-hacker-app-releases[bot]@users.noreply.github.com>
At this has been waiting-on-author for a couple of years, I'm going to go ahead and close this. We can always pick this up again later. |
Ah, sorry — I did drop the ball on this. Closing is the right call. Thanks, Ed! I'm not sure I have the right set of skills to write reference-quality docs, and I don't want to take up more of the cargo team's time with reviewing docs PRs and mentoring me toward getting better at it. As I work on |
## 🤖 New release * `testcontainers-modules`: 0.10.0 -> 0.11.0 (⚠️ API breaking changes) ###⚠️ `testcontainers-modules` breaking changes ``` --- failure unit_struct_changed_kind: unit struct changed kind --- Description: A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax. ref: rust-lang/cargo#10871 impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.35.0/src/lints/unit_struct_changed_kind.ron Failed in: struct DynamoDb in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/dynamodb_local/mod.rs:8 struct KwokCluster in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/kwok/mod.rs:36 struct CncfDistribution in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/cncf_distribution/mod.rs:30 struct Redis in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/redis/standalone.rs:37 struct RabbitMq in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/rabbitmq/mod.rs:33 struct ElasticMq in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/elasticmq/mod.rs:7 struct VictoriaMetrics in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/victoria_metrics/mod.rs:36 struct RedisStack in /tmp/.tmpSZARLK/testcontainers-rs-modules-community/src/redis/stack.rs:35 ``` <details><summary><i><b>Changelog</b></i></summary><p> <blockquote> ## [0.11.0] - 2024-09-25 ### Bug Fixes - Update version to fix crashes in CI ([#219](#219)) - [**breaking**] Make EULA acception explicit ([#218](#218)) ### Documentation - Add docs for the ganachecli module ([#190](#190)) ### Features - Add ability to enable properties-config for testcontainers - [**breaking**] Update testcontainers to `0.23.0` ([#216](#216)) ### Miscellaneous Tasks - Update redis requirement from 0.26.0 to 0.27.2 ([#211](#211)) - Exclude all-features test run ([#174](#174)) - Update async-nats requirement from 0.35.0 to 0.36.0 ([#206](#206)) ### Refactor - [**breaking**] Require the builder pattern for module initalisation ([#161](#161)) ### Testing - Correct password usage <!-- generated by git-cliff --> </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/MarcoIeni/release-plz/). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
## 🤖 New release * `vortex-alp`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-array`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-buffer`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-datetime-dtype`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-dtype`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-error`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-flatbuffers`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-proto`: 0.12.0 -> 0.13.0 * `vortex-scalar`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-fastlanes`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-bytebool`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-datafusion`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-expr`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-schema`: 0.12.0 -> 0.13.0 * `vortex-serde`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-sampling-compressor`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-datetime-parts`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-dict`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-fsst`: 0.12.0 -> 0.13.0 (✓ API compatible changes) * `vortex-roaring`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-runend`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-runend-bool`: 0.12.0 -> 0.13.0 (⚠️ API breaking changes) * `vortex-zigzag`: 0.12.0 -> 0.13.0 (✓ API compatible changes) ###⚠️ `vortex-array` breaking changes ``` --- failure declarative_macro_missing: macro_rules declaration removed or renamed --- Description: A publicly-visible `macro_rules` declarative macro cannot be imported by its prior name. A `#[macro_export]` may have been removed, or the macro itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/reference/macros-by-example.html#path-based-scope impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/declarative_macro_missing.ron Failed in: macro_rules! assert_arrays_eq, previously in file /tmp/.tmpnyv9D6/vortex-array/src/array/assertions.rs:2 --- failure enum_variant_added: enum variant added on exhaustive enum --- Description: A publicly-visible enum without #[non_exhaustive] has a new variant. ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_variant_added.ron Failed in: variant Canonical:VarBinView in /tmp/.tmpCUhGq5/vortex/vortex-array/src/canonical.rs:61 --- failure enum_variant_missing: pub enum variant removed or renamed --- Description: A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_variant_missing.ron Failed in: variant Canonical::VarBin, previously in file /tmp/.tmpnyv9D6/vortex-array/src/canonical.rs:61 --- failure inherent_method_missing: pub method removed or renamed --- Description: A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron Failed in: Canonical::into_varbin, previously in file /tmp/.tmpnyv9D6/vortex-array/src/canonical.rs:120 VarBinViewArray::bytes, previously in file /tmp/.tmpnyv9D6/vortex-array/src/array/varbinview/mod.rs:183 BinaryView::size, previously in file /tmp/.tmpnyv9D6/vortex-array/src/array/varbinview/mod.rs:85 --- failure module_missing: pub module removed or renamed --- Description: A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/module_missing.ron Failed in: mod vortex::opaque, previously in file /tmp/.tmpnyv9D6/vortex-array/src/opaque.rs:1 mod vortex::visitor, previously in file /tmp/.tmpnyv9D6/vortex-array/src/visitor.rs:1 mod vortex::vendored, previously in file /tmp/.tmpnyv9D6/vortex-array/src/vendored.rs:1 --- failure struct_missing: pub struct removed or renamed --- Description: A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron Failed in: struct vortex::opaque::OpaqueEncoding, previously in file /tmp/.tmpnyv9D6/vortex-array/src/opaque.rs:19 struct vortex::ChildrenCollector, previously in file /tmp/.tmpnyv9D6/vortex-array/src/view.rs:170 --- failure trait_added_supertrait: non-sealed trait added new supertraits --- Description: A non-sealed trait added one or more supertraits, which breaks downstream implementations of the trait ref: https://doc.rust-lang.org/cargo/reference/semver.html#generic-bounds-tighten impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_added_supertrait.ron Failed in: trait vortex::ArrayMetadata gained Display in file /tmp/.tmpCUhGq5/vortex/vortex-array/src/metadata.rs:15 --- failure trait_method_added: pub trait method added --- Description: A non-sealed public trait added a new method without a default implementation, which breaks downstream implementations of the trait ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-item-no-default impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_added.ron Failed in: trait method vortex::IntoArrayVariant::into_varbinview in file /tmp/.tmpCUhGq5/vortex/vortex-array/src/canonical.rs:315 --- failure trait_method_missing: pub trait method removed or renamed --- Description: A trait method is no longer callable, and may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_missing.ron Failed in: method into_varbin of trait IntoArrayVariant, previously in file /tmp/.tmpnyv9D6/vortex-array/src/canonical.rs:388 --- failure trait_missing: pub trait removed or renamed --- Description: A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_missing.ron Failed in: trait vortex::visitor::AcceptArrayVisitor, previously in file /tmp/.tmpnyv9D6/vortex-array/src/visitor.rs:7 trait vortex::visitor::ArrayVisitor, previously in file /tmp/.tmpnyv9D6/vortex-array/src/visitor.rs:12 --- failure trait_removed_supertrait: supertrait removed or renamed --- Description: A supertrait was removed from a trait. Users of the trait can no longer assume it can also be used like its supertrait. ref: https://doc.rust-lang.org/reference/items/traits.html#supertraits impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_removed_supertrait.ron Failed in: supertrait vortex::visitor::AcceptArrayVisitor of trait ArrayTrait in file /tmp/.tmpCUhGq5/vortex/vortex-array/src/lib.rs:271 ``` ###⚠️ `vortex-dtype` breaking changes ``` --- failure function_missing: pub fn removed or renamed --- Description: A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/function_missing.ron Failed in: function vortex_dtype::flatbuffers::resolve_field_references, previously in file /tmp/.tmpnyv9D6/vortex-dtype/src/serde/flatbuffers/project.rs:11 ``` ###⚠️ `vortex-error` breaking changes ``` --- failure enum_variant_added: enum variant added on exhaustive enum --- Description: A publicly-visible enum without #[non_exhaustive] has a new variant. ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_variant_added.ron Failed in: variant VortexError:UrlError in /tmp/.tmpCUhGq5/vortex/vortex-error/src/lib.rs:161 ``` ###⚠️ `vortex-flatbuffers` breaking changes ``` --- failure constructible_struct_adds_field: externally-constructible struct adds field --- Description: A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field. ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/constructible_struct_adds_field.ron Failed in: field FooterArgs.row_count in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:350 field LayoutArgs.encoding in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:221 field LayoutArgs.buffers in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:222 field LayoutArgs.children in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:223 field LayoutArgs.metadata in /tmp/.tmpCUhGq5/vortex/vortex-flatbuffers/src/./generated/footer.rs:224 --- failure enum_missing: pub enum removed or renamed --- Description: A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_missing.ron Failed in: enum vortex_flatbuffers::footer::NestedLayoutOffset, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:217 enum vortex_flatbuffers::footer::FlatLayoutOffset, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:103 --- failure inherent_associated_pub_const_missing: inherent impl's associated pub const removed --- Description: An inherent impl's associated public constant is removed or renamed ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_associated_pub_const_missing.ron Failed in: Layout::VT_LAYOUT_TYPE, previously at /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:347 Layout::VT_LAYOUT, previously at /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:348 --- failure inherent_method_missing: pub method removed or renamed --- Description: A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron Failed in: Layout::layout_type, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:367 Layout::layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:374 Layout::layout_as_flat_layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:382 Layout::layout_as_nested_layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:397 LayoutBuilder::add_layout_type, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:450 LayoutBuilder::add_layout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:454 --- failure pub_module_level_const_missing: pub module-level const is missing --- Description: A public const is missing, renamed, or changed from const to static. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/pub_module_level_const_missing.ron Failed in: ENUM_MIN_LAYOUT_VARIANT in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:13 ENUM_VALUES_LAYOUT_VARIANT in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:18 ENUM_MAX_LAYOUT_VARIANT in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:15 --- failure struct_missing: pub struct removed or renamed --- Description: A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron Failed in: struct vortex_flatbuffers::footer::NestedLayoutBuilder, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:295 struct vortex_flatbuffers::footer::LayoutVariantUnionTableOffset, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:101 struct vortex_flatbuffers::footer::FlatLayoutBuilder, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:181 struct vortex_flatbuffers::footer::NestedLayout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:220 struct vortex_flatbuffers::footer::FlatLayout, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:106 struct vortex_flatbuffers::footer::LayoutVariant, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:26 struct vortex_flatbuffers::footer::NestedLayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:281 struct vortex_flatbuffers::footer::FlatLayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:167 --- failure struct_pub_field_missing: pub struct's pub field removed or renamed --- Description: A publicly-visible struct has at least one public field that is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_pub_field_missing.ron Failed in: field layout_type of struct LayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:431 field layout of struct LayoutArgs, previously in file /tmp/.tmpnyv9D6/vortex-flatbuffers/src/./generated/footer.rs:432 ``` ###⚠️ `vortex-fastlanes` breaking changes ``` --- failure function_missing: pub fn removed or renamed --- Description: A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/function_missing.ron Failed in: function vortex_fastlanes::bitpack_patches, previously in file /tmp/.tmpnyv9D6/vortex-fastlanes/src/bitpacking/compress.rs:138 ``` ###⚠️ `vortex-expr` breaking changes ``` --- failure function_missing: pub fn removed or renamed --- Description: A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/function_missing.ron Failed in: function vortex_expr::expr_is_filter, previously in file /tmp/.tmpnyv9D6/vortex-expr/src/lib.rs:23 --- failure struct_missing: pub struct removed or renamed --- Description: A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron Failed in: struct vortex_expr::NoOp, previously in file /tmp/.tmpnyv9D6/vortex-expr/src/expr.rs:47 --- failure trait_method_missing: pub trait method removed or renamed --- Description: A trait method is no longer callable, and may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_missing.ron Failed in: method estimate_cost of trait VortexExpr, previously in file /tmp/.tmpnyv9D6/vortex-expr/src/expr.rs:28 ``` ###⚠️ `vortex-sampling-compressor` breaking changes ``` --- failure struct_missing: pub struct removed or renamed --- Description: A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron Failed in: struct vortex_sampling_compressor::ALL_COMPRESSORS, previously in file /tmp/.tmpnyv9D6/vortex-sampling-compressor/src/lib.rs:38 --- failure trait_method_default_impl_removed: pub trait default method impl removed --- Description: A method's default impl in an unsealed trait has been removed, breaking trait implementations that relied on that default ref: https://doc.rust-lang.org/book/ch10-02-traits.html#default-implementations impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_default_impl_removed.ron Failed in: trait method vortex_sampling_compressor::compressors::EncodingCompressor::cost in file /tmp/.tmpCUhGq5/vortex/vortex-sampling-compressor/src/compressors/mod.rs:33 --- failure unit_struct_changed_kind: unit struct changed kind --- Description: A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax. ref: rust-lang/cargo#10871 impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/unit_struct_changed_kind.ron Failed in: struct BitPackedCompressor in /tmp/.tmpCUhGq5/vortex/vortex-sampling-compressor/src/compressors/bitpacked.rs:23 ``` ###⚠️ `vortex-roaring` breaking changes ``` --- failure inherent_method_missing: pub method removed or renamed --- Description: A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron Failed in: RoaringIntArray::bitmap, previously in file /tmp/.tmpnyv9D6/vortex-roaring/src/integer/mod.rs:46 ``` ###⚠️ `vortex-runend` breaking changes ``` --- failure module_missing: pub module removed or renamed --- Description: A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/module_missing.ron Failed in: mod vortex_runend::runend, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:1 --- failure struct_missing: pub struct removed or renamed --- Description: A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron Failed in: struct vortex_runend::runend::RunEndMetadata, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:24 struct vortex_runend::runend::RunEndArray, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:21 struct vortex_runend::runend::RunEnd, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:21 struct vortex_runend::runend::RunEndEncoding, previously in file /tmp/.tmpnyv9D6/vortex-runend/src/runend.rs:21 ``` ###⚠️ `vortex-runend-bool` breaking changes ``` --- failure inherent_method_missing: pub method removed or renamed --- Description: A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely. ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron Failed in: RunEndBoolArray::find_physical_index, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:69 RunEndBoolArray::offset, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:83 RunEndBoolArray::start, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:88 RunEndBoolArray::ends, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:93 RunEndBoolArray::find_physical_index, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:69 RunEndBoolArray::offset, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:83 RunEndBoolArray::start, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:88 RunEndBoolArray::ends, previously in file /tmp/.tmpnyv9D6/vortex-runend-bool/src/array.rs:93 ``` <details><summary><i><b>Changelog</b></i></summary><p> </p></details> --- This PR was generated with [release-plz](https://github.com/MarcoIeni/release-plz/). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
What does this PR try to resolve?
Changing a public unit struct to a normal struct appears to be a breaking change that should require a major version bump: unit structs are always constructible as
Foo
but normal (i.e. plain) structs are only constructible asFoo {}
. The curly braces are required by the compiler, and produce a compilation error and suggestion to add them if they are missing.The semver page in the reference does not mention anything about unit structs, and as far as I could tell, this case does not seem to be covered in any of the existing entries in the
Structs
section of the semver page.This PR adds a new entry in the
Structs
section of the semver page in the reference, describing this major breaking change and providing an example.