]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/pattern_type_mismatch/pattern_tuples.rs
Rollup merge of #78769 - est31:remove_lifetimes, r=KodrAus
[rust.git] / src / tools / clippy / tests / ui / pattern_type_mismatch / pattern_tuples.rs
1 #![allow(clippy::all)]
2 #![warn(clippy::pattern_type_mismatch)]
3
4 fn main() {}
5
6 fn tuple_types() {
7     struct TupleStruct<'a>(&'a Option<i32>);
8     let ref_value = &TupleStruct(&Some(42));
9
10     // not ok
11     let TupleStruct(_) = ref_value;
12     if let &TupleStruct(Some(_)) = ref_value {}
13     if let TupleStruct(Some(_)) = *ref_value {}
14
15     // ok
16     let &TupleStruct(_) = ref_value;
17     let TupleStruct(_) = *ref_value;
18     if let &TupleStruct(&Some(_)) = ref_value {}
19     if let TupleStruct(&Some(_)) = *ref_value {}
20 }
21
22 fn tuple_enum_variants() {
23     enum TupleEnum<'a> {
24         Empty,
25         Var(&'a Option<i32>),
26     }
27     let ref_value = &TupleEnum::Var(&Some(42));
28
29     // not ok
30     if let TupleEnum::Var(_) = ref_value {}
31     if let &TupleEnum::Var(Some(_)) = ref_value {}
32     if let TupleEnum::Var(Some(_)) = *ref_value {}
33     if let TupleEnum::Empty = ref_value {}
34
35     // ok
36     if let &TupleEnum::Var(_) = ref_value {}
37     if let TupleEnum::Var(_) = *ref_value {}
38     if let &TupleEnum::Var(&Some(_)) = ref_value {}
39     if let TupleEnum::Var(&Some(_)) = *ref_value {}
40     if let &TupleEnum::Empty = ref_value {}
41     if let TupleEnum::Empty = *ref_value {}
42 }
43
44 fn plain_tuples() {
45     let ref_value = &(&Some(23), &Some(42));
46
47     // not ok
48     let (_a, _b) = ref_value;
49     if let &(_a, Some(_)) = ref_value {}
50     if let (_a, Some(_)) = *ref_value {}
51
52     // ok
53     let &(_a, _b) = ref_value;
54     let (_a, _b) = *ref_value;
55     if let &(_a, &Some(_)) = ref_value {}
56     if let (_a, &Some(_)) = *ref_value {}
57 }