Skip to content

Commit 6eba664

Browse files
committed
Start removing special cased assert False
1 parent 347039d commit 6eba664

3 files changed

Lines changed: 12 additions & 3 deletions

File tree

mypy/checker.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
from mypy.patterns import AsPattern, StarredPattern
151151
from mypy.plugin import Plugin
152152
from mypy.plugins import dataclasses as dataclasses_plugin
153+
from mypy.reachability import assert_will_always_fail
153154
from mypy.scope import Scope
154155
from mypy.semanal import is_trivial_body, refers_to_fullname, set_callable_name
155156
from mypy.semanal_enum import ENUM_BASES, ENUM_SPECIAL_PROPS
@@ -5136,7 +5137,11 @@ def visit_assert_stmt(self, s: AssertStmt) -> None:
51365137
self.expr_checker.analyze_cond_branch(
51375138
else_map, s.msg, None, suppress_unreachable_errors=False
51385139
)
5139-
self.push_type_map(true_map)
5140+
if assert_will_always_fail(s, self.options):
5141+
# TODO: move this logic into `find_isinstance_check`
5142+
self.push_type_map(None)
5143+
else:
5144+
self.push_type_map(true_map)
51405145

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

mypy/semanal_pass1.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ def visit_file(self, file: MypyFile, fnam: str, mod_id: str, options: Options) -
6666
for i, defn in enumerate(file.defs):
6767
defn.accept(self)
6868
if isinstance(defn, AssertStmt) and assert_will_always_fail(defn, options):
69+
# TODO: remove this by passing through unreachability info to semanal
70+
# for top-level definitions. (testUnreachableAfterToplevelAssertImport)
71+
6972
# We've encountered an assert that's always false,
7073
# e.g. assert sys.platform == 'lol'. Truncate the
7174
# list of statements. This mutates file.defs too.

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -795,11 +795,12 @@ main:3: error: Cannot find implementation or library stub for module named "bad"
795795
main:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
796796

797797
[case testUnreachableAfterToplevelAssertNotInsideIf]
798+
# flags: --warn-unreachable --platform unknown
798799
import sys
799800
if sys.version_info[0] >= 2:
800801
assert sys.platform == 'lol'
801-
reveal_type('') # N: Revealed type is "Literal['']?"
802-
reveal_type('') # N: Revealed type is "Literal['']?"
802+
reveal_type('') # E: Statement is unreachable
803+
reveal_type('') # E: Statement is unreachable
803804
[builtins fixtures/ops.pyi]
804805

805806
[case testUnreachableFlagWithBadControlFlow1]

0 commit comments

Comments
 (0)