Skip to content

Commit 0d8e4d7

Browse files
committed
mem_discriminant: split test, make rustfixable
1 parent 483e140 commit 0d8e4d7

File tree

5 files changed

+99
-32
lines changed

5 files changed

+99
-32
lines changed

tests/ui/mem_discriminant.fixed

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// run-rustfix
2+
3+
#![deny(clippy::mem_discriminant_non_enum)]
4+
5+
use std::mem;
6+
7+
enum Foo {
8+
One(usize),
9+
Two(u8),
10+
}
11+
12+
fn main() {
13+
// bad
14+
mem::discriminant(&Some(2));
15+
mem::discriminant(&None::<u8>);
16+
mem::discriminant(&Foo::One(5));
17+
mem::discriminant(&Foo::Two(5));
18+
19+
let ro = &Some(3);
20+
let rro = &ro;
21+
mem::discriminant(ro);
22+
mem::discriminant(*rro);
23+
mem::discriminant(*rro);
24+
25+
macro_rules! mem_discriminant_but_in_a_macro {
26+
($param:expr) => {
27+
mem::discriminant($param)
28+
};
29+
}
30+
31+
mem_discriminant_but_in_a_macro!(*rro);
32+
33+
let rrrrro = &&&rro;
34+
mem::discriminant(****rrrrro);
35+
mem::discriminant(****rrrrro);
36+
37+
// ok
38+
mem::discriminant(&Some(2));
39+
mem::discriminant(&None::<u8>);
40+
mem::discriminant(&Foo::One(5));
41+
mem::discriminant(&Foo::Two(5));
42+
mem::discriminant(ro);
43+
mem::discriminant(*rro);
44+
mem::discriminant(****rrrrro);
45+
}

tests/ui/mem_discriminant.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// run-rustfix
2+
13
#![deny(clippy::mem_discriminant_non_enum)]
24

35
use std::mem;
@@ -7,16 +9,12 @@ enum Foo {
79
Two(u8),
810
}
911

10-
struct A(Foo);
11-
1212
fn main() {
1313
// bad
14-
mem::discriminant(&"hello");
1514
mem::discriminant(&&Some(2));
1615
mem::discriminant(&&None::<u8>);
1716
mem::discriminant(&&Foo::One(5));
1817
mem::discriminant(&&Foo::Two(5));
19-
mem::discriminant(&A(Foo::One(0)));
2018

2119
let ro = &Some(3);
2220
let rro = &ro;

tests/ui/mem_discriminant.stderr

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,67 @@
1-
error: calling `mem::discriminant` on non-enum type `&str`
1+
error: calling `mem::discriminant` on non-enum type `&std::option::Option<i32>`
22
--> $DIR/mem_discriminant.rs:14:5
33
|
4-
LL | mem::discriminant(&"hello");
5-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
4+
LL | mem::discriminant(&&Some(2));
5+
| ^^^^^^^^^^^^^^^^^^---------^
6+
| |
7+
| help: try dereferencing: `&Some(2)`
68
|
79
note: lint level defined here
8-
--> $DIR/mem_discriminant.rs:1:9
10+
--> $DIR/mem_discriminant.rs:3:9
911
|
1012
LL | #![deny(clippy::mem_discriminant_non_enum)]
1113
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1214

13-
error: calling `mem::discriminant` on non-enum type `&std::option::Option<i32>`
14-
--> $DIR/mem_discriminant.rs:15:5
15-
|
16-
LL | mem::discriminant(&&Some(2));
17-
| ^^^^^^^^^^^^^^^^^^---------^
18-
| |
19-
| help: try dereferencing: `&Some(2)`
20-
2115
error: calling `mem::discriminant` on non-enum type `&std::option::Option<u8>`
22-
--> $DIR/mem_discriminant.rs:16:5
16+
--> $DIR/mem_discriminant.rs:15:5
2317
|
2418
LL | mem::discriminant(&&None::<u8>);
2519
| ^^^^^^^^^^^^^^^^^^------------^
2620
| |
2721
| help: try dereferencing: `&None::<u8>`
2822

2923
error: calling `mem::discriminant` on non-enum type `&Foo`
30-
--> $DIR/mem_discriminant.rs:17:5
24+
--> $DIR/mem_discriminant.rs:16:5
3125
|
3226
LL | mem::discriminant(&&Foo::One(5));
3327
| ^^^^^^^^^^^^^^^^^^-------------^
3428
| |
3529
| help: try dereferencing: `&Foo::One(5)`
3630

3731
error: calling `mem::discriminant` on non-enum type `&Foo`
38-
--> $DIR/mem_discriminant.rs:18:5
32+
--> $DIR/mem_discriminant.rs:17:5
3933
|
4034
LL | mem::discriminant(&&Foo::Two(5));
4135
| ^^^^^^^^^^^^^^^^^^-------------^
4236
| |
4337
| help: try dereferencing: `&Foo::Two(5)`
4438

45-
error: calling `mem::discriminant` on non-enum type `A`
46-
--> $DIR/mem_discriminant.rs:19:5
47-
|
48-
LL | mem::discriminant(&A(Foo::One(0)));
49-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
50-
5139
error: calling `mem::discriminant` on non-enum type `&std::option::Option<i32>`
52-
--> $DIR/mem_discriminant.rs:23:5
40+
--> $DIR/mem_discriminant.rs:21:5
5341
|
5442
LL | mem::discriminant(&ro);
5543
| ^^^^^^^^^^^^^^^^^^---^
5644
| |
5745
| help: try dereferencing: `ro`
5846

5947
error: calling `mem::discriminant` on non-enum type `&std::option::Option<i32>`
60-
--> $DIR/mem_discriminant.rs:24:5
48+
--> $DIR/mem_discriminant.rs:22:5
6149
|
6250
LL | mem::discriminant(rro);
6351
| ^^^^^^^^^^^^^^^^^^---^
6452
| |
6553
| help: try dereferencing: `*rro`
6654

6755
error: calling `mem::discriminant` on non-enum type `&&std::option::Option<i32>`
68-
--> $DIR/mem_discriminant.rs:25:5
56+
--> $DIR/mem_discriminant.rs:23:5
6957
|
7058
LL | mem::discriminant(&rro);
7159
| ^^^^^^^^^^^^^^^^^^----^
7260
| |
7361
| help: try dereferencing: `*rro`
7462

7563
error: calling `mem::discriminant` on non-enum type `&&std::option::Option<i32>`
76-
--> $DIR/mem_discriminant.rs:29:13
64+
--> $DIR/mem_discriminant.rs:27:13
7765
|
7866
LL | mem::discriminant($param)
7967
| ^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -85,20 +73,20 @@ LL | mem_discriminant_but_in_a_macro!(&rro);
8573
| in this macro invocation
8674

8775
error: calling `mem::discriminant` on non-enum type `&&&&&std::option::Option<i32>`
88-
--> $DIR/mem_discriminant.rs:36:5
76+
--> $DIR/mem_discriminant.rs:34:5
8977
|
9078
LL | mem::discriminant(&rrrrro);
9179
| ^^^^^^^^^^^^^^^^^^-------^
9280
| |
9381
| help: try dereferencing: `****rrrrro`
9482

9583
error: calling `mem::discriminant` on non-enum type `&&&std::option::Option<i32>`
96-
--> $DIR/mem_discriminant.rs:37:5
84+
--> $DIR/mem_discriminant.rs:35:5
9785
|
9886
LL | mem::discriminant(*rrrrro);
9987
| ^^^^^^^^^^^^^^^^^^-------^
10088
| |
10189
| help: try dereferencing: `****rrrrro`
10290

103-
error: aborting due to 12 previous errors
91+
error: aborting due to 10 previous errors
10492

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#![deny(clippy::mem_discriminant_non_enum)]
2+
3+
use std::mem;
4+
5+
enum Foo {
6+
One(usize),
7+
Two(u8),
8+
}
9+
10+
struct A(Foo);
11+
12+
fn main() {
13+
// bad
14+
mem::discriminant(&"hello");
15+
mem::discriminant(&A(Foo::One(0)));
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
error: calling `mem::discriminant` on non-enum type `&str`
2+
--> $DIR/mem_discriminant_unfixable.rs:14:5
3+
|
4+
LL | mem::discriminant(&"hello");
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
6+
|
7+
note: lint level defined here
8+
--> $DIR/mem_discriminant_unfixable.rs:1:9
9+
|
10+
LL | #![deny(clippy::mem_discriminant_non_enum)]
11+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12+
13+
error: calling `mem::discriminant` on non-enum type `A`
14+
--> $DIR/mem_discriminant_unfixable.rs:15:5
15+
|
16+
LL | mem::discriminant(&A(Foo::One(0)));
17+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18+
19+
error: aborting due to 2 previous errors
20+

0 commit comments

Comments
 (0)