blob: 5caa1a94387b11e9fa00183b186af1d49f5e40f4 [file] [log] [blame] [edit]
[case testInspectTypeBasic]
# inspect2: --include-kind tmp/foo.py:10:13
# inspect2: --show=type --include-kind tmp/foo.py:10:13
# inspect2: --include-span -vv tmp/foo.py:12:5
# inspect2: --include-span --include-kind tmp/foo.py:12:5:12:9
import foo
[file foo.py]
from typing import TypeVar, Generic
T = TypeVar('T')
class C(Generic[T]):
def __init__(self, x: T) -> None: ...
x: T
def foo(arg: C[T]) -> T:
return arg.x
foo(C(42))
[out]
==
NameExpr -> "C[T]"
MemberExpr -> "T"
NameExpr -> "C[T]"
MemberExpr -> "T"
12:5:12:5 -> "type[foo.C[builtins.int]]"
12:5:12:9 -> "foo.C[builtins.int]"
12:1:12:10 -> "builtins.int"
CallExpr:12:5:12:9 -> "C[int]"
[case testInspectAttrsBasic]
# inspect2: --show=attrs tmp/foo.py:6:1
# inspect2: --show=attrs tmp/foo.py:7:1
# inspect2: --show=attrs tmp/foo.py:10:1
# inspect2: --show=attrs --include-object-attrs tmp/foo.py:10:1
import foo
[file foo.py]
from bar import Meta
class C(metaclass=Meta):
x: int
def meth(self) -> None: ...
c: C
C
def foo() -> int: ...
foo
[file bar.py]
class Meta(type):
y: int
[out]
==
{"C": ["meth", "x"]}
{"C": ["meth", "x"], "Meta": ["y"], "type": ["__init__"]}
{"function": ["__name__"]}
{"function": ["__name__"], "object": ["__init__"]}
[case testInspectDefBasic]
# inspect2: --show=definition tmp/foo.py:5:5
# inspect2: --show=definition --include-kind tmp/foo.py:6:3
# inspect2: --show=definition --include-span tmp/foo.py:7:5
# inspect2: --show=definition tmp/foo.py:8:1:8:4
# inspect2: --show=definition tmp/foo.py:8:6:8:8
# inspect2: --show=definition tmp/foo.py:9:3
import foo
[file foo.py]
from bar import var, test, A
from baz import foo
a: A
a.meth()
a.x
A.B.y
test(var)
foo
[file bar.py]
class A:
x: int
@classmethod
def meth(cls) -> None: ...
class B:
y: int
var = 42
def test(x: int) -> None: ...
[file baz.py]
from typing import overload, Union
@overload
def foo(x: int) -> None: ...
@overload
def foo(x: str) -> None: ...
def foo(x: Union[int, str]) -> None:
pass
[builtins fixtures/classmethod.pyi]
[out]
==
tmp/bar.py:4:0:meth
MemberExpr -> tmp/bar.py:2:5:x
7:1:7:5 -> tmp/bar.py:6:9:y
tmp/bar.py:9:1:test
tmp/bar.py:8:1:var
tmp/baz.py:3:2:foo
[case testInspectFallbackAttributes]
# inspect2: --show=attrs --include-object-attrs tmp/foo.py:5:1
# inspect2: --show=attrs tmp/foo.py:8:1
# inspect2: --show=attrs --include-kind tmp/foo.py:10:1
# inspect2: --show=attrs --include-kind --include-object-attrs tmp/foo.py:10:1
import foo
[file foo.py]
class B: ...
class C(B):
x: int
c: C
c # line 5
t = 42, "foo"
t # line 8
None
[builtins fixtures/args.pyi]
[out]
==
{"C": ["x"], "object": ["__eq__", "__init__", "__ne__"]}
{"Iterable": ["__iter__"]}
NameExpr -> {}
NameExpr -> {"object": ["__eq__", "__init__", "__ne__"]}
[case testInspectTypeVarBoundAttrs]
# inspect2: --show=attrs tmp/foo.py:8:13
import foo
[file foo.py]
from typing import TypeVar
class C:
x: int
T = TypeVar('T', bound=C)
def foo(arg: T) -> T:
return arg
[out]
==
{"C": ["x"]}
[case testInspectTypeVarValuesAttrs]
# inspect2: --show=attrs --force-reload tmp/foo.py:13:13
# inspect2: --show=attrs --force-reload --union-attrs tmp/foo.py:13:13
# inspect2: --show=attrs tmp/foo.py:16:5
# inspect2: --show=attrs --union-attrs tmp/foo.py:16:5
import foo
[file foo.py]
from typing import TypeVar, Generic
class A:
x: int
z: int
class B:
y: int
z: int
T = TypeVar('T', A, B)
def foo(arg: T) -> T:
return arg
class C(Generic[T]):
x: T
[out]
==
{"A": ["z"], "B": ["z"]}
{"A": ["x", "z"], "B": ["y", "z"]}
{"A": ["z"], "B": ["z"]}
{"A": ["x", "z"], "B": ["y", "z"]}
[case testInspectTypeVarBoundDef]
# inspect2: --show=definition tmp/foo.py:9:13
# inspect2: --show=definition tmp/foo.py:8:9
import foo
[file foo.py]
from typing import TypeVar
class C:
x: int
T = TypeVar('T', bound=C)
def foo(arg: T) -> T:
arg.x
return arg
[out]
==
tmp/foo.py:7:9:arg
tmp/foo.py:4:5:x
[case testInspectTypeVarValuesDef]
# inspect2: --show=definition --force-reload tmp/foo.py:13:9
# inspect2: --show=definition --force-reload tmp/foo.py:14:13
# inspect2: --show=definition tmp/foo.py:18:7
import foo
[file foo.py]
from typing import TypeVar, Generic
class A:
x: int
z: int
class B:
y: int
z: int
T = TypeVar('T', A, B)
def foo(arg: T) -> T:
arg.z
return arg
class C(Generic[T]):
x: T
x.z
[out]
==
tmp/foo.py:5:5:z, tmp/foo.py:9:5:z
tmp/foo.py:12:9:arg
tmp/foo.py:5:5:z, tmp/foo.py:9:5:z
[case testInspectModuleAttrs]
# inspect2: --show=attrs tmp/foo.py:2:1
import foo
[file foo.py]
from pack import bar
bar
[file pack/__init__.py]
[file pack/bar.py]
x: int
def bar() -> None: ...
class C: ...
[builtins fixtures/module.pyi]
[out]
==
{"<pack.bar>": ["C", "__annotations__", "__doc__", "__file__", "__name__", "__package__", "__spec__", "bar", "x"], "ModuleType": ["__file__", "__getattr__"]}
[case testInspectModuleDef]
# inspect2: --show=definition --include-kind tmp/foo.py:2:1
import foo
[file foo.py]
from pack import bar
bar.x
[file pack/__init__.py]
[file pack/bar.py]
pass
if True:
x: int
[out]
==
NameExpr -> tmp/pack/bar.py:1:1:bar
MemberExpr -> tmp/pack/bar.py:3:5:x
[case testInspectFunctionArgDef]
# inspect2: --show=definition --include-span tmp/foo.py:4:13
# TODO: for now all arguments have line/column set to function definition.
import foo
[file foo.py]
def foo(arg: int) -> int:
pass
pass
return arg
[out]
==
4:12:4:14 -> tmp/foo.py:1:9:arg