Skip to content

Commit 9e45dad

Browse files
authored
Clear more data in TypeChecker.reset() instead of asserting (#19087)
Running mypy daemon on internal Dropbox codebase can cause an AssertionError: ```sh version: 1.16.0+dev.ca609acabdc94ee973a53d62b8dcb7e55c789aec Daemon crashed! Traceback (most recent call last): File "mypy/dmypy_server.py", line 237, in serve File "mypy/dmypy_server.py", line 286, in run_command File "mypy/dmypy_server.py", line 364, in cmd_check File "mypy/dmypy_server.py", line 428, in check File "mypy/dmypy_server.py", line 517, in initialize_fine_grained File "mypy/server/update.py", line 265, in update File "mypy/server/update.py", line 367, in update_one File "mypy/server/update.py", line 432, in update_module File "mypy/server/update.py", line 672, in update_module_isolated File "mypy/build.py", line 2410, in finish_passes File "mypy/build.py", line 2417, in free_state File "mypy/checker.py", line 443, in reset AssertionError ``` Let's convert these asserts in reset() to actual cleanup. I see no reason not to clean them up. It also seems safe for this particular crash, since in File "mypy/build.py", line 2417, in free_state right after this line there's `self._type_checker = None`. So even if we wer not to call reset() everything would still be correct. Alternatively, we can just reset everything by calling `__init__` with original args: ```py self.__init__(self.errors, self.modules, self.options, self.tree, self.path, self.plugin, self.expr_checker.per_line_checking_time_ns) ```
1 parent 772cd0c commit 9e45dad

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

mypy/checker.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -437,12 +437,10 @@ def reset(self) -> None:
437437
self._type_maps[0].clear()
438438
self.temp_type_map = None
439439
self.expr_checker.reset()
440-
441-
assert self.inferred_attribute_types is None
442-
assert self.partial_types == []
443-
assert self.deferred_nodes == []
444-
assert len(self.scope.stack) == 1
445-
assert self.partial_types == []
440+
self.deferred_nodes = []
441+
self.partial_types = []
442+
self.inferred_attribute_types = None
443+
self.scope = CheckerScope(self.tree)
446444

447445
def check_first_pass(self) -> None:
448446
"""Type check the entire file, but defer functions with unresolved references.

0 commit comments

Comments
 (0)