blob: c3204ce3e59391cec5df7f0641fbc0e6735afac0 [file] [edit]
[case testHello]
print("hello")
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(print)
Args(
StrExpr(hello)))))
[case testMemberExpr]
foo_bar.xyz2
[out]
MypyFile:1(
ExpressionStmt:1(
MemberExpr:1(
NameExpr(foo_bar)
xyz2)))
[case testTupleExpr]
("a", "b")
[out]
MypyFile:1(
ExpressionStmt:1(
TupleExpr:1(
StrExpr(a)
StrExpr(b))))
[case testOpExpr]
("x" + "y") * "z"
[out]
MypyFile:1(
ExpressionStmt:1(
OpExpr:1(
*
OpExpr:1(
+
StrExpr(x)
StrExpr(y))
StrExpr(z))))
[case testIntExpr]
(0, 1, 2, 203, 5345, 50123, 1234567890, 9982374892739487239847897928374897298374, 0x1950A86A20F9469CFC6C)
[out]
MypyFile:1(
ExpressionStmt:1(
TupleExpr:1(
IntExpr(0)
IntExpr(1)
IntExpr(2)
IntExpr(203)
IntExpr(5345)
IntExpr(50123)
IntExpr(1234567890)
IntExpr(9982374892739487239847897928374897298374)
IntExpr(119547037146038801333356))))
[case testAssignmentStmt]
x = 1
a, b = c = 6
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
IntExpr(1))
AssignmentStmt:2(
Lvalues(
TupleExpr:2(
NameExpr(a)
NameExpr(b))
NameExpr(c))
IntExpr(6)))
[case testOperatorAssignment]
x += 1
y -= 2
z *= 3
[out]
MypyFile:1(
OperatorAssignmentStmt:1(
+
NameExpr(x)
IntExpr(1))
OperatorAssignmentStmt:2(
-
NameExpr(y)
IntExpr(2))
OperatorAssignmentStmt:3(
*
NameExpr(z)
IntExpr(3)))
[case testIfStmt]
if x:
y
if a:
b
else:
c
[out]
MypyFile:1(
IfStmt:1(
If(
NameExpr(x))
Then(
ExpressionStmt:2(
NameExpr(y))))
IfStmt:3(
If(
NameExpr(a))
Then(
ExpressionStmt:4(
NameExpr(b)))
Else(
ExpressionStmt:6(
NameExpr(c)))))
[case testIfStmtElif]
if a:
b
elif c:
d
else:
e
[out]
MypyFile:1(
IfStmt:1(
If(
NameExpr(a))
Then(
ExpressionStmt:2(
NameExpr(b)))
Else(
IfStmt:3(
If(
NameExpr(c))
Then(
ExpressionStmt:4(
NameExpr(d)))
Else(
ExpressionStmt:6(
NameExpr(e)))))))
[case testIfStmtMultipleElif]
if 1:
2
elif 3:
4
elif 5:
6
else:
7
[out]
MypyFile:1(
IfStmt:1(
If(
IntExpr(1))
Then(
ExpressionStmt:2(
IntExpr(2)))
Else(
IfStmt:3(
If(
IntExpr(3))
Then(
ExpressionStmt:4(
IntExpr(4)))
Else(
IfStmt:5(
If(
IntExpr(5))
Then(
ExpressionStmt:6(
IntExpr(6)))
Else(
ExpressionStmt:8(
IntExpr(7)))))))))
[case testIfStmtElifNoElse]
if a:
b
elif c:
d
[out]
MypyFile:1(
IfStmt:1(
If(
NameExpr(a))
Then(
ExpressionStmt:2(
NameExpr(b)))
Else(
IfStmt:3(
If(
NameExpr(c))
Then(
ExpressionStmt:4(
NameExpr(d)))))))
[case testWhileStmt]
while a:
b
while c:
d
else:
e
[out]
MypyFile:1(
WhileStmt:1(
NameExpr(a)
Block:2(
ExpressionStmt:2(
NameExpr(b))))
WhileStmt:3(
NameExpr(c)
Block:4(
ExpressionStmt:4(
NameExpr(d)))
Else(
ExpressionStmt:6(
NameExpr(e)))))
[case testIndexExpr]
a[b]
[out]
MypyFile:1(
ExpressionStmt:1(
IndexExpr:1(
NameExpr(a)
NameExpr(b))))
[case testListAndSetExpr]
a = []
b = [1, 2]
c = {3}
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(a)
ListExpr:1())
AssignmentStmt:2(
NameExpr(b)
ListExpr:2(
IntExpr(1)
IntExpr(2)))
AssignmentStmt:3(
NameExpr(c)
SetExpr:3(
IntExpr(3))))
[case testBoolOpAnd]
a and b
a and b and c
[out]
MypyFile:1(
ExpressionStmt:1(
OpExpr:1(
and
NameExpr(a)
NameExpr(b)))
ExpressionStmt:2(
OpExpr:2(
and
OpExpr:2(
and
NameExpr(a)
NameExpr(b))
NameExpr(c))))
[case testBoolOpOr]
x or y
1 or 2 or 3
[out]
MypyFile:1(
ExpressionStmt:1(
OpExpr:1(
or
NameExpr(x)
NameExpr(y)))
ExpressionStmt:2(
OpExpr:2(
or
OpExpr:2(
or
IntExpr(1)
IntExpr(2))
IntExpr(3))))
[case testComparisonSimple]
a < b
x == y
[out]
MypyFile:1(
ExpressionStmt:1(
ComparisonExpr:1(
<
NameExpr(a)
NameExpr(b)))
ExpressionStmt:2(
ComparisonExpr:2(
==
NameExpr(x)
NameExpr(y))))
[case testComparisonChained]
a < b < c
x == y != z
[out]
MypyFile:1(
ExpressionStmt:1(
ComparisonExpr:1(
<
<
NameExpr(a)
NameExpr(b)
NameExpr(c)))
ExpressionStmt:2(
ComparisonExpr:2(
==
!=
NameExpr(x)
NameExpr(y)
NameExpr(z))))
[case testComparisonIsNotIn]
a is b
x is not y
z in w
q not in r
[out]
MypyFile:1(
ExpressionStmt:1(
ComparisonExpr:1(
is
NameExpr(a)
NameExpr(b)))
ExpressionStmt:2(
ComparisonExpr:2(
is not
NameExpr(x)
NameExpr(y)))
ExpressionStmt:3(
ComparisonExpr:3(
in
NameExpr(z)
NameExpr(w)))
ExpressionStmt:4(
ComparisonExpr:4(
not in
NameExpr(q)
NameExpr(r))))
[case testLiterals]
(None, True, False, ...)
[out]
MypyFile:1(
ExpressionStmt:1(
TupleExpr:1(
NameExpr(None)
NameExpr(True)
NameExpr(False)
Ellipsis)))
[case testSimpleFunction]
def foo():
x = 1
[out]
MypyFile:1(
FuncDef:1(
foo
Block:2(
AssignmentStmt:2(
NameExpr(x)
IntExpr(1)))))
[case testFunctionWithArgs]
def add(x, y):
return x + y
[out]
MypyFile:1(
FuncDef:1(
add
Args(
Var(x)
Var(y))
Block:2(
ReturnStmt:2(
OpExpr:2(
+
NameExpr(x)
NameExpr(y))))))
[case testFunctionWithVarArgs]
def foo(*args):
pass
[out]
MypyFile:1(
FuncDef:1(
foo
VarArg(
Var(args))
Block:2(
PassStmt:2())))
[case testFunctionWithKwargs]
def bar(**kwargs):
pass
[out]
MypyFile:1(
FuncDef:1(
bar
DictVarArg(
Var(kwargs))
Block:2(
PassStmt:2())))
[case testFunctionWithKwOnly]
def baz(x, *, y):
pass
[out]
MypyFile:1(
FuncDef:1(
baz
MaxPos(1)
Args(
Var(x)
Var(y))
Block:2(
PassStmt:2())))
[case testFunctionWithAllArgKinds]
def complex_fn(a, b, *args, c, **kwargs):
pass
[out]
MypyFile:1(
FuncDef:1(
complex_fn
MaxPos(2)
Args(
Var(a)
Var(b)
Var(c))
VarArg(
Var(args))
DictVarArg(
Var(kwargs))
Block:2(
PassStmt:2())))
[case testAsyncFunction]
async def async_foo():
pass
[out]
MypyFile:1(
FuncDef:1(
async_foo
Async
Block:2(
PassStmt:2())))
[case testFunctionWithDefaultArg]
def greet(name="World"):
pass
[out]
MypyFile:1(
FuncDef:1(
greet
Args(
default(
Var(name)
StrExpr(World)))
Block:2(
PassStmt:2())))
[case testFunctionWithMultipleDefaults]
def add(x=1, y=2):
return x
[out]
MypyFile:1(
FuncDef:1(
add
Args(
default(
Var(x)
IntExpr(1))
default(
Var(y)
IntExpr(2)))
Block:2(
ReturnStmt:2(
NameExpr(x)))))
[case testFunctionMixedDefaultsAndRegular]
def func(a, b=5, c=10):
pass
[out]
MypyFile:1(
FuncDef:1(
func
Args(
Var(a)
default(
Var(b)
IntExpr(5))
default(
Var(c)
IntExpr(10)))
Block:2(
PassStmt:2())))
[case testFunctionWithKwOnlyDefault]
def func(*, x=42):
pass
[out]
MypyFile:1(
FuncDef:1(
func
MaxPos(0)
Args(
default(
Var(x)
IntExpr(42)))
Block:2(
PassStmt:2())))
[case testCallWithKeywordArgs]
foo(x=1, y=2)
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(foo)
Args()
KwArgs(
x
IntExpr(1))
KwArgs(
y
IntExpr(2)))))
[case testCallMixedPositionalAndKeyword]
bar(1, 2, x=3, y=4)
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(bar)
Args(
IntExpr(1)
IntExpr(2))
KwArgs(
x
IntExpr(3))
KwArgs(
y
IntExpr(4)))))
[case testCallWithStarArgs]
f(1, *x, 2)
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(f)
Args(
IntExpr(1)
NameExpr(x)
IntExpr(2))
VarArg)))
[case testCallWithDictStarArgs]
f(**x)
f(1, **y)
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(f)
Args()
DictVarArg(
NameExpr(x))))
ExpressionStmt:2(
CallExpr:2(
NameExpr(f)
Args(
IntExpr(1))
DictVarArg(
NameExpr(y)))))
[case testCallWithAllArgTypes]
f(1, *x, a=2, **y)
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(f)
Args(
IntExpr(1)
NameExpr(x))
VarArg
KwArgs(
a
IntExpr(2))
DictVarArg(
NameExpr(y)))))
[case testSimpleClass]
class A:
pass
[out]
MypyFile:1(
ClassDef:1(
A
PassStmt:2()))
[case testClassWithMethod]
class Foo:
def bar(self):
return 1
[out]
MypyFile:1(
ClassDef:1(
Foo
FuncDef:2(
bar
Args(
Var(self))
Block:3(
ReturnStmt:3(
IntExpr(1))))))
[case testClassWithSingleBase]
class A(B):
pass
[out]
MypyFile:1(
ClassDef:1(
A
BaseTypeExpr(
NameExpr(B))
PassStmt:2()))
[case testClassWithMultipleBases]
class Child(Base1, Base2):
x = 1
[out]
MypyFile:1(
ClassDef:1(
Child
BaseTypeExpr(
NameExpr(Base1)
NameExpr(Base2))
AssignmentStmt:2(
NameExpr(x)
IntExpr(1))))
[case testFloatLiteral]
x = 3.14
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
FloatExpr(3.14)))
[case testUnaryExpressions]
-x
+y
~z
not w
[out]
MypyFile:1(
ExpressionStmt:1(
UnaryExpr:1(
-
NameExpr(x)))
ExpressionStmt:2(
UnaryExpr:2(
+
NameExpr(y)))
ExpressionStmt:3(
UnaryExpr:3(
~
NameExpr(z)))
ExpressionStmt:4(
UnaryExpr:4(
not
NameExpr(w))))
[case testDictionaryExpression]
{}
{1:x}
[out]
MypyFile:1(
ExpressionStmt:1(
DictExpr:1())
ExpressionStmt:2(
DictExpr:2(
IntExpr(1)
NameExpr(x))))
[case testComplexLiteral]
1j
2.5j
[out]
MypyFile:1(
ExpressionStmt:1(
ComplexExpr(1j))
ExpressionStmt:2(
ComplexExpr(2.5j)))
[case testSlices]
x[1:2]
x[:1]
x[1:]
x[:]
[out]
MypyFile:1(
ExpressionStmt:1(
IndexExpr:1(
NameExpr(x)
SliceExpr:1(
IntExpr(1)
IntExpr(2))))
ExpressionStmt:2(
IndexExpr:2(
NameExpr(x)
SliceExpr:2(
<empty>
IntExpr(1))))
ExpressionStmt:3(
IndexExpr:3(
NameExpr(x)
SliceExpr:3(
IntExpr(1)
<empty>)))
ExpressionStmt:4(
IndexExpr:4(
NameExpr(x)
SliceExpr:4(
<empty>
<empty>))))
[case testSliceWithStride]
x[1:2:3]
x[1::2]
x[:1:2]
x[::2]
[out]
MypyFile:1(
ExpressionStmt:1(
IndexExpr:1(
NameExpr(x)
SliceExpr:1(
IntExpr(1)
IntExpr(2)
IntExpr(3))))
ExpressionStmt:2(
IndexExpr:2(
NameExpr(x)
SliceExpr:2(
IntExpr(1)
<empty>
IntExpr(2))))
ExpressionStmt:3(
IndexExpr:3(
NameExpr(x)
SliceExpr:3(
<empty>
IntExpr(1)
IntExpr(2))))
ExpressionStmt:4(
IndexExpr:4(
NameExpr(x)
SliceExpr:4(
<empty>
<empty>
IntExpr(2)))))
[case testFunctionSignature]
def f() -> int:
pass
def g() -> None:
pass
def h(x: foo.bar, y, z: x.y.z):
pass
[out]
MypyFile:1(
FuncDef:1(
f
def () -> int?
Block:2(
PassStmt:2()))
FuncDef:3(
g
def () -> None?
Block:4(
PassStmt:4()))
FuncDef:5(
h
Args(
Var(x)
Var(y)
Var(z))
def (x: foo.bar?, y: Any, z: x.y.z?) -> Any
Block:6(
PassStmt:6())))
[case testFunctionSignature2]
def f(x: a[b]) -> c.d[e.f.g[h], i]:
pass
[out]
MypyFile:1(
FuncDef:1(
f
Args(
Var(x))
def (x: a?[b?]) -> c.d?[e.f.g?[h?], i?]
Block:2(
PassStmt:2())))
[case testUnionTypes]
def f(x: int | str) -> bool | None:
pass
[out]
MypyFile:1(
FuncDef:1(
f
Args(
Var(x))
def (x: int? | str?) -> bool? | None?
Block:2(
PassStmt:2())))
[case testAnnotatedAssignment]
x: int
y: str = "hello"
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
int?)
AssignmentStmt:2(
NameExpr(y)
StrExpr(hello)
str?))
[case testImportStatements]
import x
import a, b
import y as z
[out]
MypyFile:1(
Import:1(x)
Import:2(a, b)
Import:3(y : z))
[case testImportFromStatements]
from os import path
from sys import argv, exit
from typing import List as L
from . import foo
from .. import bar
from .pkg import baz
[out]
MypyFile:1(
ImportFrom:1(os, [path])
ImportFrom:2(sys, [argv, exit])
ImportFrom:3(typing, [List : L])
ImportFrom:4(., [foo])
ImportFrom:5(.., [bar])
ImportFrom:6(.pkg, [baz]))
[case testImportAllStatements]
from os import *
from . import *
from .. import *
from .pkg import *
[out]
MypyFile:1(
ImportAll:1(os)
ImportAll:2(.)
ImportAll:3(..)
ImportAll:4(.pkg))
[case testRaiseStatements]
raise
raise ValueError
raise ValueError("error message")
raise KeyError from e
[out]
MypyFile:1(
RaiseStmt:1()
RaiseStmt:2(
NameExpr(ValueError))
RaiseStmt:3(
CallExpr:3(
NameExpr(ValueError)
Args(
StrExpr(error message))))
RaiseStmt:4(
NameExpr(KeyError)
NameExpr(e)))
[case testAssertStatements]
assert x
assert x == y
assert condition, "error message"
[out]
MypyFile:1(
AssertStmt:1(
NameExpr(x))
AssertStmt:2(
ComparisonExpr:2(
==
NameExpr(x)
NameExpr(y)))
AssertStmt:3(
NameExpr(condition)
StrExpr(error message)))
[case testForStatements]
for x in items:
pass
for i, j in pairs:
x = 1
for y in range(10):
break
else:
continue
[out]
MypyFile:1(
ForStmt:1(
NameExpr(x)
NameExpr(items)
Block:2(
PassStmt:2()))
ForStmt:3(
TupleExpr:3(
NameExpr(i)
NameExpr(j))
NameExpr(pairs)
Block:4(
AssignmentStmt:4(
NameExpr(x)
IntExpr(1))))
ForStmt:5(
NameExpr(y)
CallExpr:5(
NameExpr(range)
Args(
IntExpr(10)))
Block:6(
BreakStmt:6())
Else(
ContinueStmt:8())))
[case testWithStatements]
with f:
pass
with open("file") as f:
x = 1
with a as x, b as y:
break
[out]
MypyFile:1(
WithStmt:1(
Expr(
NameExpr(f))
Block:2(
PassStmt:2()))
WithStmt:3(
Expr(
CallExpr:3(
NameExpr(open)
Args(
StrExpr(file))))
Target(
NameExpr(f))
Block:4(
AssignmentStmt:4(
NameExpr(x)
IntExpr(1))))
WithStmt:5(
Expr(
NameExpr(a))
Target(
NameExpr(x))
Expr(
NameExpr(b))
Target(
NameExpr(y))
Block:6(
BreakStmt:6())))
[case testBreakAndContinue]
while True:
break
while x:
continue
while y:
if z:
break
else:
continue
[out]
MypyFile:1(
WhileStmt:1(
NameExpr(True)
Block:2(
BreakStmt:2()))
WhileStmt:3(
NameExpr(x)
Block:4(
ContinueStmt:4()))
WhileStmt:5(
NameExpr(y)
Block:6(
IfStmt:6(
If(
NameExpr(z))
Then(
BreakStmt:7())
Else(
ContinueStmt:9())))))
[case testGeneratorExpressions]
(x for x in items)
(x * 2 for x in range(10) if x > 5)
(x + y for x in range(3) for y in range(2))
[out]
MypyFile:1(
ExpressionStmt:1(
GeneratorExpr:1(
NameExpr(x)
NameExpr(x)
NameExpr(items)))
ExpressionStmt:2(
GeneratorExpr:2(
OpExpr:2(
*
NameExpr(x)
IntExpr(2))
NameExpr(x)
CallExpr:2(
NameExpr(range)
Args(
IntExpr(10)))
ComparisonExpr:2(
>
NameExpr(x)
IntExpr(5))))
ExpressionStmt:3(
GeneratorExpr:3(
OpExpr:3(
+
NameExpr(x)
NameExpr(y))
NameExpr(x)
NameExpr(y)
CallExpr:3(
NameExpr(range)
Args(
IntExpr(3)))
CallExpr:3(
NameExpr(range)
Args(
IntExpr(2))))))
[case testYieldExpressions]
def gen():
yield
yield 1
yield from items
[out]
MypyFile:1(
FuncDef:1(
gen
Block:2(
ExpressionStmt:2(
YieldExpr:2())
ExpressionStmt:3(
YieldExpr:3(
IntExpr(1)))
ExpressionStmt:4(
YieldFromExpr:4(
NameExpr(items))))))
[case testListAndSetComprehensions]
a = [x for x in items]
b = [x * 2 for x in range(10) if x > 5]
c = {y for y in data}
d = {z + 1 for z in nums if z < 100}
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(a)
ListComprehension:1(
GeneratorExpr:1(
NameExpr(x)
NameExpr(x)
NameExpr(items))))
AssignmentStmt:2(
NameExpr(b)
ListComprehension:2(
GeneratorExpr:2(
OpExpr:2(
*
NameExpr(x)
IntExpr(2))
NameExpr(x)
CallExpr:2(
NameExpr(range)
Args(
IntExpr(10)))
ComparisonExpr:2(
>
NameExpr(x)
IntExpr(5)))))
AssignmentStmt:3(
NameExpr(c)
SetComprehension:3(
GeneratorExpr:3(
NameExpr(y)
NameExpr(y)
NameExpr(data))))
AssignmentStmt:4(
NameExpr(d)
SetComprehension:4(
GeneratorExpr:4(
OpExpr:4(
+
NameExpr(z)
IntExpr(1))
NameExpr(z)
NameExpr(nums)
ComparisonExpr:4(
<
NameExpr(z)
IntExpr(100))))))
[case testDictComprehensions]
a = {k: v for k, v in items}
b = {x: x * 2 for x in range(10) if x > 5}
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(a)
DictionaryComprehension:1(
NameExpr(k)
NameExpr(v)
TupleExpr:1(
NameExpr(k)
NameExpr(v))
NameExpr(items)))
AssignmentStmt:2(
NameExpr(b)
DictionaryComprehension:2(
NameExpr(x)
OpExpr:2(
*
NameExpr(x)
IntExpr(2))
NameExpr(x)
CallExpr:2(
NameExpr(range)
Args(
IntExpr(10)))
ComparisonExpr:2(
>
NameExpr(x)
IntExpr(5)))))
[case testDecoratedFuncDef]
@dec
def foo():
pass
class C:
@dec()
@staticmethod
def foo():
pass
[out]
MypyFile:1(
Decorator:1(
Var(foo)
NameExpr(dec)
FuncDef:2(
foo
Block:3(
PassStmt:3())))
ClassDef:4(
C
Decorator:5(
Var(foo)
CallExpr:5(
NameExpr(dec)
Args())
NameExpr(staticmethod)
FuncDef:7(
foo
Block:8(
PassStmt:8())))))
[case testTryFinally]
try:
x
finally:
y
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
Finally(
ExpressionStmt:4(
NameExpr(y)))))
[case testTryExcept]
try:
x
except Exception:
y
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
NameExpr(Exception)
Block:4(
ExpressionStmt:4(
NameExpr(y)))))
[case testTryExceptWithVar]
try:
x
except Exception as e:
y
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
NameExpr(Exception)
NameExpr(e)
Block:4(
ExpressionStmt:4(
NameExpr(y)))))
[case testTryExceptElse]
try:
x
except Exception:
y
else:
z
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
NameExpr(Exception)
Block:4(
ExpressionStmt:4(
NameExpr(y)))
Else(
ExpressionStmt:6(
NameExpr(z)))))
[case testTryMultipleExcept]
try:
x
except ValueError:
y
except KeyError as e:
z
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
NameExpr(ValueError)
Block:4(
ExpressionStmt:4(
NameExpr(y)))
NameExpr(KeyError)
NameExpr(e)
Block:6(
ExpressionStmt:6(
NameExpr(z)))))
[case testTryExceptStar]
try:
x
except* ValueError:
y
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
*
NameExpr(ValueError)
Block:4(
ExpressionStmt:4(
NameExpr(y)))))
[case testTryExceptStarWithVar]
try:
x
except* Exception as e:
y
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
*
NameExpr(Exception)
NameExpr(e)
Block:4(
ExpressionStmt:4(
NameExpr(y)))))
[case testTryMultipleExceptStar]
try:
x
except* ValueError:
y
except* KeyError as e:
z
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
*
NameExpr(ValueError)
Block:4(
ExpressionStmt:4(
NameExpr(y)))
NameExpr(KeyError)
NameExpr(e)
Block:6(
ExpressionStmt:6(
NameExpr(z)))))
[case testTryExceptStarElseFinally]
try:
x
except* ValueError:
y
else:
z
finally:
w
[out]
MypyFile:1(
TryStmt:1(
Block:2(
ExpressionStmt:2(
NameExpr(x)))
*
NameExpr(ValueError)
Block:4(
ExpressionStmt:4(
NameExpr(y)))
Else(
ExpressionStmt:6(
NameExpr(z)))
Finally(
ExpressionStmt:8(
NameExpr(w)))))
[case testConditionalExprSimple]
x if y else z
[out]
MypyFile:1(
ExpressionStmt:1(
ConditionalExpr:1(
Condition(
NameExpr(y))
NameExpr(x)
NameExpr(z))))
[case testFunctionWithCallableType]
def f(x: Callable[[int, str], None]) -> None:
pass
[out]
MypyFile:1(
FuncDef:1(
f
Args(
Var(x))
def (x: Callable?[<TypeList int?, str?>, None?]) -> None?
Block:2(
PassStmt:2())))
[case testFunctionWithEmptyCallableType]
def g(callback: Callable[[], bool]) -> int:
return 1
[out]
MypyFile:1(
FuncDef:1(
g
Args(
Var(callback))
def (callback: Callable?[<TypeList >, bool?]) -> int?
Block:2(
ReturnStmt:2(
IntExpr(1)))))
[case testFunctionWithComplexCallableType]
def h(f: Callable[[List[int], Dict[str, int]], Tuple[int, str]]) -> None:
pass
[out]
MypyFile:1(
FuncDef:1(
h
Args(
Var(f))
def (f: Callable?[<TypeList List?[int?], Dict?[str?, int?]>, Tuple?[int?, str?]]) -> None?
Block:2(
PassStmt:2())))
[case testFunctionWithEllipsisCallableType]
def f(callback: Callable[..., int]) -> None:
pass
[out]
MypyFile:1(
FuncDef:1(
f
Args(
Var(callback))
def (callback: Callable?[..., int?]) -> None?
Block:2(
PassStmt:2())))
[case testCallableWithArgConstructor]
from typing import Callable
from mypy_extensions import Arg
def f(x: Callable[[Arg(int, 'x'), Arg(str, 'y')], bool]) -> None:
pass
[out]
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(int?, x), Arg(str?, y)>, bool?]) -> None?
Block:4(
PassStmt:4())))
[case testCallableWithArgConstructorKeywordSyntax]
from typing import Callable
from mypy_extensions import Arg
def f(callback: Callable[[Arg(type=int, name='value')], str]) -> None:
pass
[out]
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(callback))
def (callback: Callable?[<TypeList Arg(int?, value)>, str?]) -> None?
Block:4(
PassStmt:4())))
[case testCallableWithArgNoName]
from typing import Callable
from mypy_extensions import Arg
def f(x: Callable[[Arg(int)], bool]) -> None:
pass
[out]
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(int?)>, bool?]) -> None?
Block:4(
PassStmt:4())))
[case testLiteralTypes]
x: Literal[True, False]
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
Literal?[True, False]))
[case testLiteralIntTypes]
x: Literal[1]
y: Literal[1, 2, 3]
z: Literal[-1]
w: Literal[-1, 0, 1]
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
Literal?[1])
AssignmentStmt:2(
NameExpr(y)
TempNode:2(
Any)
Literal?[1, 2, 3])
AssignmentStmt:3(
NameExpr(z)
TempNode:3(
Any)
Literal?[-1])
AssignmentStmt:4(
NameExpr(w)
TempNode:4(
Any)
Literal?[-1, 0, 1]))
[case testDelStmt]
del x
del x[0], y[1]
del a.b
[out]
MypyFile:1(
DelStmt:1(
NameExpr(x))
DelStmt:2(
TupleExpr:2(
IndexExpr:2(
NameExpr(x)
IntExpr(0))
IndexExpr:2(
NameExpr(y)
IntExpr(1))))
DelStmt:3(
MemberExpr:3(
NameExpr(a)
b)))
[case testFString]
f"foo {x}"
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
MemberExpr:1(
StrExpr()
join)
Args(
ListExpr:1(
StrExpr(foo )
CallExpr:1(
MemberExpr:1(
StrExpr({:{}})
format)
Args(
NameExpr(x)
StrExpr())))))))
[case testFStringWithConversion]
x = 'mypy'
F'Hello {x!r}'
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
StrExpr(mypy))
ExpressionStmt:2(
CallExpr:2(
MemberExpr:2(
StrExpr()
join)
Args(
ListExpr:2(
StrExpr(Hello )
CallExpr:2(
MemberExpr:2(
StrExpr({!r:{}})
format)
Args(
NameExpr(x)
StrExpr())))))))
[case testFStringTrivial]
f"foo"
f"{x}"
f"foo" "bar"
[out]
MypyFile:1(
ExpressionStmt:1(
StrExpr(foo))
ExpressionStmt:2(
CallExpr:2(
MemberExpr:2(
StrExpr({:{}})
format)
Args(
NameExpr(x)
StrExpr())))
ExpressionStmt:3(
StrExpr(foobar)))
[case testFStringWithOnlyFormatSpecifier]
x = 'mypy'
f'Hello {x:<30}'
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
StrExpr(mypy))
ExpressionStmt:2(
CallExpr:2(
MemberExpr:2(
StrExpr()
join)
Args(
ListExpr:2(
StrExpr(Hello )
CallExpr:2(
MemberExpr:2(
StrExpr({:{}})
format)
Args(
NameExpr(x)
StrExpr(<30))))))))
[case testFStringWithFormatSpecifierExpression]
x = 'mypy'
y = 30
f'Hello {x!s:<{y+y}}'
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
StrExpr(mypy))
AssignmentStmt:2(
NameExpr(y)
IntExpr(30))
ExpressionStmt:3(
CallExpr:3(
MemberExpr:3(
StrExpr()
join)
Args(
ListExpr:3(
StrExpr(Hello )
CallExpr:3(
MemberExpr:3(
StrExpr({!s:{}})
format)
Args(
NameExpr(x)
CallExpr:3(
MemberExpr:3(
StrExpr()
join)
Args(
ListExpr:3(
StrExpr(<)
CallExpr:3(
MemberExpr:3(
StrExpr({:{}})
format)
Args(
OpExpr:3(
+
NameExpr(y)
NameExpr(y))
StrExpr()))))))))))))
[case testSimpleLambda]
lambda: 1
[out]
MypyFile:1(
ExpressionStmt:1(
LambdaExpr:1(
Block:1(
ReturnStmt:1(
IntExpr(1))))))
[case testLambdaWithOneArg]
lambda x: y + 1
[out]
MypyFile:1(
ExpressionStmt:1(
LambdaExpr:1(
Args(
Var(x))
Block:1(
ReturnStmt:1(
OpExpr:1(
+
NameExpr(y)
IntExpr(1)))))))
[case testLambdaWithMultipleArgs]
lambda x, y: x + y
[out]
MypyFile:1(
ExpressionStmt:1(
LambdaExpr:1(
Args(
Var(x)
Var(y))
Block:1(
ReturnStmt:1(
OpExpr:1(
+
NameExpr(x)
NameExpr(y)))))))
[case testLambdaWithDefault]
lambda x=2: x
[out]
MypyFile:1(
ExpressionStmt:1(
LambdaExpr:1(
Args(
default(
Var(x)
IntExpr(2)))
Block:1(
ReturnStmt:1(
NameExpr(x))))))
[case testLambdaInCall]
map(lambda x: x * 2, items)
[out]
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(map)
Args(
LambdaExpr:1(
Args(
Var(x))
Block:1(
ReturnStmt:1(
OpExpr:1(
*
NameExpr(x)
IntExpr(2)))))
NameExpr(items)))))
[case testNamedExprSimple]
if (x := 1):
pass
[out]
MypyFile:1(
IfStmt:1(
If(
AssignmentExpr:1(
NameExpr(x)
IntExpr(1)))
Then(
PassStmt:2())))
[case testStarExpression]
*a
*a, b
a, *b
[out]
MypyFile:1(
ExpressionStmt:1(
StarExpr:1(
NameExpr(a)))
ExpressionStmt:2(
TupleExpr:2(
StarExpr:2(
NameExpr(a))
NameExpr(b)))
ExpressionStmt:3(
TupleExpr:3(
NameExpr(a)
StarExpr:3(
NameExpr(b)))))
[case testBytesLiteral]
b"foo"
b"foobar"
b"x\\n\\'"
[out]
MypyFile:1(
ExpressionStmt:1(
BytesExpr(foo))
ExpressionStmt:2(
BytesExpr(foobar))
ExpressionStmt:3(
BytesExpr(x\\n\\\')))
[case testBytesLiteralWithEscapes]
b'\r\n\t\x2f\xbe'
[out]
MypyFile:1(
ExpressionStmt:1(
BytesExpr(\r\n\t/\xbe)))
[case testBytesLiteralOctalEscapes]
b'\1\476'
[out]
MypyFile:1(
ExpressionStmt:1(
BytesExpr(\x01>)))
[case testGlobalAndNonlocal]
x = 1
y = 2
def outer():
global x
def inner():
nonlocal y
global z
y = 3
z = 4
x = 5
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
IntExpr(1))
AssignmentStmt:2(
NameExpr(y)
IntExpr(2))
FuncDef:3(
outer
Block:4(
GlobalDecl:4(
x)
FuncDef:5(
inner
Block:6(
NonlocalDecl:6(
y)
GlobalDecl:7(
z)
AssignmentStmt:8(
NameExpr(y)
IntExpr(3))
AssignmentStmt:9(
NameExpr(z)
IntExpr(4))))
AssignmentStmt:10(
NameExpr(x)
IntExpr(5)))))
[case testAwaitExpression]
async def foo():
x = await bar()
return await baz(x)
[out]
MypyFile:1(
FuncDef:1(
foo
Async
Block:2(
AssignmentStmt:2(
NameExpr(x)
AwaitExpr:2(
CallExpr:2(
NameExpr(bar)
Args())))
ReturnStmt:3(
AwaitExpr:3(
CallExpr:3(
NameExpr(baz)
Args(
NameExpr(x))))))))
[case testFunctionOverload]
@overload
def f() -> x: pass
@overload
def f() -> y: pass
[out]
MypyFile:1(
OverloadedFuncDef:1(
Decorator:1(
Var(f)
NameExpr(overload)
FuncDef:2(
f
def () -> x?
Block:2(
PassStmt:2())))
Decorator:3(
Var(f)
NameExpr(overload)
FuncDef:4(
f
def () -> y?
Block:4(
PassStmt:4())))))
[case testFunctionOverloadWithImplementation]
@overload
def f(a: x) -> x: ...
@overload
def f(a: y) -> y: ...
def f(a): pass
[out]
MypyFile:1(
OverloadedFuncDef:1(
Decorator:1(
Var(f)
NameExpr(overload)
FuncDef:2(
f
Args(
Var(a))
def (a: x?) -> x?
Block:2(
ExpressionStmt:2(
Ellipsis))))
Decorator:3(
Var(f)
NameExpr(overload)
FuncDef:4(
f
Args(
Var(a))
def (a: y?) -> y?
Block:4(
ExpressionStmt:4(
Ellipsis))))
FuncDef:5(
f
Args(
Var(a))
Block:5(
PassStmt:5()))))
[case testTypeIgnores]
x = 1 # type: ignore
y = (
2 # type: ignore # Comment
)
y = 1 # foo: ignore
z = 1 #type: ignore[x]
zz = 1 #type: ignore [ foo, arg-type ]
[out]
ignore: 1
ignore: 3
ignore: 6 [x]
ignore: 7 [foo, arg-type]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
IntExpr(1))
AssignmentStmt:2(
NameExpr(y)
IntExpr(2))
AssignmentStmt:5(
NameExpr(y)
IntExpr(1))
AssignmentStmt:6(
NameExpr(z)
IntExpr(1))
AssignmentStmt:7(
NameExpr(zz)
IntExpr(1)))
[case testMetaclass]
class Foo(metaclass=Bar): pass
[out]
MypyFile:1(
ClassDef:1(
Foo
Metaclass(NameExpr(Bar))
PassStmt:1()))
[case testClassWithKeywordArgs]
class Foo(_root=None, total=False): pass
[out]
MypyFile:1(
ClassDef:1(
Foo
Keywords(_root=NameExpr(None), total=NameExpr(False))
PassStmt:1()))
[case testClassDecorator]
@foo
class X: pass
@foo(bar)
@x.y
class Z: pass
[out]
MypyFile:1(
ClassDef:2(
X
Decorators(
NameExpr(foo))
PassStmt:2())
ClassDef:5(
Z
Decorators(
CallExpr:3(
NameExpr(foo)
Args(
NameExpr(bar)))
MemberExpr:4(
NameExpr(x)
y))
PassStmt:5()))
[case testUnpackTypeInSignature]
def f(*args: *Ts) -> None:
pass
[out]
MypyFile:1(
FuncDef:1(
f
def (*args: *Ts?) -> None?
VarArg(
Var(args))
Block:2(
PassStmt:2())))
[case testUnpackTypeInTuple]
x: tuple[int, *Ts, str]
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
tuple?[int?, *Ts?, str?]))
[case testLiteralStringType]
from typing import Literal
x: Literal["hello"]
[out]
MypyFile:1(
ImportFrom:1(typing, [Literal])
AssignmentStmt:2(
NameExpr(x)
TempNode:2(
Any)
Literal?[hello?]))
[case testLiteralStringWithEscapes]
from typing import Literal
x: Literal["hello\nworld"]
[out]
MypyFile:1(
ImportFrom:1(typing, [Literal])
AssignmentStmt:2(
NameExpr(x)
TempNode:2(
Any)
Literal?['hello\nworld']))
[case testForwardReference]
x: "int"
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
int?))
[case testForwardReferenceWithUnion]
x: "int | str"
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
int? | str?))
[case testForwardReferenceWithComplexType]
x: "list[int]"
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
list?[int?]))
[case testMultipleLiteralStrings]
from typing import Literal
x: Literal["a", "b", "c"]
[out]
MypyFile:1(
ImportFrom:1(typing, [Literal])
AssignmentStmt:2(
NameExpr(x)
TempNode:2(
Any)
Literal?[a?, b?, c?]))
[case testLiteralBytesType]
from typing import Literal
x: Literal[b"foo"]
y: Literal[b"hello\nworld", b"\x00\xff"]
[out]
MypyFile:1(
ImportFrom:1(typing, [Literal])
AssignmentStmt:2(
NameExpr(x)
TempNode:2(
Any)
Literal?[b'foo'])
AssignmentStmt:3(
NameExpr(y)
TempNode:3(
Any)
Literal?[b'hello\nworld', b'\x00\xff']))
[case testStripFunctionBodiesIfIgnoringErrors]
# mypy: ignore-errors=True
def f(self):
self.x = 1 # Cannot define an attribute
return 1
[out]
MypyFile:1(
FuncDef:2(
f
Args(
Var(self))
Block:3()))
[case testStripMethodBodiesIfIgnoringErrors]
# mypy: ignore-errors=True
class C:
def f(self):
x = self.x
for x in y:
pass
with a as y:
pass
while self.foo():
self.bah()
a[self.x] = 1
[out]
MypyFile:1(
ClassDef:2(
C
FuncDef:3(
f
Args(
Var(self))
Block:4())))
[case testDoNotStripModuleTopLevelOrClassBody]
# mypy: ignore-errors=True
f()
class C:
x = 5
[out]
MypyFile:1(
ExpressionStmt:2(
CallExpr:2(
NameExpr(f)
Args()))
ClassDef:3(
C
AssignmentStmt:4(
NameExpr(x)
IntExpr(5))))
[case testDoNotStripMethodThatAssignsToAttribute]
# mypy: ignore-errors=True
class C:
def m1(self):
self.x = 0
def m2(self):
a, self.y = 0
[out]
MypyFile:1(
ClassDef:2(
C
FuncDef:3(
m1
Args(
Var(self))
Block:4(
AssignmentStmt:4(
MemberExpr:4(
NameExpr(self)
x)
IntExpr(0))))
FuncDef:5(
m2
Args(
Var(self))
Block:6(
AssignmentStmt:6(
TupleExpr:6(
NameExpr(a)
MemberExpr:6(
NameExpr(self)
y))
IntExpr(0))))))
[case testDoNotStripMethodThatAssignsToAttributeWithinStatement]
# mypy: ignore-errors=True
class C:
def m1(self):
for x in y:
self.x = 0
def m2(self):
with x:
self.y = 0
def m3(self):
if x:
self.y = 0
else:
x = 4
[out]
MypyFile:1(
ClassDef:2(
C
FuncDef:3(
m1
Args(
Var(self))
Block:4(
ForStmt:4(
NameExpr(x)
NameExpr(y)
Block:5(
AssignmentStmt:5(
MemberExpr:5(
NameExpr(self)
x)
IntExpr(0))))))
FuncDef:6(
m2
Args(
Var(self))
Block:7(
WithStmt:7(
Expr(
NameExpr(x))
Block:8(
AssignmentStmt:8(
MemberExpr:8(
NameExpr(self)
y)
IntExpr(0))))))
FuncDef:9(
m3
Args(
Var(self))
Block:10(
IfStmt:10(
If(
NameExpr(x))
Then(
AssignmentStmt:11(
MemberExpr:11(
NameExpr(self)
y)
IntExpr(0)))
Else(
AssignmentStmt:13(
NameExpr(x)
IntExpr(4))))))))
[case testDoNotStripMethodThatDefinesAttributeWithoutAssignment]
# mypy: ignore-errors=True
class C:
def m1(self):
with y as self.x:
pass
def m2(self):
for self.y in x:
pass
[out]
MypyFile:1(
ClassDef:2(
C
FuncDef:3(
m1
Args(
Var(self))
Block:4(
WithStmt:4(
Expr(
NameExpr(y))
Target(
MemberExpr:4(
NameExpr(self)
x))
Block:5(
PassStmt:5()))))
FuncDef:6(
m2
Args(
Var(self))
Block:7(
ForStmt:7(
MemberExpr:7(
NameExpr(self)
y)
NameExpr(x)
Block:8(
PassStmt:8()))))))
[case testStripDecoratedFunctionOrMethod]
# mypy: ignore-errors=True
@deco
def f():
x = 0
class C:
@deco
def m1(self):
x = 0
@deco
def m2(self):
self.x = 0
[out]
MypyFile:1(
Decorator:2(
Var(f)
NameExpr(deco)
FuncDef:3(
f
Block:4()))
ClassDef:6(
C
Decorator:7(
Var(m1)
NameExpr(deco)
FuncDef:8(
m1
Args(
Var(self))
Block:9()))
Decorator:11(
Var(m2)
NameExpr(deco)
FuncDef:12(
m2
Args(
Var(self))
Block:13(
AssignmentStmt:13(
MemberExpr:13(
NameExpr(self)
x)
IntExpr(0)))))))
[case testStripOverloadedMethod]
# mypy: ignore-errors=True
class C:
@overload
def m1(self, x: int) -> None: ...
@overload
def m1(self, x: str) -> None: ...
def m1(self, x):
x = 0
@overload
def m2(self, x: int) -> None: ...
@overload
def m2(self, x: str) -> None: ...
def m2(self, x):
self.x = 0
[out]
MypyFile:1(
ClassDef:2(
C
OverloadedFuncDef:3(
Decorator:3(
Var(m1)
NameExpr(overload)
FuncDef:4(
m1
Args(
Var(self)
Var(x))
def (self: Any, x: int?) -> None?
Block:4(
ExpressionStmt:4(
Ellipsis))))
Decorator:5(
Var(m1)
NameExpr(overload)
FuncDef:6(
m1
Args(
Var(self)
Var(x))
def (self: Any, x: str?) -> None?
Block:6(
ExpressionStmt:6(
Ellipsis))))
FuncDef:7(
m1
Args(
Var(self)
Var(x))
Block:8()))
OverloadedFuncDef:10(
Decorator:10(
Var(m2)
NameExpr(overload)
FuncDef:11(
m2
Args(
Var(self)
Var(x))
def (self: Any, x: int?) -> None?
Block:11(
ExpressionStmt:11(
Ellipsis))))
Decorator:12(
Var(m2)
NameExpr(overload)
FuncDef:13(
m2
Args(
Var(self)
Var(x))
def (self: Any, x: str?) -> None?
Block:13(
ExpressionStmt:13(
Ellipsis))))
FuncDef:14(
m2
Args(
Var(self)
Var(x))
Block:15(
AssignmentStmt:15(
MemberExpr:15(
NameExpr(self)
x)
IntExpr(0)))))))
[case testStripMethodInNestedClass]
# mypy: ignore-errors=True
class C:
class D:
def m1(self):
self.x = 1
def m2(self):
return self.x
[out]
MypyFile:1(
ClassDef:2(
C
ClassDef:3(
D
FuncDef:4(
m1
Args(
Var(self))
Block:5(
AssignmentStmt:5(
MemberExpr:5(
NameExpr(self)
x)
IntExpr(1))))
FuncDef:6(
m2
Args(
Var(self))
Block:7()))))
[case testSuperExpr]
super().x
[out]
MypyFile:1(
ExpressionStmt:1(
SuperExpr:1(
x
CallExpr:1(
NameExpr(super)
Args()))))
[case testTypeCommentSimple]
x = [] # type: list[int]
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
ListExpr:1()
list?[int?]))
[case testTypeCommentMultiple]
x = [] # type: list[int]
y = {} # type: dict[str, int]
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
ListExpr:1()
list?[int?])
AssignmentStmt:2(
NameExpr(y)
DictExpr:2()
dict?[str?, int?]))
[case testTypeCommentWithTrailingComment]
x = [] # type: list[str] # This is a comment
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
ListExpr:1()
list?[str?]))
[case testTypeCommentUnion]
x = None # type: str | None
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
NameExpr(None)
str? | None?))
[case testNestedListAssignment]
a1, [b1, c1] = a2, [b2, c2]
[out]
MypyFile:1(
AssignmentStmt:1(
TupleExpr:1(
NameExpr(a1)
TupleExpr:1(
NameExpr(b1)
NameExpr(c1)))
TupleExpr:1(
NameExpr(a2)
ListExpr:1(
NameExpr(b2)
NameExpr(c2)))))
[case testSyntaxError1]
x = [1 2]
y = 2
[out]
1:8: error: Expected `,`, found int
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
ListExpr:1(
IntExpr(1)
IntExpr(2)))
AssignmentStmt:2(
NameExpr(y)
IntExpr(2)))
[case testSyntaxError2]
f(a.)
[out]
1:5: error: Expected an identifier
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(f)
Args(
MemberExpr:1(
NameExpr(a)
)))))
[case testSyntaxError3]
f(a[])
[out]
1:5: error: Expected index or slice expression
MypyFile:1(
ExpressionStmt:1(
CallExpr:1(
NameExpr(f)
Args(
IndexExpr:1(
NameExpr(a)
NameExpr())))))
[case testSyntaxError4]
from m import
1
[out]
1:14: error: Expected one or more symbol names after import
MypyFile:1(
ImportFrom:1(m, [])
ExpressionStmt:2(
IntExpr(1)))
[case testSyntaxError5]
from m
1
[out]
1:7: error: Expected `import`, found newline
MypyFile:1(
ImportFrom:1(m, [])
ExpressionStmt:2(
IntExpr(1)))
[case testSyntaxError6]
from m
1
[out]
1:7: error: Expected `import`, found newline
MypyFile:1(
ImportFrom:1(m, [])
ExpressionStmt:2(
IntExpr(1)))
[case testSyntaxError7]
def f():
g(
h()
def g(): ...
[out]
3:8: error: Expected `)`, found newline
MypyFile:1(
FuncDef:1(
f
Block:2(
ExpressionStmt:2(
CallExpr:2(
NameExpr(g)
Args(
CallExpr:3(
NameExpr(h)
Args()))))))
FuncDef:5(
g
Block:5(
ExpressionStmt:5(
Ellipsis))))
[case testSyntaxError8]
def f(
x,
y
def g(): ...
[out]
3:6: error: Expected `)`, found newline
5:1: error: Expected an indented block after function definition
MypyFile:1(
FuncDef:1(
f
Args(
Var(x)
Var(y))
Block:1())
FuncDef:5(
g
Block:5(
ExpressionStmt:5(
Ellipsis))))
[case testSyntaxError9]
class A
def f(): pass
[out]
1:8: error: Expected `:`, found newline
3:1: error: Expected an indented block after `class` definition
MypyFile:1(
ClassDef:1(
A)
FuncDef:3(
f
Block:3(
PassStmt:3())))
[case testArgConstructorTooManyArgs]
from typing import Callable
from mypy_extensions import Arg
def f(x: Callable[[Arg(int, 'x', 'extra')], bool]) -> None:
pass
[out]
3:19: error: Too many arguments for argument constructor
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(int?, x)>, bool?]) -> None?
Block:4(
PassStmt:4())))
[case testArgConstructorMultipleValuesForName]
from typing import Callable
from mypy_extensions import Arg
def f(x: Callable[[Arg(int, 'x', name='y')], bool]) -> None:
pass
[out]
3:19: error: "Arg" gets multiple values for keyword argument "name"
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(int?, y)>, bool?]) -> None?
Block:4(
PassStmt:4())))
[case testArgConstructorMultipleValuesForType]
from typing import Callable
from mypy_extensions import Arg
def f(x: Callable[[Arg(int, type=str)], bool]) -> None:
pass
[out]
3:19: error: "Arg" gets multiple values for keyword argument "type"
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(str?)>, bool?]) -> None?
Block:4(
PassStmt:4())))
[case testArgConstructorUnexpectedArg]
from typing import Callable
from mypy_extensions import Arg
def f(x: Callable[[Arg(int, foo='bar')], bool]) -> None:
pass
[out]
3:19: error: Unexpected argument "foo" for argument constructor
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(int?)>, bool?]) -> None?
Block:4(
PassStmt:4())))
[case testArgConstructorMultipleErrors]
from typing import Callable
from mypy_extensions import Arg
def f(x: Callable[[Arg(int, 'x', 'extra', foo='bar', name='y')], bool]) -> None:
pass
[out]
3:19: error: Too many arguments for argument constructor
3:19: error: Unexpected argument "foo" for argument constructor
3:19: error: "Arg" gets multiple values for keyword argument "name"
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(int?, y)>, bool?]) -> None?
Block:4(
PassStmt:4())))
[case testArgConstructorValidSyntax]
from typing import Callable
from mypy_extensions import Arg, DefaultArg, VarArg, KwArg
def f(x: Callable[[Arg(int, 'x'), DefaultArg(str, 'y'), VarArg(bool), KwArg(float)], None]) -> None:
pass
[out]
MypyFile:1(
ImportFrom:1(typing, [Callable])
ImportFrom:2(mypy_extensions, [Arg, DefaultArg, VarArg, KwArg])
FuncDef:3(
f
Args(
Var(x))
def (x: Callable?[<TypeList Arg(int?, x), DefaultArg(str?, y), VarArg(bool?), KwArg(float?)>, None?]) -> None?
Block:4(
PassStmt:4())))
[case testInvalidTypeFloatLiteral]
x: 3.14
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(x)
TempNode:1(
Any)
None))
[case testInvalidTypeComplexLiteral]
y: 1j
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(y)
TempNode:1(
Any)
None))
[case testInvalidTypeBinaryOperatorAdd]
z: int + str
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(z)
TempNode:1(
Any)
None))
[case testInvalidTypeBinaryOperatorMul]
a: int * str
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(a)
TempNode:1(
Any)
None))
[case testInvalidTypeUnaryOperatorNot]
b: not int
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(b)
TempNode:1(
Any)
None))
[case testInvalidTypeUnaryOperatorInvert]
c: ~int
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(c)
TempNode:1(
Any)
None))
[case testInvalidTypeSetExpression]
f: {1, 2, 3}
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(f)
TempNode:1(
Any)
None))
[case testInvalidTypeListComprehension]
g: [x for x in range(10)]
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(g)
TempNode:1(
Any)
None))
[case testInvalidTypeLambda]
h: lambda x: x
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(h)
TempNode:1(
Any)
None))
[case testInvalidTypeIfExpression]
i: int if True else str
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(i)
TempNode:1(
Any)
None))
[case testInvalidTypeComparisonExpression]
j: int < str
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(j)
TempNode:1(
Any)
None))
[case testInvalidTypePositiveUnaryOp]
k: +5
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(k)
TempNode:1(
Any)
5))
[case testConditionalOverload1]
@overload
def foo(x: int): ...
if sys.version_info[0] > 2:
@overload
def foo(x: str): ...
def foo(x): pass
[out]
MypyFile:1(
IfStmt:3(
If(
ComparisonExpr:3(
>
IndexExpr:3(
MemberExpr:3(
NameExpr(sys)
version_info)
IntExpr(0))
IntExpr(2)))
Then()
Else())
OverloadedFuncDef:1(
Decorator:1(
Var(foo)
NameExpr(overload)
FuncDef:2(
foo
Args(
Var(x))
def (x: int?) -> Any
Block:2(
ExpressionStmt:2(
Ellipsis))))
Decorator:4(
Var(foo)
NameExpr(overload)
FuncDef:5(
foo
Args(
Var(x))
def (x: str?) -> Any
Block:5(
ExpressionStmt:5(
Ellipsis))))
FuncDef:6(
foo
Args(
Var(x))
Block:6(
PassStmt:6()))))
[case testConditionalOverload2]
@overload
def foo(x: int): ...
if sys.platform == "foo":
@overload
def foo(x: str): ...
def foo(x): pass
[out]
MypyFile:1(
IfStmt:3(
If(
ComparisonExpr:3(
==
MemberExpr:3(
NameExpr(sys)
platform)
StrExpr(foo)))
Then())
OverloadedFuncDef:1(
Decorator:1(
Var(foo)
NameExpr(overload)
FuncDef:2(
foo
Args(
Var(x))
def (x: int?) -> Any
Block:2(
ExpressionStmt:2(
Ellipsis))))
FuncDef:6(
foo
Args(
Var(x))
Block:6(
PassStmt:6()))))
[case testConditionalOverload3]
if sys.version_info[0] > 2:
@overload
def foo(x: str): ...
@overload
def foo(x: int): ...
def foo(x): pass
[out]
MypyFile:1(
IfStmt:1(
If(
ComparisonExpr:1(
>
IndexExpr:1(
MemberExpr:1(
NameExpr(sys)
version_info)
IntExpr(0))
IntExpr(2)))
Then()
Else())
OverloadedFuncDef:2(
Decorator:2(
Var(foo)
NameExpr(overload)
FuncDef:3(
foo
Args(
Var(x))
def (x: str?) -> Any
Block:3(
ExpressionStmt:3(
Ellipsis))))
Decorator:4(
Var(foo)
NameExpr(overload)
FuncDef:5(
foo
Args(
Var(x))
def (x: int?) -> Any
Block:5(
ExpressionStmt:5(
Ellipsis))))
FuncDef:6(
foo
Args(
Var(x))
Block:6(
PassStmt:6()))))
[case testMatchStmt]
match x:
case foo(y):
pass
case _:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(x)
Pattern(
ClassPattern:2(
NameExpr(foo)
Positionals(
AsPattern:2(
NameExpr(y)))))
Body(
PassStmt:3())
Pattern(
AsPattern:4())
Body(
PassStmt:5())))
[case testMatchLiteralPatterns]
match x:
case 1:
pass
case "hello":
pass
case True:
pass
case None:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(x)
Pattern(
ValuePattern:2(
IntExpr(1)))
Body(
PassStmt:3())
Pattern(
ValuePattern:4(
StrExpr(hello)))
Body(
PassStmt:5())
Pattern(
SingletonPattern:6(
True))
Body(
PassStmt:7())
Pattern(
SingletonPattern:8())
Body(
PassStmt:9())))
[case testMatchOrPattern]
match x:
case 1 | 2 | 3:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(x)
Pattern(
OrPattern:2(
ValuePattern:2(
IntExpr(1))
ValuePattern:2(
IntExpr(2))
ValuePattern:2(
IntExpr(3))))
Body(
PassStmt:3())))
[case testMatchSequencePattern]
match x:
case [a, *rest, b]:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(x)
Pattern(
SequencePattern:2(
AsPattern:2(
NameExpr(a))
StarredPattern:2(
NameExpr(rest))
AsPattern:2(
NameExpr(b))))
Body(
PassStmt:3())))
[case testMatchMappingPattern]
match x:
case {"key": value, "x": y}:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(x)
Pattern(
MappingPattern:2(
Key(
StrExpr(key))
Value(
AsPattern:2(
NameExpr(value)))
Key(
StrExpr(x))
Value(
AsPattern:2(
NameExpr(y)))))
Body(
PassStmt:3())))
[case testMatchGuard]
match x:
case y if y > 0:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(x)
Pattern(
AsPattern:2(
NameExpr(y)))
Guard(
ComparisonExpr:2(
>
NameExpr(y)
IntExpr(0)))
Body(
PassStmt:3())))
[case testPEP695TypeAlias]
# comment
type A[T] = C[T]
[out]
MypyFile:1(
TypeAliasStmt:2(
NameExpr(A)
TypeParam(
T)
LambdaExpr:2(
Block:-1(
ReturnStmt:2(
IndexExpr:2(
NameExpr(C)
NameExpr(T)))))))
[case testPEP695GenericFunction]
# comment
def f[T](): pass
def g[T: str](): pass
def h[T: (int, str)](): pass
[out]
MypyFile:1(
FuncDef:3(
f
TypeParam(
T)
Block:3(
PassStmt:3()))
FuncDef:4(
g
TypeParam(
T
str?)
Block:4(
PassStmt:4()))
FuncDef:5(
h
TypeParam(
T
Values(
int?
str?))
Block:5(
PassStmt:5())))
[case testPEP695ParamSpec]
# comment
def f[**P](): pass
class C[T: int, **P]: pass
[out]
MypyFile:1(
FuncDef:3(
f
TypeParam(
**P)
Block:3(
PassStmt:3()))
ClassDef:4(
C
TypeParam(
T
int?)
TypeParam(
**P)
PassStmt:4()))
[case testPEP695TypeVarTuple]
# comment
def f[*Ts](): pass
class C[T: int, *Ts]: pass
[out]
MypyFile:1(
FuncDef:3(
f
TypeParam(
*Ts)
Block:3(
PassStmt:3()))
ClassDef:4(
C
TypeParam(
T
int?)
TypeParam(
*Ts)
PassStmt:4()))