From a42a218ce0ffc38ca9de40f3f39c0542b74a5c0d Mon Sep 17 00:00:00 2001 From: Predrag Gruevski <2348618+obi1kenobi@users.noreply.github.com> Date: Thu, 4 Aug 2022 13:47:51 -0400 Subject: [PATCH] Check for changes in #[repr(i/usize)] enums as well. (#30) --- .../src/test_cases/enum_repr_int_changed.rs | 40 +++++++++++++++++++ .../src/test_cases/enum_repr_int_removed.rs | 26 ++++++++++++ src/queries/enum_repr_int_changed.ron | 2 +- src/queries/enum_repr_int_removed.ron | 2 +- .../enum_repr_int_changed.output.ron | 16 ++++++++ .../enum_repr_int_removed.output.ron | 24 +++++++++++ 6 files changed, 108 insertions(+), 2 deletions(-) diff --git a/semver_tests/src/test_cases/enum_repr_int_changed.rs b/semver_tests/src/test_cases/enum_repr_int_changed.rs index 9bc8d9dc..e377fb0e 100644 --- a/semver_tests/src/test_cases/enum_repr_int_changed.rs +++ b/semver_tests/src/test_cases/enum_repr_int_changed.rs @@ -40,6 +40,20 @@ pub enum I32ToU32Enum { Baz, } +#[cfg(not(feature = "enum_repr_int_changed"))] +#[repr(isize)] +pub enum IsizeToUsizeEnum { + Bar, + Baz, +} + +#[cfg(feature = "enum_repr_int_changed")] +#[repr(usize)] +pub enum IsizeToUsizeEnum { + Bar, + Baz, +} + // The following enums have *removals* of repr(i*) and repr(u*), // not changes to another repr(i*) or repr(u*). // They should not be reported by this rule, because they have their own rule. @@ -69,3 +83,29 @@ pub enum I32Enum { Bar, Baz, } + +#[cfg(not(feature = "enum_repr_int_changed"))] +#[repr(isize)] +pub enum IsizeEnum { + Bar, + Baz, +} + +#[cfg(feature = "enum_repr_int_changed")] +pub enum IsizeEnum { + Bar, + Baz, +} + +#[cfg(not(feature = "enum_repr_int_changed"))] +#[repr(usize)] +pub enum UsizeEnum { + Bar, + Baz, +} + +#[cfg(feature = "enum_repr_int_changed")] +pub enum UsizeEnum { + Bar, + Baz, +} diff --git a/semver_tests/src/test_cases/enum_repr_int_removed.rs b/semver_tests/src/test_cases/enum_repr_int_removed.rs index 6cb0585d..d2297f0d 100644 --- a/semver_tests/src/test_cases/enum_repr_int_removed.rs +++ b/semver_tests/src/test_cases/enum_repr_int_removed.rs @@ -23,3 +23,29 @@ pub enum I32Enum { Bar, Baz, } + +#[cfg(not(feature = "enum_repr_int_removed"))] +#[repr(isize)] +pub enum IsizeEnum { + Bar, + Baz, +} + +#[cfg(feature = "enum_repr_int_removed")] +pub enum IsizeEnum { + Bar, + Baz, +} + +#[cfg(not(feature = "enum_repr_int_removed"))] +#[repr(usize)] +pub enum UsizeEnum { + Bar, + Baz, +} + +#[cfg(feature = "enum_repr_int_removed")] +pub enum UsizeEnum { + Bar, + Baz, +} diff --git a/src/queries/enum_repr_int_changed.ron b/src/queries/enum_repr_int_changed.ron index a940002e..fe242fe3 100644 --- a/src/queries/enum_repr_int_changed.ron +++ b/src/queries/enum_repr_int_changed.ron @@ -58,7 +58,7 @@ SemverQuery( }"#, arguments: { "public": "public", - "repr_regex": "#\\[repr\\([ui]\\d+\\)\\]", + "repr_regex": "#\\[repr\\([ui]\\d+|size\\)\\]", "zero": 0, }, error_message: "The repr(u*) or repr(i*) attribute on an enum was changed to another integer type. This can cause its memory representation to change, breaking FFI use cases.", diff --git a/src/queries/enum_repr_int_removed.ron b/src/queries/enum_repr_int_removed.ron index 5a3c658f..c9fc037f 100644 --- a/src/queries/enum_repr_int_removed.ron +++ b/src/queries/enum_repr_int_removed.ron @@ -51,7 +51,7 @@ SemverQuery( }"#, arguments: { "public": "public", - "repr_regex": "#\\[repr\\([ui]\\d+\\)\\]", + "repr_regex": "#\\[repr\\([ui]\\d+|size\\)\\]", "zero": 0, }, error_message: "repr(u*) or repr(i*) was removed from an enum. This can cause its memory representation to change, breaking FFI use cases.", diff --git a/src/test_data/enum_repr_int_changed.output.ron b/src/test_data/enum_repr_int_changed.output.ron index c8a8909c..78dee462 100644 --- a/src/test_data/enum_repr_int_changed.output.ron +++ b/src/test_data/enum_repr_int_changed.output.ron @@ -46,5 +46,21 @@ String("#[repr(u32)]"), ]), "visibility_limit": String("public"), + }, + { + "name": String("IsizeToUsizeEnum"), + "path": List([ + String("semver_tests"), + String("test_cases"), + String("enum_repr_int_changed"), + String("IsizeToUsizeEnum"), + ]), + "span_filename": String("src/test_cases/enum_repr_int_changed.rs"), + "span_begin_line": Uint64(52), + "old_attr": String("#[repr(isize)]"), + "new_attr": List([ + String("#[repr(usize)]"), + ]), + "visibility_limit": String("public"), } ] diff --git a/src/test_data/enum_repr_int_removed.output.ron b/src/test_data/enum_repr_int_removed.output.ron index 53cf128e..f1d6d762 100644 --- a/src/test_data/enum_repr_int_removed.output.ron +++ b/src/test_data/enum_repr_int_removed.output.ron @@ -22,5 +22,29 @@ "span_filename": String("src/test_cases/enum_repr_int_removed.rs"), "span_begin_line": Uint64(22), "visibility_limit": String("public"), + }, + { + "name": String("IsizeEnum"), + "path": List([ + String("semver_tests"), + String("test_cases"), + String("enum_repr_int_removed"), + String("IsizeEnum"), + ]), + "span_filename": String("src/test_cases/enum_repr_int_removed.rs"), + "span_begin_line": Uint64(35), + "visibility_limit": String("public"), + }, + { + "name": String("UsizeEnum"), + "path": List([ + String("semver_tests"), + String("test_cases"), + String("enum_repr_int_removed"), + String("UsizeEnum"), + ]), + "span_filename": String("src/test_cases/enum_repr_int_removed.rs"), + "span_begin_line": Uint64(48), + "visibility_limit": String("public"), } ]