build status pre-commit.ci status
Pretty print the output of python stdlib ast.parse.
astpretty is intended to be a replacement for ast.dump.
pip install astpretty
astpretty provides two api functions:
Print a representation of the ast node.
>>> astpretty.pprint(ast.parse('if x == y: y += 4').body[0]) If( lineno=1, col_offset=0, test=Compare( lineno=1, col_offset=3, left=Name(lineno=1, col_offset=3, id='x', ctx=Load()), ops=[Eq()], comparators=[Name(lineno=1, col_offset=8, id='y', ctx=Load())], ), body=[ AugAssign( lineno=1, col_offset=11, target=Name(lineno=1, col_offset=11, id='y', ctx=Store()), op=Add(), value=Num(lineno=1, col_offset=16, n=4), ), ], orelse=[], )
indent allows control over the indentation string:
>>> astpretty.pprint(ast.parse('if x == y: y += 4').body[0], indent=' ') If( lineno=1, col_offset=0, test=Compare( lineno=1, col_offset=3, left=Name(lineno=1, col_offset=3, id='x', ctx=Load()), ops=[Eq()], comparators=[Name(lineno=1, col_offset=8, id='y', ctx=Load())], ), body=[ AugAssign( lineno=1, col_offset=11, target=Name(lineno=1, col_offset=11, id='y', ctx=Store()), op=Add(), value=Num(lineno=1, col_offset=16, n=4), ), ], orelse=[], )
show_offsets controls whether the output includes line / column information:
>>> astpretty.pprint(ast.parse('x += 5').body[0], show_offsets=False) AugAssign( target=Name(id='x', ctx=Store()), op=Add(), value=Num(n=5), )
Return a string representation of the ast node.
Arguments are identical to astpretty.pprint.
>>> astpretty.pformat(ast.parse('if x == y: y += 4').body[0]) "If(\n lineno=1,\n col_offset=0,\n test=Compare(\n lineno=1,\n col_offset=3,\n left=Name(lineno=1, col_offset=3, id='x', ctx=Load()),\n ops=[Eq()],\n comparators=[Name(lineno=1, col_offset=8, id='y', ctx=Load())],\n ),\n body=[\n AugAssign(\n lineno=1,\n col_offset=11,\n target=Name(lineno=1, col_offset=11, id='y', ctx=Store()),\n op=Add(),\n value=Num(lineno=1, col_offset=16, n=4),\n ),\n ],\n orelse=[],\n)"
>>> print(ast.dump(ast.parse('if x == y: y += 4').body[0])) If(test=Compare(left=Name(id='x', ctx=Load()), ops=[Eq()], comparators=[Name(id='y', ctx=Load())]), body=[AugAssign(target=Name(id='y', ctx=Store()), op=Add(), value=Num(n=4))], orelse=[])