1[case testEmptyFile]
2[out]
3MypyFile:1()
4
5[case testGlobalVariable]
6x = 1
7x
8[out]
9MypyFile:1(
10  AssignmentStmt:1(
11    NameExpr(x* [__main__.x])
12    IntExpr(1))
13  ExpressionStmt:2(
14    NameExpr(x [__main__.x])))
15
16[case testMultipleGlobals]
17x = y = 2
18z = 3
19(x, y, z)
20[out]
21MypyFile:1(
22  AssignmentStmt:1(
23    Lvalues(
24      NameExpr(x* [__main__.x])
25      NameExpr(y* [__main__.y]))
26    IntExpr(2))
27  AssignmentStmt:2(
28    NameExpr(z* [__main__.z])
29    IntExpr(3))
30  ExpressionStmt:3(
31    TupleExpr:3(
32      NameExpr(x [__main__.x])
33      NameExpr(y [__main__.y])
34      NameExpr(z [__main__.z]))))
35
36[case testEmptyFunction]
37def f(): pass
38f()
39[out]
40MypyFile:1(
41  FuncDef:1(
42    f
43    Block:1(
44      PassStmt:1()))
45  ExpressionStmt:2(
46    CallExpr:2(
47      NameExpr(f [__main__.f])
48      Args())))
49
50[case testAccessingGlobalNameBeforeDefinition]
51x
52f()
53x = 1
54def f(): pass
55[out]
56MypyFile:1(
57  ExpressionStmt:1(
58    NameExpr(x [__main__.x]))
59  ExpressionStmt:2(
60    CallExpr:2(
61      NameExpr(f [__main__.f])
62      Args()))
63  AssignmentStmt:3(
64    NameExpr(x* [__main__.x])
65    IntExpr(1))
66  FuncDef:4(
67    f
68    Block:4(
69      PassStmt:4())))
70
71[case testFunctionArgs]
72def f(x, y):
73  (x, y)
74[out]
75MypyFile:1(
76  FuncDef:1(
77    f
78    Args(
79      Var(x)
80      Var(y))
81    Block:1(
82      ExpressionStmt:2(
83        TupleExpr:2(
84          NameExpr(x [l])
85          NameExpr(y [l]))))))
86
87[case testLocalVar]
88def f():
89  x = 1
90  x
91[out]
92MypyFile:1(
93  FuncDef:1(
94    f
95    Block:1(
96      AssignmentStmt:2(
97        NameExpr(x* [l])
98        IntExpr(1))
99      ExpressionStmt:3(
100        NameExpr(x [l])))))
101
102[case testAccessGlobalInFn]
103def f():
104  x
105  g()
106x = 1
107def g(): pass
108[out]
109MypyFile:1(
110  FuncDef:1(
111    f
112    Block:1(
113      ExpressionStmt:2(
114        NameExpr(x [__main__.x]))
115      ExpressionStmt:3(
116        CallExpr:3(
117          NameExpr(g [__main__.g])
118          Args()))))
119  AssignmentStmt:4(
120    NameExpr(x* [__main__.x])
121    IntExpr(1))
122  FuncDef:5(
123    g
124    Block:5(
125      PassStmt:5())))
126
127[case testAssignmentAfterInit]
128x = 1
129x = 2
130def f(y):
131  y = 1
132  z = 1
133  z = 2
134[out]
135MypyFile:1(
136  AssignmentStmt:1(
137    NameExpr(x* [__main__.x])
138    IntExpr(1))
139  AssignmentStmt:2(
140    NameExpr(x [__main__.x])
141    IntExpr(2))
142  FuncDef:3(
143    f
144    Args(
145      Var(y))
146    Block:3(
147      AssignmentStmt:4(
148        NameExpr(y [l])
149        IntExpr(1))
150      AssignmentStmt:5(
151        NameExpr(z* [l])
152        IntExpr(1))
153      AssignmentStmt:6(
154        NameExpr(z [l])
155        IntExpr(2)))))
156
157[case testLocalAndGlobalAliasing]
158x = 1
159def f():
160  x = 2
161  x
162x
163[out]
164MypyFile:1(
165  AssignmentStmt:1(
166    NameExpr(x* [__main__.x])
167    IntExpr(1))
168  FuncDef:2(
169    f
170    Block:2(
171      AssignmentStmt:3(
172        NameExpr(x* [l])
173        IntExpr(2))
174      ExpressionStmt:4(
175        NameExpr(x [l]))))
176  ExpressionStmt:5(
177    NameExpr(x [__main__.x])))
178
179[case testArgumentInitializers]
180def f(x = f, y = object):
181  x, y
182[out]
183MypyFile:1(
184  FuncDef:1(
185    f
186    Args(
187      default(
188        Var(x)
189        NameExpr(f [__main__.f]))
190      default(
191        Var(y)
192        NameExpr(object [builtins.object])))
193    Block:1(
194      ExpressionStmt:2(
195        TupleExpr:2(
196          NameExpr(x [l])
197          NameExpr(y [l]))))))
198
199[case testVarArgs]
200def f(x, *y):
201  x, y
202[out]
203MypyFile:1(
204  FuncDef:1(
205    f
206    Args(
207      Var(x))
208    VarArg(
209      Var(y))
210    Block:1(
211      ExpressionStmt:2(
212        TupleExpr:2(
213          NameExpr(x [l])
214          NameExpr(y [l]))))))
215
216[case testGlobalDecl]
217x = None
218def f():
219    global x
220    x = None
221    x
222class A: pass
223[out]
224MypyFile:1(
225  AssignmentStmt:1(
226    NameExpr(x* [__main__.x])
227    NameExpr(None [builtins.None]))
228  FuncDef:2(
229    f
230    Block:2(
231      GlobalDecl:3(
232        x)
233      AssignmentStmt:4(
234        NameExpr(x [__main__.x])
235        NameExpr(None [builtins.None]))
236      ExpressionStmt:5(
237        NameExpr(x [__main__.x]))))
238  ClassDef:6(
239    A
240    PassStmt:6()))
241
242[case testMultipleNamesInGlobalDecl]
243x, y = None, None
244def f():
245    global x, y
246    x = y
247[out]
248MypyFile:1(
249  AssignmentStmt:1(
250    TupleExpr:1(
251      NameExpr(x* [__main__.x])
252      NameExpr(y* [__main__.y]))
253    TupleExpr:1(
254      NameExpr(None [builtins.None])
255      NameExpr(None [builtins.None])))
256  FuncDef:2(
257    f
258    Block:2(
259      GlobalDecl:3(
260        x
261        y)
262      AssignmentStmt:4(
263        NameExpr(x [__main__.x])
264        NameExpr(y [__main__.y])))))
265
266[case testGlobalDeclScope]
267x = None
268def f():
269    global x
270def g():
271    x = None
272[out]
273MypyFile:1(
274  AssignmentStmt:1(
275    NameExpr(x* [__main__.x])
276    NameExpr(None [builtins.None]))
277  FuncDef:2(
278    f
279    Block:2(
280      GlobalDecl:3(
281        x)))
282  FuncDef:4(
283    g
284    Block:4(
285      AssignmentStmt:5(
286        NameExpr(x* [l])
287        NameExpr(None [builtins.None])))))
288
289[case testGlobalDeclScope]
290x = None
291def f():
292    global x
293def g():
294    x = None
295[out]
296MypyFile:1(
297  AssignmentStmt:1(
298    NameExpr(x* [__main__.x])
299    NameExpr(None [builtins.None]))
300  FuncDef:2(
301    f
302    Block:2(
303      GlobalDecl:3(
304        x)))
305  FuncDef:4(
306    g
307    Block:4(
308      AssignmentStmt:5(
309        NameExpr(x* [l])
310        NameExpr(None [builtins.None])))))
311
312[case testGlobaWithinMethod]
313x = None
314class A:
315  def f(self):
316    global x
317    x = self
318[out]
319MypyFile:1(
320  AssignmentStmt:1(
321    NameExpr(x* [__main__.x])
322    NameExpr(None [builtins.None]))
323  ClassDef:2(
324    A
325    FuncDef:3(
326      f
327      Args(
328        Var(self))
329      Block:3(
330        GlobalDecl:4(
331          x)
332        AssignmentStmt:5(
333          NameExpr(x [__main__.x])
334          NameExpr(self [l]))))))
335
336[case testGlobalDefinedInBlock]
337# flags: --allow-redefinition
338if object:
339    x = object()
340    x = x
341x
342[out]
343MypyFile:1(
344  IfStmt:2(
345    If(
346      NameExpr(object [builtins.object]))
347    Then(
348      AssignmentStmt:3(
349        NameExpr(x'* [__main__.x'])
350        CallExpr:3(
351          NameExpr(object [builtins.object])
352          Args()))
353      AssignmentStmt:4(
354        NameExpr(x* [__main__.x])
355        NameExpr(x' [__main__.x']))))
356  ExpressionStmt:5(
357    NameExpr(x [__main__.x])))
358
359[case testNonlocalDecl]
360def g():
361    x = None
362    def f():
363        nonlocal x
364        x = None
365        x
366[out]
367MypyFile:1(
368  FuncDef:1(
369    g
370    Block:1(
371      AssignmentStmt:2(
372        NameExpr(x* [l])
373        NameExpr(None [builtins.None]))
374      FuncDef:3(
375        f
376        Block:3(
377          NonlocalDecl:4(
378            x)
379          AssignmentStmt:5(
380            NameExpr(x [l])
381            NameExpr(None [builtins.None]))
382          ExpressionStmt:6(
383            NameExpr(x [l])))))))
384
385[case testMultipleNamesInNonlocalDecl]
386def g():
387    x, y = None, None
388    def f(z):
389        nonlocal x, y
390        x = y
391[out]
392MypyFile:1(
393  FuncDef:1(
394    g
395    Block:1(
396      AssignmentStmt:2(
397        TupleExpr:2(
398          NameExpr(x* [l])
399          NameExpr(y* [l]))
400        TupleExpr:2(
401          NameExpr(None [builtins.None])
402          NameExpr(None [builtins.None])))
403      FuncDef:3(
404        f
405        Args(
406          Var(z))
407        Block:3(
408          NonlocalDecl:4(
409            x
410            y)
411          AssignmentStmt:5(
412            NameExpr(x [l])
413            NameExpr(y [l])))))))
414
415[case testNestedFunctions]
416def f(x):
417    def g(y):
418        z = y + x
419    return g
420[out]
421MypyFile:1(
422  FuncDef:1(
423    f
424    Args(
425      Var(x))
426    Block:1(
427      FuncDef:2(
428        g
429        Args(
430          Var(y))
431        Block:2(
432          AssignmentStmt:3(
433            NameExpr(z* [l])
434            OpExpr:3(
435              +
436              NameExpr(y [l])
437              NameExpr(x [l])))))
438      ReturnStmt:4(
439        NameExpr(g [l])))))
440
441[case testNestedFunctionWithOverlappingName]
442def f(x):
443    def g():
444        x = 1
445[out]
446MypyFile:1(
447  FuncDef:1(
448    f
449    Args(
450      Var(x))
451    Block:1(
452      FuncDef:2(
453        g
454        Block:2(
455          AssignmentStmt:3(
456            NameExpr(x* [l])
457            IntExpr(1)))))))
458
459[case testFinalValuesOnVar]
460from typing import Final, Any
461
462def func() -> Any: ...
463x: Final = 1
464y: Final = 1.0
465s: Final = "hi"
466t: Final = True
467n: Final = func()
468[out]
469MypyFile:1(
470  ImportFrom:1(typing, [Final, Any])
471  FuncDef:3(
472    func
473    def () -> Any
474    Block:3(
475      ExpressionStmt:3(
476        Ellipsis)))
477  AssignmentStmt:4(
478    NameExpr(x* [__main__.x] = 1)
479    IntExpr(1))
480  AssignmentStmt:5(
481    NameExpr(y* [__main__.y] = 1.0)
482    FloatExpr(1.0))
483  AssignmentStmt:6(
484    NameExpr(s* [__main__.s] = hi)
485    StrExpr(hi))
486  AssignmentStmt:7(
487    NameExpr(t* [__main__.t] = True)
488    NameExpr(True [builtins.True]))
489  AssignmentStmt:8(
490    NameExpr(n* [__main__.n] = None)
491    CallExpr:8(
492      NameExpr(func [__main__.func])
493      Args())))
494