mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-01 15:50:05 +03:00
4f31ff893d
inline rest of the check try fix ci errors inline in check_let
121 lines
2.8 KiB
Rust
121 lines
2.8 KiB
Rust
// https://github.com/rust-lang/rust/issues/139369
|
|
// Test that the lint `irrefutable_let_patterns` now
|
|
// only checks single let binding.
|
|
//@ edition: 2024
|
|
//@ check-pass
|
|
|
|
use std::ops::Range;
|
|
|
|
fn main() {
|
|
let opt = Some(None..Some(1));
|
|
|
|
// test `if let`
|
|
if let first = &opt {}
|
|
//~^ WARN irrefutable `if let` pattern
|
|
|
|
if let first = &opt && let Some(second) = first {}
|
|
|
|
if let first = &opt && let (a, b) = (1, 2) {}
|
|
|
|
if let first = &opt && let None = Some(1) {}
|
|
|
|
if 4 * 2 == 0 && let first = &opt {}
|
|
|
|
if let first = &opt
|
|
&& let Some(second) = first
|
|
&& let None = second.start
|
|
&& let v = 0
|
|
{}
|
|
|
|
if let Range { start: local_start, end: _ } = (None..Some(1)) {}
|
|
//~^ WARN irrefutable `if let` pattern
|
|
|
|
if let Range { start: local_start, end: _ } = (None..Some(1))
|
|
&& let None = local_start
|
|
{}
|
|
|
|
if let (a, b, c) = (Some(1), Some(1), Some(1)) {}
|
|
//~^ WARN irrefutable `if let` pattern
|
|
|
|
if let (a, b, c) = (Some(1), Some(1), Some(1)) && let None = Some(1) {}
|
|
|
|
if let Some(ref first) = opt
|
|
&& let Range { start: local_start, end: _ } = first
|
|
&& let None = local_start
|
|
{}
|
|
|
|
// test `else if let`
|
|
if opt == Some(None..None) {
|
|
} else if let x = opt.clone().map(|_| 1) {
|
|
//~^ WARN irrefutable `if let` pattern
|
|
}
|
|
|
|
if opt == Some(None..None) {
|
|
} else if let x = opt.clone().map(|_| 1)
|
|
&& x == Some(1)
|
|
{}
|
|
|
|
if opt == Some(None..None) {
|
|
} else if opt.is_some() && let x = &opt
|
|
{}
|
|
|
|
if opt == Some(None..None) {
|
|
} else {
|
|
if let x = opt.clone().map(|_| 1) && x == Some(1)
|
|
{}
|
|
}
|
|
|
|
// test `if let guard`
|
|
match opt {
|
|
Some(ref first) if let second = first => {}
|
|
//~^ WARN irrefutable `if let` guard pattern
|
|
_ => {}
|
|
}
|
|
|
|
match opt {
|
|
Some(ref first)
|
|
if let second = first
|
|
&& let _third = second
|
|
&& let v = 4 + 4 => {}
|
|
_ => {}
|
|
}
|
|
|
|
match opt {
|
|
Some(ref first)
|
|
if let Range { start: local_start, end: _ } = first
|
|
&& let None = local_start => {}
|
|
_ => {}
|
|
}
|
|
|
|
match opt {
|
|
Some(ref first)
|
|
if let Range { start: Some(_), end: local_end } = first
|
|
&& let v = local_end
|
|
&& let w = v => {}
|
|
_ => {}
|
|
}
|
|
|
|
// test `while let`
|
|
while let first = &opt {}
|
|
//~^ WARN irrefutable `while let` pattern
|
|
|
|
while let first = &opt
|
|
&& let (a, b) = (1, 2)
|
|
{}
|
|
|
|
while let first = &opt
|
|
&& let Some(second) = first
|
|
&& let None = second.start
|
|
{}
|
|
|
|
while let Some(ref first) = opt
|
|
&& let second = first
|
|
&& let _third = second
|
|
{}
|
|
|
|
while let Some(ref first) = opt
|
|
&& let Range { start: local_start, end: _ } = first
|
|
&& let None = local_start
|
|
{}
|
|
}
|