Skip to content

Commit d5c51fc

Browse files
Support Module and other objects in ast.parse
1 parent 9c26ab1 commit d5c51fc

File tree

2 files changed

+37
-16
lines changed

2 files changed

+37
-16
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import ast
2+
from typing_extensions import assert_type
3+
4+
# Test with Module input
5+
mod1: ast.Module = ast.Module([], [])
6+
assert_type(ast.parse(mod1), ast.Module)
7+
assert_type(ast.parse(mod1, mode="exec"), ast.Module)
8+
mod2: ast.Module = ast.Module(body=[ast.Expr(value=ast.Constant(value=42))], type_ignores=[])
9+
assert_type(ast.parse(mod2), ast.Module)
10+
11+
# Test with Expression input
12+
expr1: ast.Expression = ast.Expression(body=ast.Constant(value=42))
13+
assert_type(ast.parse(expr1, mode="eval"), ast.Expression)
14+
15+
# Test with Interactive input
16+
inter1: ast.Interactive = ast.Interactive(body=[])
17+
assert_type(ast.parse(inter1, mode="single"), ast.Interactive)
18+
19+
# Test with FunctionType input
20+
func1: ast.FunctionType = ast.FunctionType(argtypes=[], returns=ast.Constant(value=None))
21+
assert_type(ast.parse(func1, mode="func_type"), ast.FunctionType)

stdlib/ast.pyi

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1746,7 +1746,7 @@ _T = _TypeVar("_T", bound=AST)
17461746
if sys.version_info >= (3, 13):
17471747
@overload
17481748
def parse(
1749-
source: str | ReadableBuffer,
1749+
source: str | ReadableBuffer | mod,
17501750
filename: str | ReadableBuffer | os.PathLike[Any] = "<unknown>",
17511751
mode: Literal["exec"] = "exec",
17521752
*,
@@ -1756,7 +1756,7 @@ if sys.version_info >= (3, 13):
17561756
) -> Module: ...
17571757
@overload
17581758
def parse(
1759-
source: str | ReadableBuffer,
1759+
source: str | ReadableBuffer | mod,
17601760
filename: str | ReadableBuffer | os.PathLike[Any],
17611761
mode: Literal["eval"],
17621762
*,
@@ -1766,7 +1766,7 @@ if sys.version_info >= (3, 13):
17661766
) -> Expression: ...
17671767
@overload
17681768
def parse(
1769-
source: str | ReadableBuffer,
1769+
source: str | ReadableBuffer | mod,
17701770
filename: str | ReadableBuffer | os.PathLike[Any],
17711771
mode: Literal["func_type"],
17721772
*,
@@ -1776,7 +1776,7 @@ if sys.version_info >= (3, 13):
17761776
) -> FunctionType: ...
17771777
@overload
17781778
def parse(
1779-
source: str | ReadableBuffer,
1779+
source: str | ReadableBuffer | mod,
17801780
filename: str | ReadableBuffer | os.PathLike[Any],
17811781
mode: Literal["single"],
17821782
*,
@@ -1786,7 +1786,7 @@ if sys.version_info >= (3, 13):
17861786
) -> Interactive: ...
17871787
@overload
17881788
def parse(
1789-
source: str | ReadableBuffer,
1789+
source: str | ReadableBuffer | mod,
17901790
*,
17911791
mode: Literal["eval"],
17921792
type_comments: bool = False,
@@ -1795,7 +1795,7 @@ if sys.version_info >= (3, 13):
17951795
) -> Expression: ...
17961796
@overload
17971797
def parse(
1798-
source: str | ReadableBuffer,
1798+
source: str | ReadableBuffer | mod,
17991799
*,
18001800
mode: Literal["func_type"],
18011801
type_comments: bool = False,
@@ -1804,7 +1804,7 @@ if sys.version_info >= (3, 13):
18041804
) -> FunctionType: ...
18051805
@overload
18061806
def parse(
1807-
source: str | ReadableBuffer,
1807+
source: str | ReadableBuffer | mod,
18081808
*,
18091809
mode: Literal["single"],
18101810
type_comments: bool = False,
@@ -1813,7 +1813,7 @@ if sys.version_info >= (3, 13):
18131813
) -> Interactive: ...
18141814
@overload
18151815
def parse(
1816-
source: str | ReadableBuffer,
1816+
source: str | ReadableBuffer | mod,
18171817
filename: str | ReadableBuffer | os.PathLike[Any] = "<unknown>",
18181818
mode: str = "exec",
18191819
*,
@@ -1825,7 +1825,7 @@ if sys.version_info >= (3, 13):
18251825
else:
18261826
@overload
18271827
def parse(
1828-
source: str | ReadableBuffer,
1828+
source: str | ReadableBuffer | mod,
18291829
filename: str | ReadableBuffer | os.PathLike[Any] = "<unknown>",
18301830
mode: Literal["exec"] = "exec",
18311831
*,
@@ -1834,7 +1834,7 @@ else:
18341834
) -> Module: ...
18351835
@overload
18361836
def parse(
1837-
source: str | ReadableBuffer,
1837+
source: str | ReadableBuffer | mod,
18381838
filename: str | ReadableBuffer | os.PathLike[Any],
18391839
mode: Literal["eval"],
18401840
*,
@@ -1843,7 +1843,7 @@ else:
18431843
) -> Expression: ...
18441844
@overload
18451845
def parse(
1846-
source: str | ReadableBuffer,
1846+
source: str | ReadableBuffer | mod,
18471847
filename: str | ReadableBuffer | os.PathLike[Any],
18481848
mode: Literal["func_type"],
18491849
*,
@@ -1852,7 +1852,7 @@ else:
18521852
) -> FunctionType: ...
18531853
@overload
18541854
def parse(
1855-
source: str | ReadableBuffer,
1855+
source: str | ReadableBuffer | mod,
18561856
filename: str | ReadableBuffer | os.PathLike[Any],
18571857
mode: Literal["single"],
18581858
*,
@@ -1861,31 +1861,31 @@ else:
18611861
) -> Interactive: ...
18621862
@overload
18631863
def parse(
1864-
source: str | ReadableBuffer,
1864+
source: str | ReadableBuffer | mod,
18651865
*,
18661866
mode: Literal["eval"],
18671867
type_comments: bool = False,
18681868
feature_version: None | int | tuple[int, int] = None,
18691869
) -> Expression: ...
18701870
@overload
18711871
def parse(
1872-
source: str | ReadableBuffer,
1872+
source: str | ReadableBuffer | mod,
18731873
*,
18741874
mode: Literal["func_type"],
18751875
type_comments: bool = False,
18761876
feature_version: None | int | tuple[int, int] = None,
18771877
) -> FunctionType: ...
18781878
@overload
18791879
def parse(
1880-
source: str | ReadableBuffer,
1880+
source: str | ReadableBuffer | mod,
18811881
*,
18821882
mode: Literal["single"],
18831883
type_comments: bool = False,
18841884
feature_version: None | int | tuple[int, int] = None,
18851885
) -> Interactive: ...
18861886
@overload
18871887
def parse(
1888-
source: str | ReadableBuffer,
1888+
source: str | ReadableBuffer | mod,
18891889
filename: str | ReadableBuffer | os.PathLike[Any] = "<unknown>",
18901890
mode: str = "exec",
18911891
*,

0 commit comments

Comments
 (0)