From 641b4cb2c666d13d528063f35a9d25c81e5a2777 Mon Sep 17 00:00:00 2001 From: Ivan Levkivskyi Date: Tue, 15 Nov 2022 21:56:10 +0000 Subject: [PATCH 1/2] Correctly process nested definitions in astmerge --- mypy/server/astmerge.py | 2 +- test-data/unit/fine-grained.test | 50 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/mypy/server/astmerge.py b/mypy/server/astmerge.py index 7a6b247c84f8..a14335acca7e 100644 --- a/mypy/server/astmerge.py +++ b/mypy/server/astmerge.py @@ -213,8 +213,8 @@ def visit_mypy_file(self, node: MypyFile) -> None: super().visit_mypy_file(node) def visit_block(self, node: Block) -> None: - super().visit_block(node) node.body = self.replace_statements(node.body) + super().visit_block(node) def visit_func_def(self, node: FuncDef) -> None: node = self.fixup(node) diff --git a/test-data/unit/fine-grained.test b/test-data/unit/fine-grained.test index 32c4ff2eecf0..9b14ea61faec 100644 --- a/test-data/unit/fine-grained.test +++ b/test-data/unit/fine-grained.test @@ -10130,3 +10130,53 @@ b.py:2: error: "int" not callable a.py:1: error: Unsupported operand types for + ("int" and "str") 1 + '' ^~ + +[case testNoNestedDefinitionCrash] +import m +[file m.py] +from typing import Any, TYPE_CHECKING + +class C: + if TYPE_CHECKING: + def __init__(self, **kw: Any): ... + +C +[file m.py.2] +from typing import Any, TYPE_CHECKING + +class C: + if TYPE_CHECKING: + def __init__(self, **kw: Any): ... + +C +# change +[builtins fixtures/dict.pyi] +[out] +== + +[case testNoNestedDefinitionCrash2] +import m +[file m.py] +from typing import Any, TYPE_CHECKING + +class C: + try: + def __init__(self, **kw: Any): ... + except: + pass + +C +[file m.py.2] +from typing import Any, TYPE_CHECKING + +class C: + try: + def __init__(self, **kw: Any): ... + except: + pass + +C +# change +[builtins fixtures/dict.pyi] +[out] +== From d7b8bb6c2111c33090b58e873ce002b0ad25c8bb Mon Sep 17 00:00:00 2001 From: Ivan Levkivskyi Date: Tue, 15 Nov 2022 21:59:11 +0000 Subject: [PATCH 2/2] Clean up test --- test-data/unit/fine-grained.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-data/unit/fine-grained.test b/test-data/unit/fine-grained.test index 9b14ea61faec..4018d1db7b58 100644 --- a/test-data/unit/fine-grained.test +++ b/test-data/unit/fine-grained.test @@ -10157,7 +10157,7 @@ C [case testNoNestedDefinitionCrash2] import m [file m.py] -from typing import Any, TYPE_CHECKING +from typing import Any class C: try: @@ -10167,7 +10167,7 @@ class C: C [file m.py.2] -from typing import Any, TYPE_CHECKING +from typing import Any class C: try: