@@ -167,12 +167,12 @@ fn loops() {
167167 for _ in 1 ..10 { }
168168
169169 for x // SPURIOUS: unused variable [macros not yet supported]
170- in 1 ..10 {
170+ in 1 ..10 {
171171 println ! ( "x is {}" , x) ;
172172 }
173173
174174 for x // SPURIOUS: unused variable [macros not yet supported]
175- in 1 ..10 {
175+ in 1 ..10 {
176176 assert ! ( x != 11 ) ;
177177 }
178178}
@@ -189,7 +189,14 @@ enum YesOrNo {
189189 No ,
190190}
191191
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 ( ) {
193200 let mut total: i64 = 0 ;
194201
195202 if let Some ( a) = Some ( 10 ) { // BAD: unused variable
@@ -228,18 +235,91 @@ fn if_lets() {
228235 }
229236 }
230237
231- let e = MyOption :: Some ( 80 ) ;
238+ let e = Option :: Some ( 80 ) ;
232239 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 {
233248 MyOption :: Some ( val) => { // BAD: unused variable
234249 }
235250 MyOption :: None => { }
236251 }
237252
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 {
240262 YesOrNo :: Yes => { }
241263 YesOrNo :: No => { }
242264 }
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+ }
243323}
244324
245325fn main ( ) {
@@ -249,7 +329,8 @@ fn main() {
249329 arrays ( ) ;
250330 statics ( ) ;
251331 loops ( ) ;
252- if_lets ( ) ;
332+ if_lets_matches ( ) ;
333+ shadowing ( ) ;
253334
254335 println ! ( "lets use result {}" , parameters( 1 , 2 , 3 ) ) ;
255336}
0 commit comments