Skip to content

Commit de2b9b5

Browse files
committed
Correctly set the namespace for NamedExpr targets
NamedExpr targets should not be bound in a comprehension namespace, but rather it's parent scope.
1 parent 2714b91 commit de2b9b5

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

src/python_minifier/rename/mapper.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,27 @@ def add_parent_to_comprehension(node, namespace):
112112

113113
add_parent(generator.target, namespace=node)
114114
add_parent(generator.iter, namespace=iter_namespace)
115-
iter_namespace = node
115+
116116
for if_ in generator.ifs:
117117
add_parent(if_, namespace=node)
118118

119+
iter_namespace = node
120+
121+
def namedexpr_namespace(node):
122+
"""
123+
Get the namespace for a NamedExpr target
124+
"""
125+
126+
if not isinstance(node, (ast.ListComp, ast.DictComp, ast.SetComp, ast.GeneratorExp)):
127+
return node
128+
129+
return namedexpr_namespace(node.namespace)
130+
131+
def add_parent_to_namedexpr(node):
132+
assert isinstance(node, ast.NamedExpr)
133+
134+
add_parent(node.target, namespace=namedexpr_namespace(node.namespace))
135+
add_parent(node.value, namespace=node.namespace)
119136

120137
def add_parent(node, namespace=None):
121138
"""
@@ -161,6 +178,11 @@ def add_parent(node, namespace=None):
161178
elif isinstance(node.ctx, ast.Store) and isinstance(get_parent(node), ast.AugAssign):
162179
namespace.nonlocal_names.add(node.id)
163180

181+
if isinstance(node, ast.NamedExpr):
182+
# NamedExpr is 'special'
183+
add_parent_to_namedexpr(node)
184+
return
185+
164186
for child in ast.iter_child_nodes(node):
165187
add_parent(child, namespace=namespace)
166188

0 commit comments

Comments
 (0)