@@ -5022,13 +5022,12 @@ def visit_if_stmt(self, s: IfStmt) -> None:
50225022
50235023 if_map , else_map = self .find_isinstance_check (e )
50245024
5025- self ._visit_if_stmt_redundant_expr_helper (
5026- stmt = s , expr = e , body = b , if_map = if_map , else_map = else_map
5027- )
5028-
50295025 with self .binder .frame_context (can_skip = True , fall_through = 2 ):
50305026 self .push_type_map (if_map , from_assignment = False )
50315027 self .accept (b )
5028+ self ._visit_if_stmt_redundant_expr_helper (
5029+ s , e , b , if_map , else_map , self .binder .frames [- 1 ].unreachable
5030+ )
50325031
50335032 self .push_type_map (else_map , from_assignment = False )
50345033
@@ -5037,7 +5036,13 @@ def visit_if_stmt(self, s: IfStmt) -> None:
50375036 self .accept (s .else_body )
50385037
50395038 def _visit_if_stmt_redundant_expr_helper (
5040- self , stmt : IfStmt , expr : Expression , body : Block , if_map : TypeMap , else_map : TypeMap
5039+ self ,
5040+ stmt : IfStmt ,
5041+ expr : Expression ,
5042+ body : Block ,
5043+ if_map : TypeMap ,
5044+ else_map : TypeMap ,
5045+ else_reachable : bool ,
50415046 ) -> None :
50425047 """Emits `redundant-expr` errors for if statements that are always true or always false.
50435048
@@ -5066,7 +5071,7 @@ def _filter(body: Block | None) -> bool:
50665071 if stmt .while_stmt :
50675072 if not is_true_literal (expr ):
50685073 self .msg .redundant_condition_in_while (True , expr )
5069- elif not (_filter ( stmt . else_body ) or isinstance ( body . body [ 0 ], ReturnStmt )):
5074+ elif not (else_reachable or _filter ( stmt . else_body )):
50705075 self .msg .redundant_condition_in_if (True , expr )
50715076
50725077 def visit_while_stmt (self , s : WhileStmt ) -> None :
0 commit comments