Skip to content

Commit 25f8f2a

Browse files
committed
disabled overlap checks in assert
1 parent f63fdb3 commit 25f8f2a

File tree

4 files changed

+14
-9
lines changed

4 files changed

+14
-9
lines changed

mypy/checker.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4725,7 +4725,10 @@ def visit_operator_assignment_stmt(self, s: OperatorAssignmentStmt) -> None:
47254725
self.check_final(s)
47264726

47274727
def visit_assert_stmt(self, s: AssertStmt) -> None:
4728-
self.expr_checker.accept(s.expr)
4728+
with self.msg.filter_errors(
4729+
filter_errors=lambda name, info: info.code == codes.COMPARISON_OVERLAP,
4730+
):
4731+
self.expr_checker.accept(s.expr)
47294732

47304733
if isinstance(s.expr, TupleExpr) and len(s.expr.items) > 0:
47314734
self.fail(message_registry.MALFORMED_ASSERT, s)
@@ -4735,6 +4738,8 @@ def visit_assert_stmt(self, s: AssertStmt) -> None:
47354738
if s.msg is not None:
47364739
self.expr_checker.analyze_cond_branch(else_map, s.msg, None)
47374740
self.push_type_map(true_map)
4741+
if not true_map:
4742+
self.binder.suppress_unreachable_warnings()
47384743

47394744
def visit_raise_stmt(self, s: RaiseStmt) -> None:
47404745
"""Type check a raise statement."""

test-data/unit/check-expressions.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2388,7 +2388,7 @@ assert a == b
23882388

23892389
R2 = Dict[int, R2]
23902390
c: R2
2391-
assert a == c # E: Non-overlapping equality check (left operand type: "Dict[str, R]", right operand type: "Dict[int, R2]")
2391+
assert a == c
23922392
[builtins fixtures/dict.pyi]
23932393
[typing fixtures/typing-full.pyi]
23942394

test-data/unit/check-narrowing.test

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -727,8 +727,8 @@ def test2(switch: FlipFlopEnum) -> None:
727727

728728
switch.mutate()
729729

730-
assert switch.state == State.B # E: Non-overlapping equality check (left operand type: "Literal[State.A]", right operand type: "Literal[State.B]")
731-
reveal_type(switch.state) # E: Statement is unreachable
730+
assert switch.state == State.B
731+
reveal_type(switch.state)
732732

733733
def test3(switch: FlipFlopEnum) -> None:
734734
# Same thing, but using 'is' comparisons. Previously mypy's behaviour differed
@@ -739,8 +739,8 @@ def test3(switch: FlipFlopEnum) -> None:
739739

740740
switch.mutate()
741741

742-
assert switch.state is State.B # E: Non-overlapping identity check (left operand type: "Literal[State.A]", right operand type: "Literal[State.B]")
743-
reveal_type(switch.state) # E: Statement is unreachable
742+
assert switch.state is State.B
743+
reveal_type(switch.state)
744744
[builtins fixtures/primitives.pyi]
745745

746746
[case testNarrowingEqualityRequiresExplicitStrLiteral]

test-data/unit/check-unreachable-code.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ else:
733733
def foo(c: int) -> None:
734734
reveal_type(c) # N: Revealed type is "builtins.int"
735735
assert not isinstance(c, int)
736-
reveal_type(c) # E: Statement is unreachable
736+
reveal_type(c)
737737
[builtins fixtures/isinstancelist.pyi]
738738

739739
[case testUnreachableFlagWithBadControlFlow4]
@@ -1338,7 +1338,7 @@ def test_typed_fn(obj) -> None:
13381338
obj.reload()
13391339

13401340
assert obj.prop is False
1341-
reveal_type(obj.prop) # E: Statement is unreachable
1341+
reveal_type(obj.prop)
13421342

13431343
[case testUnreachableCheckedUntypedFunction]
13441344
# flags: --warn-unreachable --check-untyped-defs
@@ -1350,7 +1350,7 @@ def test_untyped_fn(obj):
13501350
obj.reload()
13511351

13521352
assert obj.prop is False
1353-
reveal_type(obj.prop) # E: Statement is unreachable
1353+
reveal_type(obj.prop)
13541354

13551355
[case testConditionalTypeVarException]
13561356
# every part of this test case was necessary to trigger the crash

0 commit comments

Comments
 (0)