Repository: psf/black
File: src/black/parsing.py (Python)

Code before:

        raise exc from None

    if isinstance(result, Leaf):
        result = Node(syms.file_input, [result])
    return result


def matches_grammar(src_txt: str, grammar: Grammar) -> bool:
    drv = driver.Driver(grammar)
    try:
        drv.parse_string(src_txt, True)
    except (ParseError, TokenError, IndentationError):
        return False
    else:
        return True


def lib2to3_unparse(node: Node) -> str:
    """Given a lib2to3 node, return its string representation."""
    code = str(node)
    return code


def parse_single_version(
    src: str, version: Tuple[int, int], type_comments: bool
) -> Union[ast.AST, ast3.AST]:
    filename = "<unknown>"
    # typed-ast is needed because of feature version limitations in the builtin ast 3.8>
    if sys.version_info >= (3, 8) and version >= (3,):
        return ast.parse(
            src, filename, feature_version=version, type_comments=type_comments
        )

    if _IS_PYPY:
        # PyPy 3.7 doesn't support type comment tracking which is not ideal, but there's
        # not much we can do as typed-ast won't work either.
        if sys.version_info >= (3, 8):
            return ast3.parse(src, filename, type_comments=type_comments)
        else:
            return ast3.parse(src, filename)
    else:
        if type_comments:
            # Typed-ast is guaranteed to be used here and automatically tracks type
            # comments separately.
            return ast3.parse(src, filename, feature_version=version[1])
        else:
            return ast.parse(src, filename)


def parse_ast(src: str) -> Union[ast.AST, ast3.AST]:

Review comment (suggestion):
```suggestion
    src: str, version: Tuple[int, int], *, type_comments: bool
```
Let's make it keyword-only

Code after:

        raise exc from None

    if isinstance(result, Leaf):
        result = Node(syms.file_input, [result])
    return result


def matches_grammar(src_txt: str, grammar: Grammar) -> bool:
    drv = driver.Driver(grammar)
    try:
        drv.parse_string(src_txt, True)
    except (ParseError, TokenError, IndentationError):
        return False
    else:
        return True


def lib2to3_unparse(node: Node) -> str:
    """Given a lib2to3 node, return its string representation."""
    code = str(node)
    return code


def parse_single_version(
    src: str, version: Tuple[int, int], *, type_comments: bool
) -> Union[ast.AST, ast3.AST]:
    filename = "<unknown>"
    # typed-ast is needed because of feature version limitations in the builtin ast 3.8>
    if sys.version_info >= (3, 8) and version >= (3,):
        return ast.parse(
            src, filename, feature_version=version, type_comments=type_comments
        )

    if _IS_PYPY:
        # PyPy 3.7 doesn't support type comment tracking which is not ideal, but there's
        # not much we can do as typed-ast won't work either.
        if sys.version_info >= (3, 8):
            return ast3.parse(src, filename, type_comments=type_comments)
        else:
            return ast3.parse(src, filename)
    else:
        if type_comments:
            # Typed-ast is guaranteed to be used here and automatically tracks type
            # comments separately.
            return ast3.parse(src, filename, feature_version=version[1])
        else:
            return ast.parse(src, filename)


def parse_ast(src: str) -> Union[ast.AST, ast3.AST]: