@@ -806,6 +806,35 @@ impl<'a> Parser<'a> {
806806 }
807807 true
808808 } ) ;
809+
810+ struct IdentFinder {
811+ idents : Vec < Ident > ,
812+ /// If a block references one of the bindings introduced by the let pattern,
813+ /// we likely meant to use `if let`.
814+ /// This is pre-expansion, so if we encounter
815+ /// `let Some(x) = foo() { println!("{x}") }` we won't find it.
816+ references_ident : bool = false,
817+ /// If a block has a `return`, then we know with high certainty that it was
818+ /// meant to be let-else.
819+ has_return : bool = false,
820+ }
821+
822+ impl < ' a > Visitor < ' a > for IdentFinder {
823+ fn visit_ident ( & mut self , ident : & Ident ) {
824+ for i in & self . idents {
825+ if ident. name == i. name {
826+ self . references_ident = true ;
827+ }
828+ }
829+ }
830+ fn visit_expr ( & mut self , node : & ' a Expr ) {
831+ if let ExprKind :: Ret ( ..) = node. kind {
832+ self . has_return = true ;
833+ }
834+ walk_expr ( self , node) ;
835+ }
836+ }
837+
809838 // Collect all bindings in pattern and see if they appear in the block. Likely meant
810839 // to write `if let`. See if the block has a return. Likely meant to write
811840 // `let else`.
@@ -1132,30 +1161,3 @@ impl<'a> Parser<'a> {
11321161 self . mk_block ( thin_vec ! [ self . mk_stmt_err( span, guar) ] , BlockCheckMode :: Default , span)
11331162 }
11341163}
1135-
1136- struct IdentFinder {
1137- idents : Vec < Ident > ,
1138- /// If a block references one of the bindings introduced by the let pattern, we likely meant to
1139- /// use `if let`.
1140- /// This is pre-expansion, so if we encounter `let Some(x) = foo() { println!("{x}") }` we won't
1141- /// find it.
1142- references_ident : bool = false,
1143- /// If a block has a `return`, then we know with high certainty that the
1144- has_return : bool = false,
1145- }
1146-
1147- impl < ' a > Visitor < ' a > for IdentFinder {
1148- fn visit_ident ( & mut self , ident : & Ident ) {
1149- for i in & self . idents {
1150- if ident. name == i. name {
1151- self . references_ident = true ;
1152- }
1153- }
1154- }
1155- fn visit_expr ( & mut self , node : & ' a Expr ) {
1156- if let ExprKind :: Ret ( ..) = node. kind {
1157- self . has_return = true ;
1158- }
1159- walk_expr ( self , node) ;
1160- }
1161- }
0 commit comments