def _walk_fields(self, state, node, ctx):
"""
Traverses all fields of an AST node.
"""
if self._transform:
transformed = False
new_fields = {}
new_state = state
for field, value in ast.iter_fields(node):
block_context = field in _BLOCK_FIELDS and type(value) == list
new_state, new_value = self._walk_field(
new_state, value, ctx, block_context=block_context)
if self._transform:
new_fields[field] = new_value
if new_value is not value:
transformed = True
if self._transform and transformed:
return new_state, type(node)(**new_fields)
else:
return new_state, node
评论列表
文章目录