Skip to content

Commit 8941a4e

Browse files
authored
Consider changes to tuple_type to be a "major" difference (python#4494)
Fixes python#4480
1 parent 86f4e01 commit 8941a4e

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

mypy/server/astdiff.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,13 +306,13 @@ def snapshot_definition(node: Optional[SymbolNode],
306306
# type_vars
307307
# bases
308308
# _promote
309-
# tuple_type
310309
# typeddict_type
311310
attrs = (node.is_abstract,
312311
node.is_enum,
313312
node.fallback_to_any,
314313
node.is_named_tuple,
315314
node.is_newtype,
315+
snapshot_optional_type(node.tuple_type),
316316
[base.fullname() for base in node.mro])
317317
prefix = node.fullname()
318318
symbol_table = snapshot_symbol_table(prefix, node.names)

mypy/server/astmerge.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,14 +259,15 @@ def process_type_info(self, info: TypeInfo) -> None:
259259
# - declared_metaclass
260260
# - metaclass_type
261261
# - _promote
262-
# - tuple_type
263262
# - typeddict_type
264263
# - replaced
265264
replace_nodes_in_symbol_table(info.names, self.replacements)
266265
for i, item in enumerate(info.mro):
267266
info.mro[i] = self.fixup(info.mro[i])
268267
for i, base in enumerate(info.bases):
269268
self.fixup_type(info.bases[i])
269+
if info.tuple_type:
270+
self.fixup_type(info.tuple_type)
270271

271272
def replace_statements(self, nodes: List[Statement]) -> List[Statement]:
272273
result = []

test-data/unit/diff.test

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ N = NamedTuple('N', [('x', int), ('y', int)])
274274
M = NamedTuple('M', [('x', int), ('y', str)])
275275
[out]
276276
__main__.A
277+
__main__.N
277278
__main__.N.__init__
278279
__main__.N._asdict
279280
__main__.N._make

test-data/unit/fine-grained.test

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1563,3 +1563,39 @@ class C:
15631563
==
15641564
main:5: error: Too few arguments for "__init__" of "C"
15651565
main:6: error: Too few arguments for "D"
1566+
1567+
[case testNamedTupleUpdate]
1568+
import b
1569+
[file a.py]
1570+
from typing import NamedTuple
1571+
N = NamedTuple('N', [('x', int)])
1572+
x = N(1)
1573+
[file a.py.2]
1574+
from typing import NamedTuple
1575+
N = NamedTuple('N', [('x', str)])
1576+
x = N('hi')
1577+
[file b.py]
1578+
import a
1579+
def f(x: a.N) -> None:
1580+
pass
1581+
f(a.x)
1582+
[out]
1583+
==
1584+
1585+
[case testNamedTupleUpdate2]
1586+
import b
1587+
[file a.py]
1588+
from typing import NamedTuple
1589+
N = NamedTuple('N', [('x', int)])
1590+
x = N(1)
1591+
[file a.py.2]
1592+
from typing import NamedTuple
1593+
N = NamedTuple('N', [('y', int)])
1594+
x = N(2)
1595+
[file b.py]
1596+
import a
1597+
def f(x: a.N) -> None:
1598+
pass
1599+
f(a.x)
1600+
[out]
1601+
==

0 commit comments

Comments
 (0)