@@ -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
120137def 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