-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Expand file tree
/
Copy pathdump-ast.py
More file actions
executable file
·47 lines (38 loc) · 1.26 KB
/
dump-ast.py
File metadata and controls
executable file
·47 lines (38 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env python3
"""
Parse source files and print the abstract syntax trees.
"""
import argparse
import sys
from typing import Tuple
from mypy import defaults
from mypy.errors import CompileError
from mypy.options import Options
from mypy.parse import parse
def dump(fname: str, python_version: Tuple[int, int], quiet: bool = False) -> None:
options = Options()
options.python_version = python_version
with open(fname, "rb") as f:
s = f.read()
tree = parse(s, fname, None, errors=None, options=options)
if not quiet:
print(tree)
def main() -> None:
# Parse a file and dump the AST (or display errors).
parser = argparse.ArgumentParser(
description="Parse source files and print the abstract syntax tree (AST)."
)
parser.add_argument("--quiet", action="store_true", help="do not print AST")
parser.add_argument("FILE", nargs="*", help="files to parse")
args = parser.parse_args()
status = 0
for fname in args.FILE:
try:
dump(fname, defaults.PYTHON3_VERSION, args.quiet)
except CompileError as e:
for msg in e.messages:
sys.stderr.write("%s\n" % msg)
status = 1
sys.exit(status)
if __name__ == "__main__":
main()