From e5a9ae6cc97a7f8dbccc66c6f90dc3117b019980 Mon Sep 17 00:00:00 2001 From: bzoracler <50305397+bzoracler@users.noreply.github.com> Date: Fri, 21 Feb 2025 11:32:45 +1300 Subject: [PATCH 1/3] Restrict type of `AssignmentExpr.target` --- mypy/nodes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypy/nodes.py b/mypy/nodes.py index 6487ee4b745c..10377eec07ba 100644 --- a/mypy/nodes.py +++ b/mypy/nodes.py @@ -2075,7 +2075,7 @@ class AssignmentExpr(Expression): __match_args__ = ("target", "value") - def __init__(self, target: Expression, value: Expression) -> None: + def __init__(self, target: NameExpr, value: Expression) -> None: super().__init__() self.target = target self.value = value From e18d83ab29b859bc9ef54e98308f1f24f09ccb47 Mon Sep 17 00:00:00 2001 From: bzoracler <50305397+bzoracler@users.noreply.github.com> Date: Fri, 21 Feb 2025 11:50:10 +1300 Subject: [PATCH 2/3] Restrict type of `AssignmentExpr.target` to `NameExpr` --- mypy/treetransform.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mypy/treetransform.py b/mypy/treetransform.py index 3e5a7ef3f2ca..5d9eb0766a81 100644 --- a/mypy/treetransform.py +++ b/mypy/treetransform.py @@ -559,7 +559,9 @@ def visit_super_expr(self, node: SuperExpr) -> SuperExpr: return new def visit_assignment_expr(self, node: AssignmentExpr) -> AssignmentExpr: - return AssignmentExpr(self.expr(node.target), self.expr(node.value)) + target = self.expr(node.target) + assert isinstance(target, NameExpr) + return AssignmentExpr(target, self.expr(node.value)) def visit_unary_expr(self, node: UnaryExpr) -> UnaryExpr: new = UnaryExpr(node.op, self.expr(node.expr)) From e532ccd1c6805da47b20e48ca9e1f1393f2f5fc1 Mon Sep 17 00:00:00 2001 From: bzoracler <50305397+bzoracler@users.noreply.github.com> Date: Thu, 6 Mar 2025 22:11:22 +1300 Subject: [PATCH 3/3] Switch to type-preserving `Name` copying method --- mypy/treetransform.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mypy/treetransform.py b/mypy/treetransform.py index 5d9eb0766a81..0abf98a52336 100644 --- a/mypy/treetransform.py +++ b/mypy/treetransform.py @@ -559,9 +559,7 @@ def visit_super_expr(self, node: SuperExpr) -> SuperExpr: return new def visit_assignment_expr(self, node: AssignmentExpr) -> AssignmentExpr: - target = self.expr(node.target) - assert isinstance(target, NameExpr) - return AssignmentExpr(target, self.expr(node.value)) + return AssignmentExpr(self.duplicate_name(node.target), self.expr(node.value)) def visit_unary_expr(self, node: UnaryExpr) -> UnaryExpr: new = UnaryExpr(node.op, self.expr(node.expr))