forked from python/mypy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdump-ast.py
executable file
·55 lines (45 loc) · 1.46 KB
/
dump-ast.py
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
48
49
50
51
52
53
54
55
#!/usr/bin/env python3
"""
Parse source files and print the abstract syntax trees.
"""
from typing import Tuple
import sys
import argparse
from mypy.errors import CompileError
from mypy.options import Options
from mypy import defaults
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('--py2', action='store_true', help='parse FILEs as Python 2')
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()
if args.py2:
pyversion = defaults.PYTHON2_VERSION
else:
pyversion = defaults.PYTHON3_VERSION
status = 0
for fname in args.FILE:
try:
dump(fname, pyversion, 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()