37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
|
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)
|