]> git.lizzy.rs Git - rust.git/blob - tests/ui/match_str_case_mismatch.rs
Fix `match_str_case_mismatch` false positives
[rust.git] / tests / ui / match_str_case_mismatch.rs
1 #![warn(clippy::match_str_case_mismatch)]
2
3 // Valid
4
5 fn as_str_match() {
6     let var = "BAR";
7
8     match var.to_ascii_lowercase().as_str() {
9         "foo" => {},
10         "bar" => {},
11         _ => {},
12     }
13 }
14
15 fn non_alphabetic() {
16     let var = "~!@#$%^&*()-_=+FOO";
17
18     match var.to_ascii_lowercase().as_str() {
19         "1234567890" => {},
20         "~!@#$%^&*()-_=+foo" => {},
21         "\n\r\t\x7F" => {},
22         _ => {},
23     }
24 }
25
26 fn unicode_cased() {
27     let var = "ВОДЫ";
28
29     match var.to_lowercase().as_str() {
30         "水" => {},
31         "νερό" => {},
32         "воды" => {},
33         "물" => {},
34         _ => {},
35     }
36 }
37
38 fn titlecase() {
39     let var = "BarDz";
40
41     match var.to_lowercase().as_str() {
42         "foolj" => {},
43         "bardz" => {},
44         _ => {},
45     }
46 }
47
48 fn no_case_equivalent() {
49     let var = "barʁ";
50
51     match var.to_uppercase().as_str() {
52         "FOOɕ" => {},
53         "BARʁ" => {},
54         _ => {},
55     }
56 }
57
58 fn addrof_unary_match() {
59     let var = "BAR";
60
61     match &*var.to_ascii_lowercase() {
62         "foo" => {},
63         "bar" => {},
64         _ => {},
65     }
66 }
67
68 fn alternating_chain() {
69     let var = "BAR";
70
71     match &*var
72         .to_ascii_lowercase()
73         .to_uppercase()
74         .to_lowercase()
75         .to_ascii_uppercase()
76     {
77         "FOO" => {},
78         "BAR" => {},
79         _ => {},
80     }
81 }
82
83 fn unrelated_method() {
84     struct Item {
85         a: String,
86     }
87
88     impl Item {
89         #[allow(clippy::wrong_self_convention)]
90         fn to_lowercase(self) -> String {
91             self.a
92         }
93     }
94
95     let item = Item { a: String::from("BAR") };
96
97     match &*item.to_lowercase() {
98         "FOO" => {},
99         "BAR" => {},
100         _ => {},
101     }
102 }
103
104 // Invalid
105
106 fn as_str_match_mismatch() {
107     let var = "BAR";
108
109     match var.to_ascii_lowercase().as_str() {
110         "foo" => {},
111         "Bar" => {},
112         _ => {},
113     }
114 }
115
116 fn non_alphabetic_mismatch() {
117     let var = "~!@#$%^&*()-_=+FOO";
118
119     match var.to_ascii_lowercase().as_str() {
120         "1234567890" => {},
121         "~!@#$%^&*()-_=+Foo" => {},
122         "\n\r\t\x7F" => {},
123         _ => {},
124     }
125 }
126
127 fn unicode_cased_mismatch() {
128     let var = "ВОДЫ";
129
130     match var.to_lowercase().as_str() {
131         "水" => {},
132         "νερό" => {},
133         "Воды" => {},
134         "물" => {},
135         _ => {},
136     }
137 }
138
139 fn titlecase_mismatch() {
140     let var = "BarDz";
141
142     match var.to_lowercase().as_str() {
143         "foolj" => {},
144         "barDz" => {},
145         _ => {},
146     }
147 }
148
149 fn no_case_equivalent_mismatch() {
150     let var = "barʁ";
151
152     match var.to_uppercase().as_str() {
153         "FOOɕ" => {},
154         "bARʁ" => {},
155         _ => {},
156     }
157 }
158
159 fn addrof_unary_match_mismatch() {
160     let var = "BAR";
161
162     match &*var.to_ascii_lowercase() {
163         "foo" => {},
164         "Bar" => {},
165         _ => {},
166     }
167 }
168
169 fn alternating_chain_mismatch() {
170     let var = "BAR";
171
172     match &*var
173         .to_ascii_lowercase()
174         .to_uppercase()
175         .to_lowercase()
176         .to_ascii_uppercase()
177     {
178         "FOO" => {},
179         "bAR" => {},
180         _ => {},
181     }
182 }
183
184 fn main() {}