Transformer that can rename symbols to a simple names.
| 77 | |
| 78 | |
| 79 | class SymbolRenamer(gast.NodeTransformer): |
| 80 | """Transformer that can rename symbols to a simple names.""" |
| 81 | |
| 82 | def __init__(self, name_map): |
| 83 | self.name_map = name_map |
| 84 | |
| 85 | def _process(self, node): |
| 86 | qn = anno.getanno(node, anno.Basic.QN) |
| 87 | if qn in self.name_map: |
| 88 | new_node = gast.Name( |
| 89 | str(self.name_map[qn]), |
| 90 | ctx=node.ctx, |
| 91 | annotation=None, |
| 92 | type_comment=None) |
| 93 | # All annotations get carried over. |
| 94 | for k in anno.keys(node): |
| 95 | anno.copyanno(node, new_node, k) |
| 96 | return new_node |
| 97 | return self.generic_visit(node) |
| 98 | |
| 99 | def visit_Name(self, node): |
| 100 | return self._process(node) |
| 101 | |
| 102 | def visit_Attribute(self, node): |
| 103 | if anno.hasanno(node, anno.Basic.QN): |
| 104 | return self._process(node) |
| 105 | # Attributes of dynamic objects will not have a QN. |
| 106 | return self.generic_visit(node) |
| 107 | |
| 108 | |
| 109 | def rename_symbols(node, name_map): |