[case testCallGlobalFunction]
def f() -> None:
    g()

def g() -> None:
    pass
[out]
2:4:__main__.g

[case testCallMethod]
def f() -> None:
    c = C()
    if int():
        c.method()

class C:
    def method(self) -> None: pass
[out]
2:8:__main__.C
3:7:builtins.int
4:8:__main__.C.method

[case testCallStaticMethod]
class C:
    def f(self) -> None:
        C.static()
        self.static()

    @classmethod
    def cm(cls) -> None:
        cls.static()

    @staticmethod
    def static() -> None: pass
[builtins fixtures/classmethod.pyi]
[out]
3:8:__main__.C
3:8:__main__.C.static
4:8:__main__.C.static
8:8:__main__.C.static

[case testCallClassMethod]
class C:
    def f(self) -> None:
        C.cm()
        self.cm()

    @classmethod
    def cm(cls) -> None:
        cls.cm()
[builtins fixtures/classmethod.pyi]
[out]
3:8:__main__.C
3:8:__main__.C.cm
4:8:__main__.C.cm
8:8:__main__.C.cm

[case testTypeVarWithValueRestriction]
from typing import TypeVar

T = TypeVar("T", "C", "D")

def f(o: T) -> None:
    f(o)
    o.m()
    o.x

class C:
    x: int
    def m(self) -> None: pass

class D:
    x: str
    def m(self) -> None: pass
[out]
3:4:typing.TypeVar
3:0:__main__.T
6:4:__main__.f
7:4:__main__.C.m
8:4:__main__.C.x
6:4:__main__.f
7:4:__main__.D.m
8:4:__main__.D.x
