#!/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, Errors 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=Errors(options), 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()