| [case testUndefinedVariableInGlobalStatement] |
| import typing |
| x |
| y |
| [out] |
| main:2: error: Name 'x' is not defined |
| main:3: error: Name 'y' is not defined |
| |
| [case testUndefinedVariableWithinFunctionContext] |
| import typing |
| def f() -> None: |
| x |
| y |
| [out] |
| main:3: error: Name 'x' is not defined |
| main:4: error: Name 'y' is not defined |
| |
| [case testMethodScope] |
| import typing |
| class A: |
| def f(self): pass |
| f |
| [out] |
| main:4: error: Name 'f' is not defined |
| |
| [case testMethodScope2] |
| import typing |
| class A: |
| def f(self): pass |
| class B: |
| def g(self) -> None: |
| f # error |
| g # error |
| [out] |
| main:6: error: Name 'f' is not defined |
| main:7: error: Name 'g' is not defined |
| |
| [case testInvalidType] |
| import typing |
| x = None # type: X |
| [out] |
| main:2: error: Name 'X' is not defined |
| |
| [case testInvalidGenericArg] |
| from typing import TypeVar, Generic |
| t = TypeVar('t') |
| class A(Generic[t]): pass |
| x = 0 # type: A[y] |
| [out] |
| main:4: error: Name 'y' is not defined |
| |
| [case testInvalidNumberOfGenericArgsInTypeDecl] |
| from typing import TypeVar, Generic |
| t = TypeVar('t') |
| class A: pass |
| class B(Generic[t]): pass |
| x = 0 # type: B[A, A] |
| y = 0 # type: A[A] |
| [out] |
| main:5: error: "B" expects 1 type argument, but 2 given |
| main:6: error: "A" expects no type arguments, but 1 given |
| |
| [case testInvalidNumberOfGenericArgsInUndefinedArg] |
| |
| class A: pass |
| x = None # type: A[int] # E: "A" expects no type arguments, but 1 given |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInNestedBlock] |
| |
| class A: pass |
| class B: |
| def f(self) -> None: |
| while 1: |
| x = None # type: A[int] \ |
| # E: "A" expects no type arguments, but 1 given |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInSignature] |
| import typing |
| class A: pass |
| def f() -> A[int]: pass # E: "A" expects no type arguments, but 1 given |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInOverloadedSignature] |
| from typing import overload |
| class A: pass |
| @overload |
| def f(): pass |
| @overload |
| def f(x: A[int]) -> None: pass # E: "A" expects no type arguments, but 1 given |
| def f(*args): pass |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInBaseType] |
| import typing |
| class A: pass |
| class B(A[int]): pass # E: "A" expects no type arguments, but 1 given |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInCast] |
| from typing import cast |
| class A: pass |
| x = cast(A[int], 1) # E: "A" expects no type arguments, but 1 given |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInNestedGenericType] |
| from typing import TypeVar, Generic |
| T = TypeVar('T') |
| class A(Generic[T]): pass |
| class B: pass |
| def f() -> A[B[int]]: pass # E: "B" expects no type arguments, but 1 given |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInTupleType] |
| from typing import Tuple |
| class A: pass |
| x = None # type: Tuple[A[int]] # E: "A" expects no type arguments, but 1 given |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testInvalidNumberOfGenericArgsInFunctionType] |
| from typing import Callable |
| class A: pass |
| x = None # type: Callable[[A[int]], int] # E: "A" expects no type arguments, but 1 given |
| y = None # type: Callable[[], A[int]] # E: "A" expects no type arguments, but 1 given |
| [out] |
| |
| [case testVarOrFuncAsType] |
| |
| import typing |
| def f(): pass |
| x = 1 |
| y = 0 # type: f |
| z = 0 # type: x |
| [out] |
| main:5: error: Function "__main__.f" is not valid as a type |
| main:5: note: Perhaps you need "Callable[...]" or a callback protocol? |
| main:6: error: Variable "__main__.x" is not valid as a type |
| main:6: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases |
| |
| [case testGlobalVarRedefinition] |
| import typing |
| class A: pass |
| x = 0 # type: A |
| x = 0 # type: A |
| [out] |
| main:4: error: Name 'x' already defined on line 3 |
| |
| [case testLocalVarRedefinition] |
| import typing |
| class A: pass |
| def f() -> None: |
| x = 0 # type: A |
| x = 0 # type: A |
| [out] |
| main:5: error: Name 'x' already defined on line 4 |
| |
| [case testClassVarRedefinition] |
| import typing |
| class A: |
| x = 0 # type: object |
| x = 0 # type: object |
| [out] |
| main:4: error: Name 'x' already defined on line 3 |
| |
| [case testMultipleClassDefinitions] |
| import typing |
| class A: pass |
| class A: pass |
| [out] |
| main:3: error: Name 'A' already defined on line 2 |
| |
| [case testMultipleMixedDefinitions] |
| import typing |
| x = 1 |
| def x(): pass |
| class x: pass |
| [out] |
| main:3: error: Name 'x' already defined on line 2 |
| main:4: error: Name 'x' already defined on line 2 |
| |
| [case testNameNotImported] |
| import typing |
| from m import y |
| x |
| [file m.py] |
| x = y = 1 |
| [out] |
| main:3: error: Name 'x' is not defined |
| |
| [case testMissingNameInImportFrom] |
| import typing |
| from m import y |
| [file m.py] |
| x = 1 |
| [out] |
| main:2: error: Module 'm' has no attribute 'y' |
| |
| [case testMissingModule] |
| import typing |
| import m |
| [out] |
| main:2: error: Cannot find implementation or library stub for module named "m" |
| main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| |
| [case testMissingModule2] |
| import typing |
| from m import x |
| [out] |
| main:2: error: Cannot find implementation or library stub for module named "m" |
| main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| |
| [case testMissingModule3] |
| import typing |
| from m import * |
| [out] |
| main:2: error: Cannot find implementation or library stub for module named "m" |
| main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| |
| [case testMissingModuleRelativeImport] |
| import typing |
| import m |
| [file m/__init__.py] |
| from .x import y |
| [out] |
| tmp/m/__init__.py:1: error: Cannot find implementation or library stub for module named "m.x" |
| tmp/m/__init__.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| |
| [case testMissingModuleRelativeImport2] |
| import typing |
| import m.a |
| [file m/__init__.py] |
| [file m/a.py] |
| from .x import y |
| [out] |
| tmp/m/a.py:1: error: Cannot find implementation or library stub for module named "m.x" |
| tmp/m/a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| |
| [case testModuleNotImported] |
| import typing |
| import _m |
| _n.x |
| [file _m.py] |
| import _n |
| [file _n.py] |
| x = 1 |
| [out] |
| main:3: error: Name '_n' is not defined |
| |
| [case testImportAsteriskPlusUnderscore] |
| import typing |
| from _m import * |
| _x |
| __x__ |
| [file _m.py] |
| _x = __x__ = 1 |
| [out] |
| main:3: error: Name '_x' is not defined |
| main:4: error: Name '__x__' is not defined |
| |
| [case testRelativeImportAtTopLevelModule] |
| from . import m |
| [out] |
| main:1: error: No parent module -- cannot perform relative import |
| |
| [case testRelativeImportAtTopLevelModule2] |
| from .. import m |
| [out] |
| main:1: error: No parent module -- cannot perform relative import |
| |
| [case testUndefinedTypeWithQualifiedName] |
| import typing |
| import m |
| def f() -> m.c: pass |
| def g() -> n.c: pass |
| [file m.py] |
| [out] |
| main:3: error: Name 'm.c' is not defined |
| main:4: error: Name 'n' is not defined |
| |
| [case testMissingPackage] |
| import typing |
| import m.n |
| [out] |
| main:2: error: Cannot find implementation or library stub for module named "m.n" |
| main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| main:2: error: Cannot find implementation or library stub for module named "m" |
| |
| [case testMissingPackage2] |
| import typing |
| from m.n import x |
| from a.b import * |
| [out] |
| main:2: error: Cannot find implementation or library stub for module named "m.n" |
| main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| main:3: error: Cannot find implementation or library stub for module named "a.b" |
| |
| [case testErrorInImportedModule] |
| import m |
| [file m.py] |
| import typing |
| x = y |
| [out] |
| tmp/m.py:2: error: Name 'y' is not defined |
| |
| [case testErrorInImportedModule2] |
| import m.n |
| [file m/__init__.py] |
| [file m/n.py] |
| import k |
| [file k.py] |
| import typing |
| x = y |
| [out] |
| tmp/k.py:2: error: Name 'y' is not defined |
| |
| [case testPackageWithoutInitFile] |
| import typing |
| import m.n |
| m.n.x |
| [file m/n.py] |
| x = 1 |
| [out] |
| main:2: error: Cannot find implementation or library stub for module named "m.n" |
| main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports |
| main:2: error: Cannot find implementation or library stub for module named "m" |
| |
| [case testBreakOutsideLoop] |
| break |
| def f(): |
| break |
| [out] |
| main:1: error: 'break' outside loop |
| main:3: error: 'break' outside loop |
| |
| [case testContinueOutsideLoop] |
| continue |
| def f(): |
| continue |
| [out] |
| main:1: error: 'continue' outside loop |
| main:3: error: 'continue' outside loop |
| |
| [case testReturnOutsideFunction] |
| def f(): pass |
| return |
| return 1 |
| [out] |
| main:2: error: 'return' outside function |
| main:3: error: 'return' outside function |
| |
| [case testYieldOutsideFunction] |
| yield 1 |
| yield |
| [out] |
| main:1: error: 'yield' outside function |
| main:2: error: 'yield' outside function |
| |
| [case testInvalidLvalues1] |
| 1 = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues2] |
| (1) = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues3] |
| (1, 1) = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues4] |
| [1, 1] = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues6] |
| x = y = z = 1 # ok |
| x, (y, 1) = 1 |
| [out] |
| main:2: error: can't assign to literal |
| |
| [case testInvalidLvalues7] |
| x, [y, 1] = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues8] |
| x, [y, [z, 1]] = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues9] |
| x, (y) = 1 # ok |
| x, (y, (z, z)) = 1 # ok |
| x, (y, (z, 1)) = 1 |
| [out] |
| main:3: error: can't assign to literal |
| |
| [case testInvalidLvalues10] |
| x + x = 1 |
| [out] |
| main:1: error: can't assign to operator |
| |
| [case testInvalidLvalues11] |
| -x = 1 |
| [out] |
| main:1: error: can't assign to operator |
| |
| [case testInvalidLvalues12] |
| 1.1 = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues13] |
| 'x' = 1 |
| [out] |
| main:1: error: can't assign to literal |
| |
| [case testInvalidLvalues14] |
| x() = 1 |
| [out] |
| main:1: error: can't assign to function call |
| |
| [case testTwoStarExpressions] |
| a, *b, *c = 1 |
| *a, (*b, c) = 1 |
| a, (*b, *c) = 1 |
| [*a, *b] = 1 |
| [out] |
| main:1: error: Two starred expressions in assignment |
| main:3: error: Two starred expressions in assignment |
| main:4: error: Two starred expressions in assignment |
| |
| [case testTwoStarExpressionsInForStmt] |
| z = 1 |
| for a, *b, *c in z: |
| pass |
| for *a, (*b, c) in z: |
| pass |
| for a, (*b, *c) in z: |
| pass |
| for [*a, *b] in z: |
| pass |
| [out] |
| main:2: error: Two starred expressions in assignment |
| main:6: error: Two starred expressions in assignment |
| main:8: error: Two starred expressions in assignment |
| |
| [case testTwoStarExpressionsInGeneratorExpr] |
| (a for a, *b, *c in []) |
| (a for *a, (*b, c) in []) |
| (a for a, (*b, *c) in []) |
| [out] |
| main:1: error: Name 'a' is not defined |
| main:1: error: Two starred expressions in assignment |
| main:3: error: Two starred expressions in assignment |
| |
| [case testStarExpressionRhs] |
| b = 1 |
| c = 1 |
| d = 1 |
| a = *b |
| [out] |
| main:4: error: Can use starred expression only as assignment target |
| |
| [case testStarExpressionInExp] |
| a = 1 |
| *a + 1 |
| [out] |
| main:2: error: Can use starred expression only as assignment target |
| |
| [case testInvalidDel1] |
| x = 1 |
| del x(1) # E: can't delete function call |
| [out] |
| |
| [case testInvalidDel2] |
| x = 1 |
| del x + 1 # E: can't delete operator |
| [out] |
| |
| [case testInvalidDel3] |
| del z # E: Name 'z' is not defined |
| [out] |
| |
| [case testFunctionTvarScope] |
| |
| from typing import TypeVar |
| t = TypeVar('t') |
| def f(x: t) -> t: pass |
| x = 0 # type: t |
| [out] |
| main:5: error: Type variable "__main__.t" is unbound |
| main:5: note: (Hint: Use "Generic[t]" or "Protocol[t]" base class to bind "t" inside a class) |
| main:5: note: (Hint: Use "t" in function signature to bind "t" inside a function) |
| |
| [case testClassTvarScope] |
| |
| from typing import Generic, TypeVar |
| t = TypeVar('t') |
| class c(Generic[t]): pass |
| x = 0 # type: t |
| [out] |
| main:5: error: Type variable "__main__.t" is unbound |
| main:5: note: (Hint: Use "Generic[t]" or "Protocol[t]" base class to bind "t" inside a class) |
| main:5: note: (Hint: Use "t" in function signature to bind "t" inside a function) |
| |
| [case testExpressionRefersToTypeVariable] |
| from typing import TypeVar, Generic |
| t = TypeVar('t') |
| class c(Generic[t]): |
| def f(self) -> None: x = t |
| def f(y: t): x = t |
| [out] |
| main:4: error: 't' is a type variable and only valid in type context |
| main:5: error: 't' is a type variable and only valid in type context |
| |
| [case testMissingSelf] |
| import typing |
| class A: |
| def f(): pass |
| [out] |
| main:3: error: Method must have at least one argument |
| |
| [case testInvalidBaseClass] |
| import typing |
| class A(B): pass |
| [out] |
| main:2: error: Name 'B' is not defined |
| |
| [case testSuperOutsideClass] |
| class A: pass |
| super().x |
| def f() -> None: super().y |
| [out] |
| main:2: error: "super" used outside class |
| main:3: error: "super" used outside class |
| |
| [case testMissingSelfInMethod] |
| import typing |
| class A: |
| def f() -> None: pass |
| def g(): pass |
| [out] |
| main:3: error: Method must have at least one argument |
| main:4: error: Method must have at least one argument |
| |
| [case testMultipleMethodDefinition] |
| import typing |
| class A: |
| def f(self) -> None: pass |
| def g(self) -> None: pass |
| def f(self, x: object) -> None: pass |
| [out] |
| main:5: error: Name 'f' already defined on line 3 |
| |
| [case testInvalidGlobalDecl] |
| import typing |
| def f() -> None: |
| global x |
| x = None |
| [out] |
| main:4: error: Name 'x' is not defined |
| |
| [case testInvalidNonlocalDecl] |
| import typing |
| def f(): |
| def g() -> None: |
| nonlocal x |
| x = None |
| [out] |
| main:4: error: No binding for nonlocal 'x' found |
| main:5: error: Name 'x' is not defined |
| |
| [case testNonlocalDeclNotMatchingGlobal] |
| import typing |
| x = None |
| def f() -> None: |
| nonlocal x |
| x = None |
| [out] |
| main:4: error: No binding for nonlocal 'x' found |
| main:5: error: Name 'x' is not defined |
| |
| [case testNonlocalDeclConflictingWithParameter] |
| import typing |
| def g(): |
| x = None |
| def f(x) -> None: |
| nonlocal x |
| x = None |
| [out] |
| main:5: error: Name 'x' is already defined in local scope before nonlocal declaration |
| |
| [case testNonlocalDeclOutsideFunction] |
| x = 2 |
| nonlocal x |
| [out] |
| main:2: error: nonlocal declaration not allowed at module level |
| |
| [case testGlobalAndNonlocalDecl] |
| import typing |
| x = 1 |
| def f(): |
| x = 1 |
| def g() -> None: |
| global x |
| nonlocal x |
| x = None |
| [out] |
| main:7: error: Name 'x' is nonlocal and global |
| |
| [case testNonlocalAndGlobalDecl] |
| import typing |
| x = 1 |
| def f(): |
| x = 1 |
| def g() -> None: |
| nonlocal x |
| global x |
| x = None |
| [out] |
| main:7: error: Name 'x' is nonlocal and global |
| |
| [case testNestedFunctionAndScoping] |
| import typing |
| def f(x) -> None: |
| def g(y): |
| z = x |
| z |
| y |
| x |
| [out] |
| main:5: error: Name 'z' is not defined |
| main:6: error: Name 'y' is not defined |
| |
| [case testMultipleNestedFunctionDef] |
| import typing |
| def f(x) -> None: |
| def g(): pass |
| x = 1 |
| def g(): pass |
| [out] |
| main:5: error: Name 'g' already defined on line 3 |
| |
| [case testRedefinedOverloadedFunction] |
| from typing import overload, Any |
| def f() -> None: |
| @overload |
| def p(o: object) -> None: pass # no error |
| @overload |
| def p(o: Any) -> None: pass # no error |
| x = 1 |
| def p(): pass # fail |
| [out] |
| main:3: error: An overloaded function outside a stub file must have an implementation |
| main:8: error: Name 'p' already defined on line 3 |
| |
| [case testNestedFunctionInMethod] |
| import typing |
| class A: |
| def f(self) -> None: |
| def g() -> None: |
| x |
| y |
| [out] |
| main:5: error: Name 'x' is not defined |
| main:6: error: Name 'y' is not defined |
| |
| [case testImportScope] |
| import typing |
| def f() -> None: |
| import x |
| x.y # E: Name 'x' is not defined |
| [file x.py] |
| y = 1 |
| [out] |
| |
| [case testImportScope2] |
| import typing |
| def f() -> None: |
| from x import y |
| y |
| y # E: Name 'y' is not defined |
| [file x.py] |
| y = 1 |
| [out] |
| |
| [case testImportScope3] |
| import typing |
| def f() -> None: |
| from x import * |
| y |
| y # E: Name 'y' is not defined |
| [file x.py] |
| y = 1 |
| [out] |
| |
| [case testImportScope4] |
| import typing |
| class A: |
| from x import * |
| y |
| y # E: Name 'y' is not defined |
| [file x.py] |
| y = 1 |
| [out] |
| |
| [case testScopeOfNestedClass] |
| import typing |
| def f(): |
| class A: pass |
| A |
| A # E: Name 'A' is not defined |
| [out] |
| |
| [case testScopeOfNestedClass2] |
| import typing |
| class A: |
| class B: pass |
| B # E: Name 'B' is not defined |
| [out] |
| |
| [case testScopeOfNestedClass3] |
| import typing |
| class A: |
| def f(self): |
| class B: pass |
| B # E: Name 'B' is not defined |
| B # E: Name 'B' is not defined |
| [out] |
| |
| [case testInvalidNestedClassReferenceInDecl] |
| import typing |
| class A: pass |
| foo = 0 # type: A.x # E: Name 'A.x' is not defined |
| [out] |
| |
| [case testTvarScopingWithNestedClass] |
| |
| from typing import TypeVar, Generic |
| t = TypeVar('t') |
| s = TypeVar('s') |
| class A(Generic[t]): |
| class B(Generic[s]): |
| x = 0 # type: A[s] |
| y = 0 # type: A[t] # E: Type variable "__main__.t" is unbound \ |
| # N: (Hint: Use "Generic[t]" or "Protocol[t]" base class to bind "t" inside a class) \ |
| # N: (Hint: Use "t" in function signature to bind "t" inside a function) |
| z = 0 # type: A[s] # E: Type variable "__main__.s" is unbound \ |
| # N: (Hint: Use "Generic[s]" or "Protocol[s]" base class to bind "s" inside a class) \ |
| # N: (Hint: Use "s" in function signature to bind "s" inside a function) |
| a = 0 # type: A[t] |
| [out] |
| |
| [case testTestExtendPrimitives] |
| class C(bool): pass # E: 'bool' is not a valid base class |
| class A(int): pass # ok |
| class B(float): pass # ok |
| class D(str): pass # ok |
| [builtins fixtures/primitives.pyi] |
| [out] |
| |
| [case testCyclicInheritance1] |
| |
| class A(A): pass # E: Cannot resolve name "A" (possible cyclic definition) |
| [out] |
| |
| [case testCyclicInheritance2] |
| |
| class A(B): pass # E: Cannot resolve name "B" (possible cyclic definition) |
| class B(A): pass |
| [out] |
| |
| [case testAssignToTypeDef] |
| import typing |
| class A: pass |
| A = None # E: Cannot assign to a type |
| [out] |
| |
| [case testInvalidCastTargetSyntax] |
| |
| from typing import cast, TypeVar, Generic |
| t = TypeVar('t') |
| class C(Generic[t]): pass |
| cast(str + str, None) # E: Cast target is not a type |
| cast(C[str][str], None) # E: Cast target is not a type |
| cast(C[str + str], None) # E: Cast target is not a type |
| cast([int, str], None) # E: Bracketed expression "[...]" is not valid as a type \ |
| # N: Did you mean "List[...]"? |
| [out] |
| |
| [case testInvalidCastTargetType] |
| |
| from typing import cast |
| x = 0 |
| cast(x, None) # E: Variable "__main__.x" is not valid as a type \ |
| # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases |
| cast(t, None) # E: Name 't' is not defined |
| cast(__builtins__.x, None) # E: Name '__builtins__.x' is not defined |
| [out] |
| |
| [case testInvalidCastTargetType2] |
| from typing import cast |
| x = 0 |
| cast(str[str], None) # E: "str" expects no type arguments, but 1 given |
| [out] |
| |
| [case testInvalidNumberOfArgsToCast] |
| from typing import cast |
| cast(str) # E: 'cast' expects 2 arguments |
| cast(str, None, None) # E: 'cast' expects 2 arguments |
| [out] |
| |
| [case testInvalidKindsOfArgsToCast] |
| from typing import cast |
| cast(str, *None) # E: 'cast' must be called with 2 positional arguments |
| cast(str, target=None) # E: 'cast' must be called with 2 positional arguments |
| [out] |
| |
| [case testInvalidAnyCall] |
| from typing import Any |
| Any(str, None) # E: Any(...) is no longer supported. Use cast(Any, ...) instead |
| Any(arg=str) # E: Any(...) is no longer supported. Use cast(Any, ...) instead |
| [out] |
| |
| [case testTypeListAsType] |
| |
| def f(x:[int, str]) -> None: # E: Bracketed expression "[...]" is not valid as a type \ |
| # N: Did you mean "List[...]"? |
| pass |
| [out] |
| |
| [case testInvalidFunctionType] |
| from typing import Callable |
| x = None # type: Callable[int, str] |
| y = None # type: Callable[int] |
| z = None # type: Callable[int, int, int] |
| [out] |
| main:2: error: The first argument to Callable must be a list of types or "..." |
| main:3: error: Please use "Callable[[<parameters>], <return type>]" or "Callable" |
| main:4: error: Please use "Callable[[<parameters>], <return type>]" or "Callable" |
| |
| [case testAbstractGlobalFunction] |
| import typing |
| from abc import abstractmethod |
| @abstractmethod |
| def foo(): pass |
| [out] |
| main:3: error: 'abstractmethod' used with a non-method |
| |
| [case testAbstractNestedFunction] |
| import typing |
| from abc import abstractmethod |
| def g() -> None: |
| @abstractmethod |
| def foo(): pass |
| [out] |
| main:4: error: 'abstractmethod' used with a non-method |
| |
| [case testInvalidTypeDeclaration] |
| import typing |
| def f(): pass |
| f() = 1 # type: int |
| [out] |
| main:3: error: can't assign to function call |
| |
| [case testIndexedAssignmentWithTypeDeclaration] |
| import typing |
| None[1] = 1 # type: int |
| [out] |
| main:2: error: Unexpected type declaration |
| |
| [case testNonSelfMemberAssignmentWithTypeDeclaration] |
| import typing |
| None.x = 1 # type: int |
| [out] |
| main:2: error: Type cannot be declared in assignment to non-self attribute |
| |
| [case testNonSelfMemberAssignmentWithTypeDeclarationInMethod] |
| import typing |
| class A: |
| def f(self, x) -> None: |
| x.y = 1 # type: int |
| [out] |
| main:4: error: Type cannot be declared in assignment to non-self attribute |
| |
| [case testInvalidTypeInTypeApplication] |
| |
| from typing import TypeVar, Generic |
| t = TypeVar('t') |
| class A(Generic[t]): pass |
| A[TypeVar] # E: Variable "typing.TypeVar" is not valid as a type \ |
| # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases |
| [out] |
| |
| [case testInvalidTypeInTypeApplication2] |
| from typing import TypeVar, Generic |
| t = TypeVar('t') |
| class A(Generic[t]): pass |
| A[1] # E: Invalid type: try using Literal[1] instead? |
| [out] |
| |
| [case testVariableDeclWithInvalidNumberOfTypes] |
| x, y = 1, 2 # type: int, str, int # E: Incompatible number of tuple items |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testVariableDeclWithInvalidNumberOfTypesNested] |
| x, (y, z) = 1, (2, 3) # type: int, (str, int, int) # E: Incompatible number of tuple items |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testVariableDeclWithInvalidNumberOfTypesNested2] |
| x, (y, z) = 1, (2, 3) # type: int, (str, ) # E: Incompatible number of tuple items |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testVariableDeclWithInvalidNumberOfTypesNested3] |
| x, (y, z) = 1, (2, 3) # type: int, str # E: Tuple type expected for multiple variables |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testVariableDeclWithInvalidNumberOfTypesNested4] |
| x, (y, z) = 1, (2, 3) # type: int, str, int # E: Incompatible number of tuple items |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testVariableDeclWithInvalidNumberOfTypesNested5] |
| x, (y, ) = 1, (2, ) # type: int, str # E: Tuple type expected for multiple variables |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testVariableDeclWithInvalidType] |
| x, y = 1, 2 # type: int # E: Tuple type expected for multiple variables |
| [out] |
| |
| [case testInvalidLvalueWithExplicitType] |
| a = 1 |
| a() = None # type: int # E: can't assign to function call |
| [out] |
| |
| [case testInvalidLvalueWithExplicitType2] |
| a = 1 |
| a[1] = None # type: int # E: Unexpected type declaration |
| a.x = None # type: int \ |
| # E: Type cannot be declared in assignment to non-self attribute |
| [out] |
| |
| [case testInvalidLvalueWithExplicitType3] |
| a = 1 |
| a.y, a.x = None, None # type: int, int \ |
| # E: Type cannot be declared in assignment to non-self attribute |
| a[1], a[2] = None, None # type: int, int \ |
| # E: Unexpected type declaration |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testMissingGenericImport] |
| from typing import TypeVar |
| T = TypeVar('T') |
| class A(Generic[T]): pass |
| [out] |
| main:3: error: Name 'Generic' is not defined |
| |
| [case testInvalidTypeWithinGeneric] |
| from typing import Generic |
| class A(Generic[int]): pass # E: Free type variable expected in Generic[...] |
| [out] |
| |
| [case testInvalidTypeWithinNestedGenericClass] |
| from typing import Generic, TypeVar |
| T = TypeVar('T') |
| class A(Generic[T]): |
| class B(Generic[T]): pass \ |
| # E: Free type variable expected in Generic[...] |
| [out] |
| |
| [case testIncludingGenericTwiceInBaseClassList] |
| from typing import Generic, TypeVar |
| T = TypeVar('T') |
| S = TypeVar('S') |
| class A(Generic[T], Generic[S]): pass \ |
| # E: Only single Generic[...] or Protocol[...] can be in bases |
| [out] |
| |
| [case testInvalidMetaclass] |
| class A(metaclass=x): pass # E: Name 'x' is not defined |
| [out] |
| |
| [case testInvalidQualifiedMetaclass] |
| import abc |
| class A(metaclass=abc.Foo): pass # E: Name 'abc.Foo' is not defined |
| [out] |
| |
| [case testNonClassMetaclass] |
| def f(): pass |
| class A(metaclass=f): pass # E: Invalid metaclass 'f' |
| [out] |
| |
| [case testInvalidTypevarArguments] |
| from typing import TypeVar |
| a = TypeVar() # E: Too few arguments for TypeVar() |
| b = TypeVar(x='b') # E: TypeVar() expects a string literal as first argument |
| c = TypeVar(1) # E: TypeVar() expects a string literal as first argument |
| d = TypeVar('D') # E: String argument 1 'D' to TypeVar(...) does not match variable name 'd' |
| e = TypeVar('e', int, str, x=1) # E: Unexpected argument to TypeVar(): x |
| f = TypeVar('f', (int, str), int) # E: Type expected |
| g = TypeVar('g', int) # E: TypeVar cannot have only a single constraint |
| h = TypeVar('h', x=(int, str)) # E: Unexpected argument to TypeVar(): x |
| i = TypeVar('i', bound=1) # E: TypeVar 'bound' must be a type |
| [out] |
| |
| [case testMoreInvalidTypevarArguments] |
| from typing import TypeVar |
| T = TypeVar('T', int, str, bound=bool) # E: TypeVar cannot have both values and an upper bound |
| S = TypeVar('S', covariant=True, contravariant=True) \ |
| # E: TypeVar cannot be both covariant and contravariant |
| [builtins fixtures/bool.pyi] |
| |
| [case testInvalidTypevarValues] |
| from typing import TypeVar |
| b = TypeVar('b', *[int]) # E: Unexpected argument to TypeVar() |
| c = TypeVar('c', int, 2) # E: Invalid type: try using Literal[2] instead? |
| [out] |
| |
| [case testObsoleteTypevarValuesSyntax] |
| from typing import TypeVar |
| a = TypeVar('a', values=(int, str)) |
| [out] |
| main:2: error: TypeVar 'values' argument not supported |
| main:2: error: Use TypeVar('T', t, ...) instead of TypeVar('T', values=(t, ...)) |
| |
| [case testLocalTypevarScope] |
| from typing import TypeVar |
| def f() -> None: |
| T = TypeVar('T') |
| def g(x: T) -> None: pass # E: Name 'T' is not defined |
| [out] |
| |
| [case testClassTypevarScope] |
| from typing import TypeVar |
| class A: |
| T = TypeVar('T') |
| def g(x: T) -> None: pass # E: Name 'T' is not defined |
| [out] |
| |
| [case testRedefineVariableAsTypevar] |
| from typing import TypeVar |
| x = 0 |
| x = TypeVar('x') # E: Cannot redefine 'x' as a type variable |
| [out] |
| |
| [case testTypevarWithType] |
| from typing import TypeVar |
| x = TypeVar('x') # type: int # E: Cannot declare the type of a type variable |
| [out] |
| |
| [case testRedefineTypevar] |
| from typing import TypeVar |
| t = TypeVar('t') |
| t = 1 # E: Invalid assignment target |
| [out] |
| |
| [case testRedefineTypevar2] |
| from typing import TypeVar |
| t = TypeVar('t') |
| def t(): pass # E: Name 't' already defined on line 2 |
| [out] |
| |
| [case testRedefineTypevar3] |
| from typing import TypeVar |
| t = TypeVar('t') |
| class t: pass # E: Name 't' already defined on line 2 |
| [out] |
| |
| [case testRedefineTypevar4] |
| from typing import TypeVar |
| t = TypeVar('t') |
| from typing import Generic as t # E: Name 't' already defined on line 2 |
| [out] |
| |
| [case testInvalidStrLiteralType] |
| def f(x: 'foo'): pass # E: Name 'foo' is not defined |
| [out] |
| |
| [case testInvalidStrLiteralStrayBrace] |
| def f(x: 'int['): pass # E: Invalid type comment or annotation |
| [out] |
| |
| [case testInvalidStrLiteralSpaces] |
| def f(x: 'A B'): pass # E: Invalid type comment or annotation |
| [out] |
| |
| [case testInvalidMultilineLiteralType] |
| def f() -> "A\nB": pass # E: Invalid type comment or annotation |
| [out] |
| |
| [case testInconsistentOverload] |
| from typing import overload |
| def dec(x): pass |
| @dec # E: The implementation for an overloaded function must come last |
| def f(): pass |
| @overload |
| def f(): pass |
| [out] |
| |
| [case testInconsistentOverload2] |
| from typing import overload |
| def dec(x): pass |
| @dec # E: The implementation for an overloaded function must come last |
| def f(): pass |
| @overload |
| def f(): pass |
| [out] |
| |
| [case testMissingOverloadDecorator] |
| from typing import overload |
| def dec(x): pass |
| @dec |
| def f(): pass |
| @dec # E: Name 'f' already defined on line 3 |
| def f(): pass |
| [out] |
| |
| [case testIncompatibleSignatureInComment] |
| import typing |
| def f(): # type: (int) -> int |
| pass |
| def g(x): # type: () -> int |
| pass |
| [out] |
| main:2: error: Type signature has too many arguments |
| main:4: error: Type signature has too few arguments |
| |
| [case testStaticmethodAndNonMethod] |
| import typing |
| @staticmethod |
| def f(): pass |
| class A: |
| def g(self) -> None: |
| @staticmethod |
| def h(): pass |
| [builtins fixtures/staticmethod.pyi] |
| [out] |
| main:2: error: 'staticmethod' used with a non-method |
| main:6: error: 'staticmethod' used with a non-method |
| |
| [case testClassmethodAndNonMethod] |
| import typing |
| @classmethod |
| def f(): pass |
| class A: |
| def g(self) -> None: |
| @classmethod |
| def h(): pass |
| [builtins fixtures/classmethod.pyi] |
| [out] |
| main:2: error: 'classmethod' used with a non-method |
| main:6: error: 'classmethod' used with a non-method |
| |
| [case testNonMethodProperty] |
| import typing |
| @property # E: 'property' used with a non-method |
| def f() -> int: pass |
| [builtins fixtures/property.pyi] |
| [out] |
| |
| [case testInvalidArgCountForProperty] |
| import typing |
| class A: |
| @property |
| def f(self, x) -> int: pass # E: Too many arguments |
| @property |
| def g() -> int: pass # E: Method must have at least one argument |
| [builtins fixtures/property.pyi] |
| [out] |
| |
| [case testOverloadedProperty] |
| from typing import overload |
| class A: |
| @overload # E: Decorated property not supported |
| @property |
| def f(self) -> int: pass |
| @property # E: Decorated property not supported |
| @overload |
| def f(self) -> int: pass |
| [builtins fixtures/property.pyi] |
| [out] |
| |
| [case testOverloadedProperty2] |
| from typing import overload |
| class A: |
| @overload # E: An overloaded function outside a stub file must have an implementation |
| def f(self) -> int: pass |
| @property # E: Decorated property not supported |
| @overload |
| def f(self) -> int: pass |
| [builtins fixtures/property.pyi] |
| [out] |
| |
| [case testDecoratedProperty] |
| import typing |
| def dec(f): pass |
| class A: |
| @dec # E: Decorated property not supported |
| @property |
| def f(self) -> int: pass |
| @property # E: Decorated property not supported |
| @dec |
| def g(self) -> int: pass |
| [builtins fixtures/property.pyi] |
| [out] |
| |
| [case testImportTwoModulesWithSameNameInFunction] |
| import typing |
| def f() -> None: |
| import x |
| import y as x # E: Name 'x' already defined (by an import) |
| x.y |
| [file x.py] |
| y = 1 |
| [file y.py] |
| [out] |
| |
| [case testImportTwoModulesWithSameNameInGlobalContext] |
| import typing |
| import x |
| import y as x # E: Name 'x' already defined (by an import) |
| x.y |
| [file x.py] |
| y = 1 |
| [file y.py] |
| [out] |
| |
| [case testListTypeAliasWithoutImport] |
| import typing |
| def f() -> List[int]: pass |
| [builtins fixtures/list.pyi] |
| [out] |
| main:2: error: Name 'List' is not defined |
| main:2: note: Did you forget to import it from "typing"? (Suggestion: "from typing import List") |
| |
| [case testInvalidWithTarget] |
| def f(): pass |
| with f() as 1: pass # E: can't assign to literal |
| [out] |
| |
| [case testInvalidTypeAnnotation] |
| import typing |
| def f() -> None: |
| 1[2] = 1 # type: int |
| [out] |
| main:3: error: Unexpected type declaration |
| |
| [case testInvalidTypeAnnotation2] |
| import typing |
| def f() -> None: |
| f() = 1 # type: int |
| [out] |
| main:3: error: can't assign to function call |
| |
| [case testInvalidReferenceToAttributeOfOuterClass] |
| class A: |
| class X: pass |
| class B: |
| y = X # E: Name 'X' is not defined |
| [out] |
| |
| [case testStubPackage] |
| from m import x |
| from m import y # E: Module 'm' has no attribute 'y' |
| [file m/__init__.pyi] |
| x = 1 |
| [out] |
| |
| [case testStubPackageSubModule] |
| from m import x |
| from m import y # E: Module 'm' has no attribute 'y' |
| from m.m2 import y |
| from m.m2 import z # E: Module 'm.m2' has no attribute 'z' |
| [file m/__init__.pyi] |
| x = 1 |
| [file m/m2.pyi] |
| y = 1 |
| [out] |
| |
| [case testListComprehensionSpecialScoping] |
| class A: |
| x = 1 |
| y = 1 |
| z = 1 |
| [x for i in z if y] |
| [out] |
| main:5: error: Name 'x' is not defined |
| main:5: error: Name 'y' is not defined |
| |
| [case testTypeRedeclarationNoSpuriousWarnings] |
| from typing import Tuple |
| a = 1 # type: int |
| a = 's' # type: str |
| a = ('spam', 'spam', 'eggs', 'spam') # type: Tuple[str] |
| [builtins fixtures/tuple.pyi] |
| |
| [out] |
| main:3: error: Name 'a' already defined on line 2 |
| main:4: error: Name 'a' already defined on line 2 |
| |
| [case testDuplicateDefFromImport] |
| from m import A |
| class A: # E: Name 'A' already defined (possibly by an import) |
| pass |
| [file m.py] |
| class A: |
| pass |
| [out] |
| |
| [case testDuplicateDefDec] |
| from typing import Any |
| def dec(x: Any) -> Any: |
| return x |
| @dec |
| def f() -> None: |
| pass |
| @dec # E: Name 'f' already defined on line 4 |
| def f() -> None: |
| pass |
| [out] |
| |
| [case testDuplicateDefOverload] |
| from typing import overload, Any |
| if 1: |
| @overload |
| def f(x: int) -> None: |
| pass |
| @overload |
| def f(x: str) -> None: |
| pass |
| def f(x: Any) -> None: |
| pass |
| else: |
| def f(x: str) -> None: # E: Name 'f' already defined on line 3 |
| pass |
| [out] |
| |
| [case testDuplicateDefNT] |
| from typing import NamedTuple |
| N = NamedTuple('N', [('a', int), |
| ('b', str)]) |
| |
| class N: # E: Name 'N' already defined on line 2 |
| pass |
| [builtins fixtures/tuple.pyi] |
| [out] |
| |
| [case testDuplicateDefTypedDict] |
| from mypy_extensions import TypedDict |
| Point = TypedDict('Point', {'x': int, 'y': int}) |
| |
| class Point: # E: Name 'Point' already defined on line 2 |
| pass |
| [builtins fixtures/dict.pyi] |
| |
| [out] |
| |
| [case testTypeVarClassDup] |
| from typing import TypeVar |
| T = TypeVar('T') |
| class T: ... # E: Name 'T' already defined on line 2 |
| |
| [out] |
| |
| [case testAliasDup] |
| from typing import List |
| A = List[int] |
| class A: ... # E: Name 'A' already defined on line 2 |
| |
| [builtins fixtures/list.pyi] |
| [out] |
| |
| [case testNoInvalidTypeInDynamicFunctions] |
| |
| from typing import Dict, TypeVar |
| T = TypeVar('T') |
| |
| def f(): # Note no annotation |
| x: Dict[str, T] = {} |
| y: T |
| z: x |
| def nested(): pass |
| t: nested |
| |
| def g() -> None: |
| x: Dict[str, T] = {} # E: Type variable "__main__.T" is unbound \ |
| # N: (Hint: Use "Generic[T]" or "Protocol[T]" base class to bind "T" inside a class) \ |
| # N: (Hint: Use "T" in function signature to bind "T" inside a function) |
| [builtins fixtures/dict.pyi] |
| [out] |
| |
| [case testParamSpec] |
| # flags: --wip-pep-612 |
| from typing_extensions import ParamSpec |
| |
| TParams = ParamSpec('TParams') |
| TP = ParamSpec('?') # E: String argument 1 '?' to ParamSpec(...) does not match variable name 'TP' |
| TP2: int = ParamSpec('TP2') # E: Cannot declare the type of a parameter specification |
| |
| [out] |