Skip to content

Commit

Permalink
Check for changes in #[repr(i/usize)] enums as well. (#30)
Browse files Browse the repository at this point in the history
  • Loading branch information
obi1kenobi authored Aug 4, 2022
1 parent 16a8c21 commit a42a218
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 2 deletions.
40 changes: 40 additions & 0 deletions semver_tests/src/test_cases/enum_repr_int_changed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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,
}
26 changes: 26 additions & 0 deletions semver_tests/src/test_cases/enum_repr_int_removed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
2 changes: 1 addition & 1 deletion src/queries/enum_repr_int_changed.ron
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
Expand Down
2 changes: 1 addition & 1 deletion src/queries/enum_repr_int_removed.ron
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
Expand Down
16 changes: 16 additions & 0 deletions src/test_data/enum_repr_int_changed.output.ron
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
}
]
24 changes: 24 additions & 0 deletions src/test_data/enum_repr_int_removed.output.ron
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
}
]

0 comments on commit a42a218

Please sign in to comment.