From 739a052c40c6f1b28f05a91ed5607279c35b1629 Mon Sep 17 00:00:00 2001 From: Pavel Karateev Date: Fri, 10 Dec 2021 20:22:23 +0300 Subject: [PATCH] Add more ast.parse() mode overrides (#6522) eval -> Expression func_type -> FunctionType single -> Interactive We need (simplified) to cover all cases in Python >= 3.8 - 1 case: parse(filename: str = ...) - 4 cases: parse(filename: str, mode: Literal[...]) - 4 cases: parse(*, mode: Literal[...]) --- stdlib/ast.pyi | 56 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/stdlib/ast.pyi b/stdlib/ast.pyi index 8f9865679..94d76f6cf 100644 --- a/stdlib/ast.pyi +++ b/stdlib/ast.pyi @@ -167,18 +167,66 @@ if sys.version_info >= (3, 8): @overload def parse( source: str | bytes, - filename: str | bytes = ..., - mode: str = ..., + filename: str | bytes, + mode: Literal["eval"], *, type_comments: bool = ..., feature_version: None | int | _typing.Tuple[int, int] = ..., - ) -> AST: ... + ) -> Expression: ... + @overload + def parse( + source: str | bytes, + filename: str | bytes, + mode: Literal["func_type"], + *, + type_comments: bool = ..., + feature_version: None | int | _typing.Tuple[int, int] = ..., + ) -> FunctionType: ... + @overload + def parse( + source: str | bytes, + filename: str | bytes, + mode: Literal["single"], + *, + type_comments: bool = ..., + feature_version: None | int | _typing.Tuple[int, int] = ..., + ) -> Interactive: ... + @overload + def parse( + source: str | bytes, + *, + mode: Literal["eval"], + type_comments: bool = ..., + feature_version: None | int | _typing.Tuple[int, int] = ..., + ) -> Expression: ... + @overload + def parse( + source: str | bytes, + *, + mode: Literal["func_type"], + type_comments: bool = ..., + feature_version: None | int | _typing.Tuple[int, int] = ..., + ) -> FunctionType: ... + @overload + def parse( + source: str | bytes, + *, + mode: Literal["single"], + type_comments: bool = ..., + feature_version: None | int | _typing.Tuple[int, int] = ..., + ) -> Interactive: ... else: @overload def parse(source: str | bytes, filename: str | bytes = ..., mode: Literal["exec"] = ...) -> Module: ... @overload - def parse(source: str | bytes, filename: str | bytes = ..., mode: str = ...) -> AST: ... + def parse(source: str | bytes, filename: str | bytes, mode: Literal["eval"]) -> Expression: ... + @overload + def parse(source: str | bytes, filename: str | bytes, mode: Literal["single"]) -> Interactive: ... + @overload + def parse(source: str | bytes, *, mode: Literal["eval"]) -> Expression: ... + @overload + def parse(source: str | bytes, *, mode: Literal["single"]) -> Interactive: ... if sys.version_info >= (3, 9): def unparse(ast_obj: AST) -> str: ...