| #!/usr/bin/env python3 |
| """ |
| Parse source files and print the abstract syntax trees. |
| """ |
| |
| from __future__ import annotations |
| |
| import argparse |
| import sys |
| |
| 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() |