@@ -167,12 +167,12 @@ fn loops() {
167
167
for _ in 1 ..10 { }
168
168
169
169
for x // SPURIOUS: unused variable [macros not yet supported]
170
- in 1 ..10 {
170
+ in 1 ..10 {
171
171
println ! ( "x is {}" , x) ;
172
172
}
173
173
174
174
for x // SPURIOUS: unused variable [macros not yet supported]
175
- in 1 ..10 {
175
+ in 1 ..10 {
176
176
assert ! ( x != 11 ) ;
177
177
}
178
178
}
@@ -189,7 +189,14 @@ enum YesOrNo {
189
189
No ,
190
190
}
191
191
192
- fn if_lets ( ) {
192
+ use YesOrNo :: { Yes , No } ; // allows `Yes`, `No` to be accessed without qualifiers.
193
+
194
+ struct MyPoint {
195
+ x : i64 ,
196
+ y : i64 ,
197
+ }
198
+
199
+ fn if_lets_matches ( ) {
193
200
let mut total: i64 = 0 ;
194
201
195
202
if let Some ( a) = Some ( 10 ) { // BAD: unused variable
@@ -228,18 +235,91 @@ fn if_lets() {
228
235
}
229
236
}
230
237
231
- let e = MyOption :: Some ( 80 ) ;
238
+ let e = Option :: Some ( 80 ) ;
232
239
match e {
240
+ Option :: Some ( val) => { // BAD: unused variable
241
+ }
242
+ Option :: None => {
243
+ }
244
+ }
245
+
246
+ let f = MyOption :: Some ( 90 ) ;
247
+ match f {
233
248
MyOption :: Some ( val) => { // BAD: unused variable
234
249
}
235
250
MyOption :: None => { }
236
251
}
237
252
238
- let f = YesOrNo :: Yes ;
239
- match f {
253
+ let g : Result < i64 , i64 > = Ok ( 100 ) ;
254
+ match g {
255
+ Ok ( _) => {
256
+ }
257
+ Err ( num) => { } // BAD: unused variable
258
+ }
259
+
260
+ let h = YesOrNo :: Yes ;
261
+ match h {
240
262
YesOrNo :: Yes => { }
241
263
YesOrNo :: No => { }
242
264
}
265
+
266
+ let i = Yes ;
267
+ match i {
268
+ Yes => { } // SPURIOUS: unused variable 'Yes'
269
+ No => { } // SPURIOUS: unused variable 'No'
270
+ }
271
+
272
+ if let j = Yes { // BAD: unused variable
273
+ }
274
+
275
+ if let k = Yes {
276
+ match k {
277
+ _ => { }
278
+ }
279
+ }
280
+
281
+ let l = Yes ;
282
+ if let Yes = l { // SPURIOUS: unused variable 'Yes'
283
+ }
284
+
285
+ match 1 {
286
+ 1 => { }
287
+ _ => { }
288
+ }
289
+
290
+ let p1 = MyPoint { x : 1 , y : 2 } ;
291
+ match p1 {
292
+ MyPoint { x : 0 , y : 0 } => {
293
+ }
294
+ MyPoint { x : 1 , y } => { // BAD: unused variable
295
+ }
296
+ MyPoint { x : 2 , y : _ } => {
297
+ }
298
+ MyPoint { x : 3 , y : a } => { // BAD: unused variable
299
+ }
300
+ MyPoint { x : 4 , .. } => {
301
+ }
302
+ p => { // BAD: unused variable
303
+ }
304
+ }
305
+ }
306
+
307
+ fn shadowing ( ) -> i32 {
308
+ let x = 1 ; // BAD: unused value [NOT DETECTED]
309
+ let mut y: i32 ; // BAD: unused variable
310
+
311
+ {
312
+ let x = 2 ;
313
+ let mut y: i32 ;
314
+
315
+ {
316
+ let x = 3 ; // BAD: unused value [NOT DETECTED]
317
+ let mut y: i32 ; // BAD: unused variable
318
+ }
319
+
320
+ y = x;
321
+ return y;
322
+ }
243
323
}
244
324
245
325
fn main ( ) {
@@ -249,7 +329,8 @@ fn main() {
249
329
arrays ( ) ;
250
330
statics ( ) ;
251
331
loops ( ) ;
252
- if_lets ( ) ;
332
+ if_lets_matches ( ) ;
333
+ shadowing ( ) ;
253
334
254
335
println ! ( "lets use result {}" , parameters( 1 , 2 , 3 ) ) ;
255
336
}
0 commit comments