Skip to content

Commit

Permalink
clippy_lint: Add test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
dvermd committed Oct 16, 2020
1 parent d8ba06c commit 5bd90ed
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 10 deletions.
37 changes: 35 additions & 2 deletions tests/ui/ref_option_ref.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,41 @@
#![allow(unused)]
#![warn(clippy::ref_option_ref)]

type OptRefU32<'a> = &'a Option<&'a u32>;
type OptRef<'a, T> = &'a Option<&'a T>;
static THRESHOLD: i32 = 10;
static REF_THRESHOLD: &Option<&i32> = &Some(&THRESHOLD);
const CONST_THRESHOLD: &i32 = &10;
const REF_CONST: &Option<&i32> = &Some(&CONST_THRESHOLD);

type RefOptRefU32<'a> = &'a Option<&'a u32>;
type RefOptRef<'a, T> = &'a Option<&'a T>;

fn foo(data: &Option<&u32>) {}

fn bar(data: &u32) -> &Option<&u32> {
&None
}

struct StructRef<'a> {
data: &'a Option<&'a u32>,
}

struct StructTupleRef<'a>(u32, &'a Option<&'a u32>);

enum EnumRef<'a> {
Variant1(u32),
Variant2(&'a Option<&'a u32>),
}

trait RefOptTrait {
type A;
fn foo(&self, _: Self::A);
}

impl RefOptTrait for u32 {
type A = &'static Option<&'static Self>;

fn foo(&self, _: Self::A) {}
}

fn main() {
let x: &Option<&u32> = &None;
Expand Down
64 changes: 56 additions & 8 deletions tests/ui/ref_option_ref.stderr
Original file line number Diff line number Diff line change
@@ -1,22 +1,70 @@
error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:4:22
--> $DIR/ref_option_ref.rs:5:23
|
LL | type OptRefU32<'a> = &'a Option<&'a u32>;
| ^^^^^^^^^^^^^^^^^^^ help: try: `Option<&'a u32>`
LL | static REF_THRESHOLD: &Option<&i32> = &Some(&THRESHOLD);
| ^^^^^^^^^^^^^ help: try: `Option<&i32>`
|
= note: `-D clippy::ref-option-ref` implied by `-D warnings`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:5:22
--> $DIR/ref_option_ref.rs:7:18
|
LL | type OptRef<'a, T> = &'a Option<&'a T>;
| ^^^^^^^^^^^^^^^^^ help: try: `Option<&'a T>`
LL | const REF_CONST: &Option<&i32> = &Some(&CONST_THRESHOLD);
| ^^^^^^^^^^^^^ help: try: `Option<&i32>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:8:12
--> $DIR/ref_option_ref.rs:9:25
|
LL | type RefOptRefU32<'a> = &'a Option<&'a u32>;
| ^^^^^^^^^^^^^^^^^^^ help: try: `Option<&'a u32>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:10:25
|
LL | type RefOptRef<'a, T> = &'a Option<&'a T>;
| ^^^^^^^^^^^^^^^^^ help: try: `Option<&'a T>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:12:14
|
LL | fn foo(data: &Option<&u32>) {}
| ^^^^^^^^^^^^^ help: try: `Option<&u32>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:14:23
|
LL | fn bar(data: &u32) -> &Option<&u32> {
| ^^^^^^^^^^^^^ help: try: `Option<&u32>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:19:11
|
LL | data: &'a Option<&'a u32>,
| ^^^^^^^^^^^^^^^^^^^ help: try: `Option<&'a u32>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:22:32
|
LL | struct StructTupleRef<'a>(u32, &'a Option<&'a u32>);
| ^^^^^^^^^^^^^^^^^^^ help: try: `Option<&'a u32>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:26:14
|
LL | Variant2(&'a Option<&'a u32>),
| ^^^^^^^^^^^^^^^^^^^ help: try: `Option<&'a u32>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:35:14
|
LL | type A = &'static Option<&'static Self>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `Option<&'static Self>`

error: since & implements Copy trait, &Option<&T> can be simplifyied into Option<&T>
--> $DIR/ref_option_ref.rs:41:12
|
LL | let x: &Option<&u32> = &None;
| ^^^^^^^^^^^^^ help: try: `Option<&u32>`

error: aborting due to 3 previous errors
error: aborting due to 11 previous errors

0 comments on commit 5bd90ed

Please sign in to comment.