Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions mypy/semanal_pass1.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ def visit_file(self, file: MypyFile, fnam: str, mod_id: str, options: Options) -
if last.end_line is not None:
# We are on a Python version recent enough to support end lines.
self.skipped_lines |= set(range(next_def.line, last.end_line + 1))
# To avoid running a new visitor here, let's assume nobody does
# `assert sys.platform == 'foo'; import unknown` on one line
# at top level.
file.imports = [i for i in file.imports if i.line < next_def.line]
del file.defs[i + 1 :]
break
file.skipped_lines = self.skipped_lines
Expand Down
9 changes: 9 additions & 0 deletions test-data/unit/check-incremental.test
Original file line number Diff line number Diff line change
Expand Up @@ -6886,3 +6886,12 @@ class A:
[out]
[out2]
main:3: error: Too few arguments

[case testUnreachableAfterToplevelAssertImportThirdParty]
# flags: --platform unknown
import sys
assert sys.platform == 'linux'
import does_not_exist
[builtins fixtures/ops.pyi]
[out]
[out2]
7 changes: 7 additions & 0 deletions test-data/unit/check-unreachable-code.test
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,13 @@ assert sys.platform == 'lol'
def bar() -> None: pass
[builtins fixtures/ops.pyi]

[case testUnreachableAfterToplevelAssertImportThirdParty]
# flags: --platform unknown
import sys
assert sys.platform == 'linux'
import does_not_exist
[builtins fixtures/ops.pyi]

[case testUnreachableAfterToplevelAssertNotInsideIf]
import sys
if sys.version_info[0] >= 2:
Expand Down