@@ -4304,7 +4304,38 @@ impl MutVisitor for CondChecker<'_> {
43044304 mut_visit:: walk_expr ( self , e) ;
43054305 self . forbid_let_reason = forbid_let_reason;
43064306 }
4307- ExprKind :: Assign ( ref lhs, _, span) => {
4307+ ExprKind :: Assign ( ref lhs, ref rhs, span) => {
4308+ if let ExprKind :: Call ( _, _) = & lhs. kind {
4309+ fn get_path_from_rhs ( e : & Expr ) -> Option < ( u32 , & Path ) > {
4310+ fn inner ( e : & Expr , depth : u32 ) -> Option < ( u32 , & Path ) > {
4311+ match & e. kind {
4312+ ExprKind :: Binary ( _, lhs, _) => inner ( lhs, depth + 1 ) ,
4313+ ExprKind :: Path ( _, path) => Some ( ( depth, path) ) ,
4314+ _ => None ,
4315+ }
4316+ }
4317+
4318+ inner ( e, 0 )
4319+ }
4320+
4321+ if let Some ( ( depth, path) ) = get_path_from_rhs ( rhs)
4322+ && let ExprKind :: Binary ( _, _, later_rhs) = & rhs. kind
4323+ {
4324+ let expr_span = lhs. span . to ( path. span ) ;
4325+
4326+ if depth > 0 {
4327+ let guar = self . parser . dcx ( ) . emit_err ( errors:: LetChainMissingLet {
4328+ span : lhs. span ,
4329+ label_span : expr_span,
4330+ rhs_span : later_rhs. span ,
4331+ sug_span : lhs. span . shrink_to_lo ( ) ,
4332+ } ) ;
4333+
4334+ self . found_incorrect_let_chain = Some ( guar) ;
4335+ }
4336+ }
4337+ }
4338+
43084339 let forbid_let_reason = self . forbid_let_reason ;
43094340 self . forbid_let_reason = Some ( OtherForbidden ) ;
43104341 let missing_let = self . missing_let ;
0 commit comments