def preprocess_nodes(self, node):
"""Run preprocessors on nodes for the visitor."""
for _, value in ast.iter_fields(node):
if isinstance(value, list):
max_idx = len(value) - 1
for idx, item in enumerate(value):
if not isinstance(item, ast.AST):
continue
if idx < max_idx:
setattr(item, 'sibling', value[idx + 1])
else:
setattr(item, 'sibling', None)
setattr(item, 'parent', node)
setattr(item, 'storage', {})
if not self.pre_visit(item, preprocess=True):
continue
self.preprocess_nodes(item)
self.post_visit(item)
elif isinstance(value, ast.AST):
setattr(value, 'sibling', None)
setattr(value, 'parent', node)
setattr(value, 'storage', {})
if not self.pre_visit(value, preprocess=True):
continue
self.preprocess_nodes(value)
self.post_visit(value)
评论列表
文章目录