Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/astunparse/printer.py: 24%
37 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-03 07:57 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-03 07:57 +0000
1from __future__ import unicode_literals
2import sys
3import ast
4import six
7class Printer(ast.NodeVisitor):
9 def __init__(self, file=sys.stdout, indent=" "):
10 self.indentation = 0
11 self.indent_with = indent
12 self.f = file
14 # overridden to make the API obvious
15 def visit(self, node):
16 super(Printer, self).visit(node)
18 def write(self, text):
19 self.f.write(six.text_type(text))
21 def generic_visit(self, node):
23 if isinstance(node, list):
24 nodestart = "["
25 nodeend = "]"
26 children = [("", child) for child in node]
27 else:
28 nodestart = type(node).__name__ + "("
29 nodeend = ")"
30 children = [(name + "=", value) for name, value in ast.iter_fields(node)]
32 if len(children) > 1:
33 self.indentation += 1
35 self.write(nodestart)
36 for i, pair in enumerate(children):
37 attr, child = pair
38 if len(children) > 1:
39 self.write("\n" + self.indent_with * self.indentation)
40 if isinstance(child, (ast.AST, list)):
41 self.write(attr)
42 self.visit(child)
43 else:
44 self.write(attr + repr(child))
46 if i != len(children) - 1:
47 self.write(",")
48 self.write(nodeend)
50 if len(children) > 1:
51 self.indentation -= 1