Split up if_same_then_else ui test

This commit is contained in:
Yuki Okushi 2020-01-19 15:04:41 +09:00
parent 0a7003ecf0
commit dfab83fe11
4 changed files with 279 additions and 280 deletions

View file

@ -1,14 +1,11 @@
#![warn(clippy::if_same_then_else)] #![warn(clippy::if_same_then_else)]
#![allow( #![allow(
clippy::blacklisted_name, clippy::blacklisted_name,
clippy::collapsible_if,
clippy::cognitive_complexity,
clippy::eq_op, clippy::eq_op,
clippy::needless_return,
clippy::never_loop, clippy::never_loop,
clippy::no_effect, clippy::no_effect,
clippy::zero_divided_by_zero, clippy::unused_unit,
clippy::unused_unit clippy::zero_divided_by_zero
)] )]
struct Foo { struct Foo {
@ -19,7 +16,7 @@ fn foo() -> bool {
unimplemented!() unimplemented!()
} }
fn if_same_then_else() -> Result<&'static str, ()> { fn if_same_then_else() {
if true { if true {
Foo { bar: 42 }; Foo { bar: 42 };
0..10; 0..10;
@ -94,27 +91,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
42 42
}; };
if true {
for _ in &[42] {
let foo: &Option<_> = &Some::<u8>(42);
if true {
break;
} else {
continue;
}
}
} else {
//~ ERROR same body as `if` block
for _ in &[42] {
let foo: &Option<_> = &Some::<u8>(42);
if true {
break;
} else {
continue;
}
}
}
if true { if true {
let bar = if true { 42 } else { 43 }; let bar = if true { 42 } else { 43 };
@ -149,113 +125,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
_ => 4, _ => 4,
}; };
} }
if true {
if let Some(a) = Some(42) {}
} else {
//~ ERROR same body as `if` block
if let Some(a) = Some(42) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
//~ ERROR same body as `if` block
if let (1, .., 3) = (1, 2, 3) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
if let (.., 3) = (1, 2, 3) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
if let (.., 4) = (1, 2, 3) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
if let (.., 1, 3) = (1, 2, 3) {}
}
if true {
if let Some(42) = None {}
} else {
if let Option::Some(42) = None {}
}
if true {
if let Some(42) = None::<u8> {}
} else {
if let Some(42) = None {}
}
if true {
if let Some(42) = None::<u8> {}
} else {
if let Some(42) = None::<u32> {}
}
if true {
if let Some(a) = Some(42) {}
} else {
if let Some(a) = Some(43) {}
}
// Same NaNs
let _ = if true {
std::f32::NAN
} else {
//~ ERROR same body as `if` block
std::f32::NAN
};
if true {
Ok("foo")?;
} else {
//~ ERROR same body as `if` block
Ok("foo")?;
}
if true {
let foo = "";
return Ok(&foo[0..]);
} else if false {
let foo = "bar";
return Ok(&foo[0..]);
} else {
let foo = "";
return Ok(&foo[0..]);
}
if true {
let foo = "";
return Ok(&foo[0..]);
} else if false {
let foo = "bar";
return Ok(&foo[0..]);
} else if true {
let foo = "";
return Ok(&foo[0..]);
} else {
let foo = "";
return Ok(&foo[0..]);
}
// False positive `if_same_then_else`: `let (x, y)` vs. `let (y, x)`; see issue #3559.
if true {
let foo = "";
let (x, y) = (1, 2);
return Ok(&foo[x..y]);
} else {
let foo = "";
let (y, x) = (1, 2);
return Ok(&foo[x..y]);
}
} }
// Issue #2423. This was causing an ICE. // Issue #2423. This was causing an ICE.

View file

@ -1,5 +1,5 @@
error: this `if` has identical blocks error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:31:12 --> $DIR/if_same_then_else.rs:28:12
| |
LL | } else { LL | } else {
| ____________^ | ____________^
@ -13,7 +13,7 @@ LL | | }
| |
= note: `-D clippy::if-same-then-else` implied by `-D warnings` = note: `-D clippy::if-same-then-else` implied by `-D warnings`
note: same as this note: same as this
--> $DIR/if_same_then_else.rs:23:13 --> $DIR/if_same_then_else.rs:20:13
| |
LL | if true { LL | if true {
| _____________^ | _____________^
@ -26,7 +26,7 @@ LL | | } else {
| |_____^ | |_____^
error: this `if` has identical blocks error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:69:12 --> $DIR/if_same_then_else.rs:66:12
| |
LL | } else { LL | } else {
| ____________^ | ____________^
@ -36,7 +36,7 @@ LL | | };
| |_____^ | |_____^
| |
note: same as this note: same as this
--> $DIR/if_same_then_else.rs:67:21 --> $DIR/if_same_then_else.rs:64:21
| |
LL | let _ = if true { LL | let _ = if true {
| _____________________^ | _____________________^
@ -45,7 +45,7 @@ LL | | } else {
| |_____^ | |_____^
error: this `if` has identical blocks error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:76:12 --> $DIR/if_same_then_else.rs:73:12
| |
LL | } else { LL | } else {
| ____________^ | ____________^
@ -55,7 +55,7 @@ LL | | };
| |_____^ | |_____^
| |
note: same as this note: same as this
--> $DIR/if_same_then_else.rs:74:21 --> $DIR/if_same_then_else.rs:71:21
| |
LL | let _ = if true { LL | let _ = if true {
| _____________________^ | _____________________^
@ -64,7 +64,7 @@ LL | | } else {
| |_____^ | |_____^
error: this `if` has identical blocks error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:92:12 --> $DIR/if_same_then_else.rs:89:12
| |
LL | } else { LL | } else {
| ____________^ | ____________^
@ -74,7 +74,7 @@ LL | | };
| |_____^ | |_____^
| |
note: same as this note: same as this
--> $DIR/if_same_then_else.rs:90:21 --> $DIR/if_same_then_else.rs:87:21
| |
LL | let _ = if true { LL | let _ = if true {
| _____________________^ | _____________________^
@ -83,33 +83,7 @@ LL | | } else {
| |_____^ | |_____^
error: this `if` has identical blocks error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:106:12 --> $DIR/if_same_then_else.rs:101:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | for _ in &[42] {
LL | | let foo: &Option<_> = &Some::<u8>(42);
... |
LL | | }
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else.rs:97:13
|
LL | if true {
| _____________^
LL | | for _ in &[42] {
LL | | let foo: &Option<_> = &Some::<u8>(42);
LL | | if true {
... |
LL | | }
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:125:12
| |
LL | } else { LL | } else {
| ____________^ | ____________^
@ -122,7 +96,7 @@ LL | | }
| |_____^ | |_____^
| |
note: same as this note: same as this
--> $DIR/if_same_then_else.rs:118:13 --> $DIR/if_same_then_else.rs:94:13
| |
LL | if true { LL | if true {
| _____________^ | _____________^
@ -134,114 +108,5 @@ LL | | bar + 1;
LL | | } else { LL | | } else {
| |_____^ | |_____^
error: this `if` has identical blocks error: aborting due to 5 previous errors
--> $DIR/if_same_then_else.rs:155:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | if let Some(a) = Some(42) {}
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else.rs:153:13
|
LL | if true {
| _____________^
LL | | if let Some(a) = Some(42) {}
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:162:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | if let (1, .., 3) = (1, 2, 3) {}
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else.rs:160:13
|
LL | if true {
| _____________^
LL | | if let (1, .., 3) = (1, 2, 3) {}
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:212:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | std::f32::NAN
LL | | };
| |_____^
|
note: same as this
--> $DIR/if_same_then_else.rs:210:21
|
LL | let _ = if true {
| _____________________^
LL | | std::f32::NAN
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:219:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | Ok("foo")?;
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else.rs:217:13
|
LL | if true {
| _____________^
LL | | Ok("foo")?;
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else.rs:244:12
|
LL | } else {
| ____________^
LL | | let foo = "";
LL | | return Ok(&foo[0..]);
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else.rs:241:20
|
LL | } else if true {
| ____________________^
LL | | let foo = "";
LL | | return Ok(&foo[0..]);
LL | | } else {
| |_____^
error: this `if` has the same condition as a previous `if`
--> $DIR/if_same_then_else.rs:241:15
|
LL | } else if true {
| ^^^^
|
= note: `#[deny(clippy::ifs_same_cond)]` on by default
note: same as this
--> $DIR/if_same_then_else.rs:235:8
|
LL | if true {
| ^^^^
error: aborting due to 12 previous errors

View file

@ -0,0 +1,140 @@
#![warn(clippy::if_same_then_else)]
#![allow(
clippy::blacklisted_name,
clippy::cognitive_complexity,
clippy::collapsible_if,
clippy::ifs_same_cond,
clippy::needless_return
)]
fn if_same_then_else2() -> Result<&'static str, ()> {
if true {
for _ in &[42] {
let foo: &Option<_> = &Some::<u8>(42);
if true {
break;
} else {
continue;
}
}
} else {
//~ ERROR same body as `if` block
for _ in &[42] {
let foo: &Option<_> = &Some::<u8>(42);
if true {
break;
} else {
continue;
}
}
}
if true {
if let Some(a) = Some(42) {}
} else {
//~ ERROR same body as `if` block
if let Some(a) = Some(42) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
//~ ERROR same body as `if` block
if let (1, .., 3) = (1, 2, 3) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
if let (.., 3) = (1, 2, 3) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
if let (.., 4) = (1, 2, 3) {}
}
if true {
if let (1, .., 3) = (1, 2, 3) {}
} else {
if let (.., 1, 3) = (1, 2, 3) {}
}
if true {
if let Some(42) = None {}
} else {
if let Option::Some(42) = None {}
}
if true {
if let Some(42) = None::<u8> {}
} else {
if let Some(42) = None {}
}
if true {
if let Some(42) = None::<u8> {}
} else {
if let Some(42) = None::<u32> {}
}
if true {
if let Some(a) = Some(42) {}
} else {
if let Some(a) = Some(43) {}
}
// Same NaNs
let _ = if true {
std::f32::NAN
} else {
//~ ERROR same body as `if` block
std::f32::NAN
};
if true {
Ok("foo")?;
} else {
//~ ERROR same body as `if` block
Ok("foo")?;
}
if true {
let foo = "";
return Ok(&foo[0..]);
} else if false {
let foo = "bar";
return Ok(&foo[0..]);
} else {
let foo = "";
return Ok(&foo[0..]);
}
if true {
let foo = "";
return Ok(&foo[0..]);
} else if false {
let foo = "bar";
return Ok(&foo[0..]);
} else if true {
let foo = "";
return Ok(&foo[0..]);
} else {
let foo = "";
return Ok(&foo[0..]);
}
// False positive `if_same_then_else`: `let (x, y)` vs. `let (y, x)`; see issue #3559.
if true {
let foo = "";
let (x, y) = (1, 2);
return Ok(&foo[x..y]);
} else {
let foo = "";
let (y, x) = (1, 2);
return Ok(&foo[x..y]);
}
}
fn main() {}

View file

@ -0,0 +1,125 @@
error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:20:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | for _ in &[42] {
LL | | let foo: &Option<_> = &Some::<u8>(42);
... |
LL | | }
LL | | }
| |_____^
|
= note: `-D clippy::if-same-then-else` implied by `-D warnings`
note: same as this
--> $DIR/if_same_then_else2.rs:11:13
|
LL | if true {
| _____________^
LL | | for _ in &[42] {
LL | | let foo: &Option<_> = &Some::<u8>(42);
LL | | if true {
... |
LL | | }
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:34:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | if let Some(a) = Some(42) {}
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else2.rs:32:13
|
LL | if true {
| _____________^
LL | | if let Some(a) = Some(42) {}
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:41:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | if let (1, .., 3) = (1, 2, 3) {}
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else2.rs:39:13
|
LL | if true {
| _____________^
LL | | if let (1, .., 3) = (1, 2, 3) {}
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:91:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | std::f32::NAN
LL | | };
| |_____^
|
note: same as this
--> $DIR/if_same_then_else2.rs:89:21
|
LL | let _ = if true {
| _____________________^
LL | | std::f32::NAN
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:98:12
|
LL | } else {
| ____________^
LL | | //~ ERROR same body as `if` block
LL | | Ok("foo")?;
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else2.rs:96:13
|
LL | if true {
| _____________^
LL | | Ok("foo")?;
LL | | } else {
| |_____^
error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:123:12
|
LL | } else {
| ____________^
LL | | let foo = "";
LL | | return Ok(&foo[0..]);
LL | | }
| |_____^
|
note: same as this
--> $DIR/if_same_then_else2.rs:120:20
|
LL | } else if true {
| ____________________^
LL | | let foo = "";
LL | | return Ok(&foo[0..]);
LL | | } else {
| |_____^
error: aborting due to 6 previous errors