blob: d52dd953aea2c584d5a8627c3bd9083605ad229e [file] [log] [blame] [edit]
-- NOTE: If a module has a name starting or ending with _, it is skipped in
-- output.
[case testImport]
import x
x.y
[file x.py]
y = 1
[out]
MypyFile:1(
Import:1(x)
ExpressionStmt:2(
MemberExpr:2(
NameExpr(x)
y [x.y])))
MypyFile:1(
tmp/x.py
AssignmentStmt:1(
NameExpr(y [x.y])
IntExpr(1)
builtins.int))
[case testImportedNameInType]
import m
x = None # type: m.c
[file m.py]
class c: pass
[out]
MypyFile:1(
Import:1(m)
AssignmentStmt:2(
NameExpr(x [__main__.x])
NameExpr(None [builtins.None])
m.c))
MypyFile:1(
tmp/m.py
ClassDef:1(
c
PassStmt:1()))
[case testImportFrom]
from m import y
x = y
[file m.py]
y = 1
[out]
MypyFile:1(
ImportFrom:1(m, [y])
AssignmentStmt:2(
NameExpr(x* [__main__.x])
NameExpr(y [m.y])))
MypyFile:1(
tmp/m.py
AssignmentStmt:1(
NameExpr(y [m.y])
IntExpr(1)
builtins.int))
[case testImportFromType]
from m import c
x = None # type: c
[file m.py]
class c: pass
[out]
MypyFile:1(
ImportFrom:1(m, [c])
AssignmentStmt:2(
NameExpr(x [__main__.x])
NameExpr(None [builtins.None])
m.c))
MypyFile:1(
tmp/m.py
ClassDef:1(
c
PassStmt:1()))
[case testImportMultiple]
import _m, _n
_m.x, _n.y
[fixture _m.py]
x = 1
[fixture _n.py]
y = 2
[out]
MypyFile:1(
Import:1(_m, _n)
ExpressionStmt:2(
TupleExpr:2(
MemberExpr:2(
NameExpr(_m)
x [_m.x])
MemberExpr:2(
NameExpr(_n)
y [_n.y]))))
[case testImportAs]
import _m as n
n.x
[fixture _m.py]
x = 1
[out]
MypyFile:1(
Import:1(_m : n)
ExpressionStmt:2(
MemberExpr:2(
NameExpr(n [_m])
x [_m.x])))
[case testImportFromMultiple]
from _m import x, y
x, y
[fixture _m.py]
x = y = 1
[out]
MypyFile:1(
ImportFrom:1(_m, [x, y])
ExpressionStmt:2(
TupleExpr:2(
NameExpr(x [_m.x])
NameExpr(y [_m.y]))))
[case testImportFromAs]
from _m import y as z
z
[fixture _m.py]
y = 1
[out]
MypyFile:1(
ImportFrom:1(_m, [y : z])
ExpressionStmt:2(
NameExpr(z [_m.y])))
[case testAccessImportedName]
from m import x
y = x
[file m.py]
from _n import x
[fixture _n.py]
x = 1
[out]
MypyFile:1(
ImportFrom:1(m, [x])
AssignmentStmt:2(
NameExpr(y* [__main__.y])
NameExpr(x [_n.x])))
MypyFile:1(
tmp/m.py
ImportFrom:1(_n, [x]))
[case testAccessImportedName2]
import _m
y = _m.x
[fixture _m.py]
from _n import x
[fixture _n.py]
x = 1
[out]
MypyFile:1(
Import:1(_m)
AssignmentStmt:2(
NameExpr(y* [__main__.y])
MemberExpr:2(
NameExpr(_m)
x [_n.x])))
[case testAccessingImportedNameInType]
from _m import c
x = None # type: c
[fixture _m.py]
from _n import c
[fixture _n.py]
class c: pass
[out]
MypyFile:1(
ImportFrom:1(_m, [c])
AssignmentStmt:2(
NameExpr(x [__main__.x])
NameExpr(None [builtins.None])
_n.c))
[case testAccessingImportedNameInType2]
import _m
x = None # type: _m.c
[fixture _m.py]
from _n import c
[fixture _n.py]
class c: pass
[out]
MypyFile:1(
Import:1(_m)
AssignmentStmt:2(
NameExpr(x [__main__.x])
NameExpr(None [builtins.None])
_n.c))
[case testAccessingImportedModule]
from _m import _n
_n.x
[fixture _m.py]
import _n
[fixture _n.py]
x = 1
[out]
MypyFile:1(
ImportFrom:1(_m, [_n])
ExpressionStmt:2(
MemberExpr:2(
NameExpr(_n)
x [_n.x])))
[case testAccessingImportedModule2]
import _m
_m._n.x
[fixture _m.py]
import _n
[fixture _n.py]
x = 1
[out]
MypyFile:1(
Import:1(_m)
ExpressionStmt:2(
MemberExpr:2(
MemberExpr:2(
NameExpr(_m)
_n)
x [_n.x])))
[case testAccessTypeViaDoubleIndirection]
from _m import c
a = None # type: c
[fixture _m.py]
from _n import c
[fixture _n.py]
class c: pass
[out]
MypyFile:1(
ImportFrom:1(_m, [c])
AssignmentStmt:2(
NameExpr(a [__main__.a])
NameExpr(None [builtins.None])
_n.c))
[case testAccessTypeViaDoubleIndirection2]
import _m
a = None # type: _m.c
[fixture _m.py]
from _n import c
[fixture _n.py]
class c: pass
[out]
MypyFile:1(
Import:1(_m)
AssignmentStmt:2(
NameExpr(a [__main__.a])
NameExpr(None [builtins.None])
_n.c))
[case testImportAsterisk]
from _m import *
x, y
[fixture _m.py]
x = y = 1
[out]
MypyFile:1(
ImportAll:1(_m)
ExpressionStmt:2(
TupleExpr:2(
NameExpr(x [_m.x])
NameExpr(y [_m.y]))))
[case testImportAsteriskAndImportedNames]
from _m import *
n_.x, y
[fixture _m.py]
import n_
from n_ import y
[fixture n_.py]
x = y = 1
[out]
MypyFile:1(
ImportAll:1(_m)
ExpressionStmt:2(
TupleExpr:2(
MemberExpr:2(
NameExpr(n_)
x [n_.x])
NameExpr(y [n_.y]))))
[case testImportAsteriskAndImportedNamesInTypes]
from _m import *
x = None # type: n_.c
y = None # type: d
[fixture _m.py]
import n_
from n_ import d
[fixture n_.py]
class c: pass
class d: pass
[out]
MypyFile:1(
ImportAll:1(_m)
AssignmentStmt:2(
NameExpr(x [__main__.x])
NameExpr(None [builtins.None])
n_.c)
AssignmentStmt:3(
NameExpr(y [__main__.y])
NameExpr(None [builtins.None])
n_.d))
[case testModuleInSubdir]
import _m
_m.x
[fixture _m/__init__.py]
x = 1
[out]
MypyFile:1(
Import:1(_m)
ExpressionStmt:2(
MemberExpr:2(
NameExpr(_m)
x [_m.x])))
[case testNestedModules]
import m.n
m.n.x, m.y
[fixture m/__init__.py]
y = 1
[file m/n.py]
x = 1
[out]
MypyFile:1(
Import:1(m.n)
ExpressionStmt:2(
TupleExpr:2(
MemberExpr:2(
MemberExpr:2(
NameExpr(m)
n [m.n])
x [m.n.x])
MemberExpr:2(
NameExpr(m)
y [m.y]))))
MypyFile:1(
tmp/m/n.py
AssignmentStmt:1(
NameExpr(x [m.n.x])
IntExpr(1)
builtins.int))
[case testImportFromSubmodule]
from m._n import x
x
[fixture m/__init__.py]
[fixture m/_n.py]
x = 1
[out]
MypyFile:1(
ImportFrom:1(m._n, [x])
ExpressionStmt:2(
NameExpr(x [m._n.x])))
[case testImportAllFromSubmodule]
from m._n import *
x, y
[fixture m/__init__.py]
[fixture m/_n.py]
x = y = 1
[out]
MypyFile:1(
ImportAll:1(m._n)
ExpressionStmt:2(
TupleExpr:2(
NameExpr(x [m._n.x])
NameExpr(y [m._n.y]))))
[case testSubmodulesAndTypes]
import m._n
x = None # type: m._n.c
[fixture m/__init__.py]
[fixture m/_n.py]
class c: pass
[out]
MypyFile:1(
Import:1(m._n)
AssignmentStmt:2(
NameExpr(x [__main__.x])
NameExpr(None [builtins.None])
m._n.c))
[case testSubmodulesAndTypes2]
from m._n import c
x = None # type: c
[fixture m/__init__.py]
[fixture m/_n.py]
class c: pass
[out]
MypyFile:1(
ImportFrom:1(m._n, [c])
AssignmentStmt:2(
NameExpr(x [__main__.x])
NameExpr(None [builtins.None])
m._n.c))
[case testFromPackageImportModule]
from m import _n
_n.x
[fixture m/__init__.py]
[fixture m/_n.py]
x = 1
[out]
MypyFile:1(
ImportFrom:1(m, [_n])
ExpressionStmt:2(
MemberExpr:2(
NameExpr(_n [m._n])
x [m._n.x])))
[case testDeeplyNestedModule]
import m.n.k
m.n.k.x
m.n.b
m.a
[fixture m/__init__.py]
a = 1
[fixture m/n/__init__.py]
b = 1
[file m/n/k.py]
x = 1
[out]
MypyFile:1(
Import:1(m.n.k)
ExpressionStmt:2(
MemberExpr:2(
MemberExpr:2(
MemberExpr:2(
NameExpr(m)
n [m.n])
k [m.n.k])
x [m.n.k.x]))
ExpressionStmt:3(
MemberExpr:3(
MemberExpr:3(
NameExpr(m)
n [m.n])
b [m.n.b]))
ExpressionStmt:4(
MemberExpr:4(
NameExpr(m)
a [m.a])))
MypyFile:1(
tmp/m/n/k.py
AssignmentStmt:1(
NameExpr(x [m.n.k.x])
IntExpr(1)
builtins.int))
[case testImportInSubmodule]
import m._n
y = m._n.x
[fixture m/__init__.py]
[fixture m/_n.py]
from m._k import x
[fixture m/_k.py]
x = 1
[out]
MypyFile:1(
Import:1(m._n)
AssignmentStmt:2(
NameExpr(y* [__main__.y])
MemberExpr:2(
MemberExpr:2(
NameExpr(m)
_n [m._n])
x [m._k.x])))
[case testBuiltinsUsingModule]
o = None # type: __builtins__.object
[out]
MypyFile:1(
AssignmentStmt:1(
NameExpr(o [__main__.o])
NameExpr(None [builtins.None])
builtins.object))
[case testImplicitAccessToBuiltins]
object
[out]
MypyFile:1(
ExpressionStmt:1(
NameExpr(object [builtins.object])))
[case testAssignmentToModuleAttribute]
import _m
_m.x = (
_m.x)
[fixture _m.py]
x = None
[out]
MypyFile:1(
Import:1(_m)
AssignmentStmt:2(
MemberExpr:2(
NameExpr(_m)
x [_m.x])
MemberExpr:3(
NameExpr(_m)
x [_m.x])))
[case testAssignmentThatRefersToModule]
import _m
_m.x[None] = None
[fixture _m.py]
x = None
[out]
MypyFile:1(
Import:1(_m)
AssignmentStmt:2(
IndexExpr:2(
MemberExpr:2(
NameExpr(_m)
x [_m.x])
NameExpr(None [builtins.None]))
NameExpr(None [builtins.None])))
[case testImportInBlock]
if 1:
import _x
_x.y
[fixture _x.py]
y = 1
[out]
MypyFile:1(
IfStmt:1(
If(
IntExpr(1))
Then(
Import:2(_x)
ExpressionStmt:3(
MemberExpr:3(
NameExpr(_x)
y [_x.y])))))
[case testImportInFunction]
def f() -> None:
import _x
_x.y
[fixture _x.py]
y = 1
[out]
MypyFile:1(
FuncDef:1(
f
def ()
Block:2(
Import:2(_x)
ExpressionStmt:3(
MemberExpr:3(
NameExpr(_x)
y [_x.y])))))
[case testImportInClassBody]
class A:
from _x import y
z = y
[fixture _x.py]
y = 1
[out]
MypyFile:1(
ClassDef:1(
A
ImportFrom:2(_x, [y])
AssignmentStmt:3(
NameExpr(z* [m])
NameExpr(y [__main__.A.y]))))
[case testImportInClassBody2]
class A:
import _x
z = _x.y
[fixture _x.py]
y = 1
[out]
MypyFile:1(
ClassDef:1(
A
Import:2(_x)
AssignmentStmt:3(
NameExpr(z* [m])
MemberExpr:3(
NameExpr(_x)
y [_x.y]))))
[case testImportModuleTwice]
def f() -> None:
import x
import x
x.y
[file x.py]
y = 1
[out]
MypyFile:1(
FuncDef:1(
f
def ()
Block:2(
Import:2(x)
Import:3(x)
ExpressionStmt:4(
MemberExpr:4(
NameExpr(x)
y [x.y])))))
MypyFile:1(
tmp/x.py
AssignmentStmt:1(
NameExpr(y [x.y])
IntExpr(1)
builtins.int))
[case testRelativeImport0]
import m.x
m.x.z.y
[fixture m/__init__.py]
[file m/x.py]
from . import z
[file m/z.py]
y = 1
[out]
MypyFile:1(
Import:1(m.x)
ExpressionStmt:2(
MemberExpr:2(
MemberExpr:2(
MemberExpr:2(
NameExpr(m)
x [m.x])
z [m.z])
y [m.z.y])))
MypyFile:1(
tmp/m/x.py
ImportFrom:1(., [z]))
MypyFile:1(
tmp/m/z.py
AssignmentStmt:1(
NameExpr(y [m.z.y])
IntExpr(1)
builtins.int))
[case testRelativeImport1]
import m.t.b as b
b.x.y
b.z.y
[fixture m/__init__.py]
[file m/x.py]
y = 1
[file m/z.py]
y = 3
[fixture m/t/__init__.py]
[file m/t/b.py]
from .. import x, z
[out]
MypyFile:1(
Import:1(m.t.b : b)
ExpressionStmt:2(
MemberExpr:2(
MemberExpr:2(
NameExpr(b [m.t.b])
x [m.x])
y [m.x.y]))
ExpressionStmt:3(
MemberExpr:3(
MemberExpr:3(
NameExpr(b [m.t.b])
z [m.z])
y [m.z.y])))
MypyFile:1(
tmp/m/t/b.py
ImportFrom:1(.., [x, z]))
MypyFile:1(
tmp/m/x.py
AssignmentStmt:1(
NameExpr(y [m.x.y])
IntExpr(1)
builtins.int))
MypyFile:1(
tmp/m/z.py
AssignmentStmt:1(
NameExpr(y [m.z.y])
IntExpr(3)
builtins.int))
[case testRelativeImport2]
import m.t.b as b
b.xy
b.zy
[fixture m/__init__.py]
[file m/x.py]
y = 1
[file m/z.py]
y = 3
[fixture m/t/__init__.py]
[file m/t/b.py]
from ..x import y as xy
from ..z import y as zy
[out]
MypyFile:1(
Import:1(m.t.b : b)
ExpressionStmt:2(
MemberExpr:2(
NameExpr(b [m.t.b])
xy [m.x.y]))
ExpressionStmt:3(
MemberExpr:3(
NameExpr(b [m.t.b])
zy [m.z.y])))
MypyFile:1(
tmp/m/t/b.py
ImportFrom:1(..x, [y : xy])
ImportFrom:2(..z, [y : zy]))
MypyFile:1(
tmp/m/x.py
AssignmentStmt:1(
NameExpr(y [m.x.y])
IntExpr(1)
builtins.int))
MypyFile:1(
tmp/m/z.py
AssignmentStmt:1(
NameExpr(y [m.z.y])
IntExpr(3)
builtins.int))
[case testRelativeImport3]
import m.t
m.zy
m.xy
m.t.y
[fixture m/__init__.py]
from .x import *
from .z import *
[file m/x.py]
from .z import zy as xy
[file m/z.py]
zy = 3
[fixture m/t/__init__.py]
from .b import *
[file m/t/b.py]
from .. import xy as y
[out]
MypyFile:1(
Import:1(m.t)
ExpressionStmt:2(
MemberExpr:2(
NameExpr(m)
zy [m.z.zy]))
ExpressionStmt:3(
MemberExpr:3(
NameExpr(m)
xy [m.z.zy]))
ExpressionStmt:4(
MemberExpr:4(
MemberExpr:4(
NameExpr(m)
t [m.t])
y [m.z.zy])))
MypyFile:1(
tmp/m/t/b.py
ImportFrom:1(.., [xy : y]))
MypyFile:1(
tmp/m/x.py
ImportFrom:1(.z, [zy : xy]))
MypyFile:1(
tmp/m/z.py
AssignmentStmt:1(
NameExpr(zy [m.z.zy])
IntExpr(3)
builtins.int))
[case testRelativeImportFromSameModule]
import m.x
[fixture m/__init__.py]
[file m/x.py]
from .x import nonexistent
[out]
tmp/m/x.py:1: error: Module "m.x" has no attribute "nonexistent"
[case testImportFromSameModule]
import m.x
[fixture m/__init__.py]
[file m/x.py]
from m.x import nonexistent
[out]
tmp/m/x.py:1: error: Module "m.x" has no attribute "nonexistent"
[case testImportMisspellingSingleCandidate]
import f
[fixture m/__init__.py]
[file m/x.py]
def some_function():
pass
[file f.py]
from m.x import somefunction
[out]
tmp/f.py:1: error: Module "m.x" has no attribute "somefunction"; maybe "some_function"?
[case testImportMisspellingMultipleCandidates]
import f
[fixture m/__init__.py]
[file m/x.py]
def some_function():
pass
def somef_unction():
pass
[file f.py]
from m.x import somefunction
[out]
tmp/f.py:1: error: Module "m.x" has no attribute "somefunction"; maybe "some_function" or "somef_unction"?
[case testImportMisspellingMultipleCandidatesTruncated]
import f
[fixture m/__init__.py]
[file m/x.py]
def some_function():
pass
def somef_unction():
pass
def somefu_nction():
pass
def somefun_ction():
pass
[file f.py]
from m.x import somefunction
[out]
tmp/f.py:1: error: Module "m.x" has no attribute "somefunction"; maybe "some_function", "somef_unction", or "somefu_nction"?
[case testFromImportAsInStub]
from m import *
x
y # E: Name "y" is not defined
[file m.pyi]
from m2 import x as x
from m2 import y
[file m2.py]
x = 1
y = 2
[out]
[case testFromImportAsInNonStub]
from m_ import *
x
y
[fixture m_.py]
from m2_ import x as x
from m2_ import y
[fixture m2_.py]
x = 1
y = 2
[out]
MypyFile:1(
ImportAll:1(m_)
ExpressionStmt:2(
NameExpr(x [m2_.x]))
ExpressionStmt:3(
NameExpr(y [m2_.y])))
[case testImportAsInStub]
from m import *
m2
m3 # E: Name "m3" is not defined
[file m.pyi]
import m2 as m2
import m3
[file m2.py]
[file m3.py]
[out]
[case testImportAsInNonStub]
from m_ import *
m2_
m3_
[fixture m_.py]
import m2_ as m2_
import m3_
[fixture m2_.py]
[fixture m3_.py]
[out]
MypyFile:1(
ImportAll:1(m_)
ExpressionStmt:2(
NameExpr(m2_))
ExpressionStmt:3(
NameExpr(m3_)))
[case testErrorsInMultipleModules]
import m
x
[file m.py]
y
[out]
tmp/m.py:1: error: Name "y" is not defined
main:2: error: Name "x" is not defined
[case testImportTwice]
import typing
from x import a, a # ok (we could give a warning, but this is valid)
def f() -> None:
from x import a
from x import a # ok
import x
import x # ok, since we may import multiple submodules of a package
[file x.py]
a = 1
[out]
MypyFile:1(
Import:1(typing)
ImportFrom:2(x, [a, a])
FuncDef:3(
f
def ()
Block:4(
ImportFrom:4(x, [a])
ImportFrom:5(x, [a])))
Import:6(x)
Import:7(x))
MypyFile:1(
tmp/x.py
AssignmentStmt:1(
NameExpr(a [x.a])
IntExpr(1)
builtins.int))