from typing import Union, Optional from mypy.errors import Errors from mypy.options import Options from mypy.nodes import MypyFile def parse(source: Union[str, bytes], fnam: str, module: Optional[str], errors: Optional[Errors], options: Options) -> MypyFile: """Parse a source file, without doing any semantic analysis. Return the parse tree. If errors is not provided, raise ParseError on failure. Otherwise, use the errors object to report parse errors. The python_version (major, minor) option determines the Python syntax variant. """ is_stub_file = fnam.endswith('.pyi') if options.transform_source is not None: source = options.transform_source(source) if options.python_version[0] >= 3 or is_stub_file: import mypy.fastparse return mypy.fastparse.parse(source, fnam=fnam, module=module, errors=errors, options=options) else: import mypy.fastparse2 return mypy.fastparse2.parse(source, fnam=fnam, module=module, errors=errors, options=options)