@@ -401,66 +401,60 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
401401                } 
402402                let  typeck = self . infcx . tcx . typeck ( self . mir_def_id ( ) ) ; 
403403                let  hir_id = hir. parent_id ( expr. hir_id ) ; 
404-                 if  let  Some ( parent)  = self . infcx . tcx . opt_hir_node ( hir_id)  { 
405-                     let  ( def_id,  args,  offset)  = if  let  hir:: Node :: Expr ( parent_expr)  = parent
406-                         && let  hir:: ExprKind :: MethodCall ( _,  _,  args,  _)  = parent_expr. kind 
407-                         && let  Some ( def_id)  = typeck. type_dependent_def_id ( parent_expr. hir_id ) 
408-                     { 
409-                         ( def_id. as_local ( ) ,  args,  1 ) 
410-                     }  else  if  let  hir:: Node :: Expr ( parent_expr)  = parent
411-                         && let  hir:: ExprKind :: Call ( call,  args)  = parent_expr. kind 
412-                         && let  ty:: FnDef ( def_id,  _)  = typeck. node_type ( call. hir_id ) . kind ( ) 
413-                     { 
414-                         ( def_id. as_local ( ) ,  args,  0 ) 
415-                     }  else  { 
416-                         ( None ,  & [ ] [ ..] ,  0 ) 
404+                 let  parent = self . infcx . tcx . hir_node ( hir_id) ; 
405+                 let  ( def_id,  args,  offset)  = if  let  hir:: Node :: Expr ( parent_expr)  = parent
406+                     && let  hir:: ExprKind :: MethodCall ( _,  _,  args,  _)  = parent_expr. kind 
407+                     && let  Some ( def_id)  = typeck. type_dependent_def_id ( parent_expr. hir_id ) 
408+                 { 
409+                     ( def_id. as_local ( ) ,  args,  1 ) 
410+                 }  else  if  let  hir:: Node :: Expr ( parent_expr)  = parent
411+                     && let  hir:: ExprKind :: Call ( call,  args)  = parent_expr. kind 
412+                     && let  ty:: FnDef ( def_id,  _)  = typeck. node_type ( call. hir_id ) . kind ( ) 
413+                 { 
414+                     ( def_id. as_local ( ) ,  args,  0 ) 
415+                 }  else  { 
416+                     ( None ,  & [ ] [ ..] ,  0 ) 
417+                 } ; 
418+                 if  let  Some ( def_id)  = def_id
419+                     && let  node =
420+                         self . infcx . tcx . hir_node ( self . infcx . tcx . local_def_id_to_hir_id ( def_id) ) 
421+                     && let  Some ( fn_sig)  = node. fn_sig ( ) 
422+                     && let  Some ( ident)  = node. ident ( ) 
423+                     && let  Some ( pos)  = args. iter ( ) . position ( |arg| arg. hir_id  == expr. hir_id ) 
424+                     && let  Some ( arg)  = fn_sig. decl . inputs . get ( pos + offset) 
425+                 { 
426+                     let  mut  span:  MultiSpan  = arg. span . into ( ) ; 
427+                     span. push_span_label ( 
428+                         arg. span , 
429+                         "this parameter takes ownership of the value" . to_string ( ) , 
430+                     ) ; 
431+                     let  descr = match  node. fn_kind ( )  { 
432+                         Some ( hir:: intravisit:: FnKind :: ItemFn ( ..) )  | None  => "function" , 
433+                         Some ( hir:: intravisit:: FnKind :: Method ( ..) )  => "method" , 
434+                         Some ( hir:: intravisit:: FnKind :: Closure )  => "closure" , 
417435                    } ; 
418-                     if  let  Some ( def_id)  = def_id
419-                         && let  Some ( node)  = self 
420-                             . infcx 
421-                             . tcx 
422-                             . opt_hir_node ( self . infcx . tcx . local_def_id_to_hir_id ( def_id) ) 
423-                         && let  Some ( fn_sig)  = node. fn_sig ( ) 
424-                         && let  Some ( ident)  = node. ident ( ) 
425-                         && let  Some ( pos)  = args. iter ( ) . position ( |arg| arg. hir_id  == expr. hir_id ) 
426-                         && let  Some ( arg)  = fn_sig. decl . inputs . get ( pos + offset) 
427-                     { 
428-                         let  mut  span:  MultiSpan  = arg. span . into ( ) ; 
429-                         span. push_span_label ( 
430-                             arg. span , 
431-                             "this parameter takes ownership of the value" . to_string ( ) , 
432-                         ) ; 
433-                         let  descr = match  node. fn_kind ( )  { 
434-                             Some ( hir:: intravisit:: FnKind :: ItemFn ( ..) )  | None  => "function" , 
435-                             Some ( hir:: intravisit:: FnKind :: Method ( ..) )  => "method" , 
436-                             Some ( hir:: intravisit:: FnKind :: Closure )  => "closure" , 
437-                         } ; 
438-                         span. push_span_label ( ident. span ,  format ! ( "in this {descr}" ) ) ; 
439-                         err. span_note ( 
440-                             span, 
441-                             format ! ( 
442-                                 "consider changing this parameter type in {descr} `{ident}` to \  
436+                     span. push_span_label ( ident. span ,  format ! ( "in this {descr}" ) ) ; 
437+                     err. span_note ( 
438+                         span, 
439+                         format ! ( 
440+                             "consider changing this parameter type in {descr} `{ident}` to \  
443441                                  borrow instead if owning the value isn't necessary", 
444-                             ) , 
445-                         ) ; 
446-                     } 
447-                     let  place = & self . move_data . move_paths [ mpi] . place ; 
448-                     let  ty = place. ty ( self . body ,  self . infcx . tcx ) . ty ; 
449-                     if  let  hir:: Node :: Expr ( parent_expr)  = parent
450-                         && let  hir:: ExprKind :: Call ( call_expr,  _)  = parent_expr. kind 
451-                         && let  hir:: ExprKind :: Path ( hir:: QPath :: LangItem ( 
452-                             LangItem :: IntoIterIntoIter , 
453-                             _, 
454-                         ) )  = call_expr. kind 
455-                     { 
456-                         // Do not suggest `.clone()` in a `for` loop, we already suggest borrowing. 
457-                     }  else  if  let  UseSpans :: FnSelfUse  {  kind :  CallKind :: Normal  {  .. } ,  .. }  =
458-                         move_spans
459-                     { 
460-                         // We already suggest cloning for these cases in `explain_captures`. 
461-                     }  else  { 
462-                         self . suggest_cloning ( err,  ty,  expr,  move_span) ; 
463-                     } 
442+                         ) , 
443+                     ) ; 
444+                 } 
445+                 let  place = & self . move_data . move_paths [ mpi] . place ; 
446+                 let  ty = place. ty ( self . body ,  self . infcx . tcx ) . ty ; 
447+                 if  let  hir:: Node :: Expr ( parent_expr)  = parent
448+                     && let  hir:: ExprKind :: Call ( call_expr,  _)  = parent_expr. kind 
449+                     && let  hir:: ExprKind :: Path ( hir:: QPath :: LangItem ( LangItem :: IntoIterIntoIter ,  _) )  =
450+                         call_expr. kind 
451+                 { 
452+                     // Do not suggest `.clone()` in a `for` loop, we already suggest borrowing. 
453+                 }  else  if  let  UseSpans :: FnSelfUse  {  kind :  CallKind :: Normal  {  .. } ,  .. }  = move_spans
454+                 { 
455+                     // We already suggest cloning for these cases in `explain_captures`. 
456+                 }  else  { 
457+                     self . suggest_cloning ( err,  ty,  expr,  move_span) ; 
464458                } 
465459            } 
466460            if  let  Some ( pat)  = finder. pat  { 
@@ -1762,7 +1756,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
17621756                        fn_decl :  hir:: FnDecl  {  inputs,  .. } , 
17631757                        ..
17641758                    } )  = e. kind 
1765-                         && let  Some ( hir:: Node :: Expr ( body) )  = self . tcx . opt_hir_node ( body. hir_id ) 
1759+                         && let  hir:: Node :: Expr ( body)  = self . tcx . hir_node ( body. hir_id ) 
17661760                    { 
17671761                        self . suggest_arg  = "this: &Self" . to_string ( ) ; 
17681762                        if  inputs. len ( )  > 0  { 
@@ -1828,11 +1822,11 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
18281822            } 
18291823        } 
18301824
1831-         if  let  Some ( hir:: Node :: ImplItem ( hir:: ImplItem  { 
1825+         if  let  hir:: Node :: ImplItem ( hir:: ImplItem  { 
18321826            kind :  hir:: ImplItemKind :: Fn ( _fn_sig,  body_id) , 
18331827            ..
1834-         } ) )  = self . infcx . tcx . opt_hir_node ( self . mir_hir_id ( ) ) 
1835-             && let  Some ( hir:: Node :: Expr ( expr) )  = self . infcx . tcx . opt_hir_node ( body_id. hir_id ) 
1828+         } )  = self . infcx . tcx . hir_node ( self . mir_hir_id ( ) ) 
1829+             && let  hir:: Node :: Expr ( expr)  = self . infcx . tcx . hir_node ( body_id. hir_id ) 
18361830        { 
18371831            let  mut  finder = ExpressionFinder  { 
18381832                capture_span :  * capture_kind_span, 
@@ -2400,8 +2394,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
24002394                let  proper_span = proper_span. source_callsite ( ) ; 
24012395                if  let  Some ( scope)  = self . body . source_scopes . get ( source_info. scope ) 
24022396                    && let  ClearCrossCrate :: Set ( scope_data)  = & scope. local_data 
2403-                     && let  Some ( node)  = self . infcx . tcx . opt_hir_node ( scope_data. lint_root ) 
2404-                     && let  Some ( id)  = node. body_id ( ) 
2397+                     && let  Some ( id)  = self . infcx . tcx . hir_node ( scope_data. lint_root ) . body_id ( ) 
24052398                    && let  hir:: ExprKind :: Block ( block,  _)  = self . infcx . tcx . hir ( ) . body ( id) . value . kind 
24062399                { 
24072400                    for  stmt in  block. stmts  { 
0 commit comments