[case testFastParseSyntaxError_no_native_parse] 1 + # E: Invalid syntax [case testFastParseTypeCommentSyntaxError_no_native_parse] x = None # type: a : b # E: Syntax error in type comment "a : b" [case testFastParseInvalidTypeComment] x = None # type: a + b # E: Invalid type comment or annotation -- Function type comments are attributed to the function def line. -- This happens in both parsers. [case testFastParseFunctionAnnotationSyntaxError_no_native_parse] def f(): # E: Syntax error in type comment "None -> None" # N: Suggestion: wrap argument types in parentheses # type: None -> None pass [case testFastParseFunctionAnnotationSyntaxErrorSpaces_no_native_parse] def f(): # E: Syntax error in type comment "None -> None" # N: Suggestion: wrap argument types in parentheses # type: None -> None pass [case testFastParseInvalidFunctionAnnotation] def f(x): # E: Invalid type comment or annotation # type: (a + b) -> None pass [case testFastParseInvalidTypes3] # All of these should not crash from typing import Callable, Tuple, Iterable x: Tuple[int, str].x # E: Invalid type comment or annotation a: Iterable[x].x # E: Invalid type comment or annotation b: Tuple[x][x] # E: Invalid type comment or annotation c: Iterable[x][x] # E: Invalid type comment or annotation d: Callable[..., int][x] # E: Invalid type comment or annotation e: Callable[..., int].x # E: Invalid type comment or annotation f = None # type: Tuple[int, str].x # E: Invalid type comment or annotation g = None # type: Iterable[x].x # E: Invalid type comment or annotation h = None # type: Tuple[x][x] # E: Invalid type comment or annotation i = None # type: Iterable[x][x] # E: Invalid type comment or annotation j = None # type: Callable[..., int][x] # E: Invalid type comment or annotation k = None # type: Callable[..., int].x # E: Invalid type comment or annotation def f1(x: Tuple[int, str].x) -> None: pass # E: Invalid type comment or annotation def f2(x: Iterable[x].x) -> None: pass # E: Invalid type comment or annotation def f3(x: Tuple[x][x]) -> None: pass # E: Invalid type comment or annotation def f4(x: Iterable[x][x]) -> None: pass # E: Invalid type comment or annotation def f5(x: Callable[..., int][x]) -> None: pass # E: Invalid type comment or annotation def f6(x: Callable[..., int].x) -> None: pass # E: Invalid type comment or annotation [case testFastParseTypeWithIgnore] def f(x, # type: x # type: ignore ): # type: (...) -> None pass [case testFastParseVariableTypeWithIgnore] x = 1 # type: str # type: ignore [case testFastParseVariableTypeWithIgnoreNoSpace] x = 1 # type: str #type:ignore [case testFastParseVariableTypeWithIgnoreAndComment] x = 1 # type: str # type: ignore # comment [case testFastParseTypeWithIgnoreWithStmt] with open('test', 'r') as f: # type: int # type: ignore pass [case testFastParseTypeWithIgnoreForStmt] for i in (1, 2, 3, 100): # type: str # type: ignore pass [builtins fixtures/tuple.pyi] [case testFastParseVariableCommentThenIgnore] a="test" # type: int #comment # type: ignore # E: Incompatible types in assignment (expression has type "str", variable has type "int") [case testFastParseProperty] class C: @property def x(self) -> str: pass @x.setter def x(self, value: str) -> None: pass [builtins fixtures/property.pyi] [case testFastParseConditionalProperty] class C: if bool(): @property def x(self) -> str: pass @x.setter def x(self, value: str) -> None: pass [builtins fixtures/property.pyi] [case testFastParsePerArgumentAnnotations] # flags: --implicit-optional class A: pass class B: pass class C: pass class D: pass class E: pass class F: pass def f(a, # type: A b = None, # type: B *args, # type: C d = None, # type: D e, # type: E **kwargs # type: F ): reveal_type(a) # N: Revealed type is "__main__.A" reveal_type(b) # N: Revealed type is "__main__.B | None" reveal_type(args) # N: Revealed type is "builtins.tuple[__main__.C, ...]" reveal_type(d) # N: Revealed type is "__main__.D | None" reveal_type(e) # N: Revealed type is "__main__.E" reveal_type(kwargs) # N: Revealed type is "builtins.dict[builtins.str, __main__.F]" [builtins fixtures/dict.pyi] [out] [case testFastParsePerArgumentAnnotationsWithReturn] # flags: --implicit-optional class A: pass class B: pass class C: pass class D: pass class E: pass class F: pass def f(a, # type: A b = None, # type: B *args, # type: C d = None, # type: D e, # type: E **kwargs # type: F ): # type: (...) -> int reveal_type(a) # N: Revealed type is "__main__.A" reveal_type(b) # N: Revealed type is "__main__.B | None" reveal_type(args) # N: Revealed type is "builtins.tuple[__main__.C, ...]" reveal_type(d) # N: Revealed type is "__main__.D | None" reveal_type(e) # N: Revealed type is "__main__.E" reveal_type(kwargs) # N: Revealed type is "builtins.dict[builtins.str, __main__.F]" return "not an int" # E: Incompatible return value type (got "str", expected "int") [builtins fixtures/dict.pyi] [out] [case testFastParsePerArgumentAnnotationsWithAnnotatedBareStar_no_native_parse] def f(*, # type: int # E: Bare * has associated type comment x # type: str ): # type: (...) -> int pass [builtins fixtures/dict.pyi] [out] [case testFastParsePerArgumentAnnotationsWithReturnAndBareStar] def f(*, x # type: str ): # type: (...) -> int reveal_type(x) # N: Revealed type is "builtins.str" return "not an int" # E: Incompatible return value type (got "str", expected "int") [builtins fixtures/dict.pyi] [out] [case testFasterParseTooManyArgumentsAnnotation] def f(): # E: Type signature has too many parameters # type: (int) -> None pass f() f(1) # E: Too many arguments for "f" [case testFasterParseTooFewArgumentsAnnotation] def f(x, y): # E: Type signature has too few parameters # type: (int) -> None x() y() f(1, 2) f(1) # E: Missing positional argument "y" in call to "f" [case testFasterParseTypeErrorCustom] from typing import TypeVar, Generic T = TypeVar('T') class Foo(Generic[T]): pass def f(a: Foo(int)) -> int: pass [out] main:7: error: Invalid type comment or annotation main:7: note: Suggestion: use Foo[...] instead of Foo(...) [case testFasterParseCallWithKeywordArgs] def Foo(sort: bool) -> type: return int def f(a: Foo(sort=True)) -> int: pass [out] main:5: error: Invalid type comment or annotation main:5: note: Cannot use a function call in a type annotation [case testFastParseMatMul] from typing import Any x = None # type: Any x @ 1 x @= 1 [case testFastParserShowsMultipleErrors] def f(x): # E: Type signature has too few parameters # type: () -> None pass def g(): # E: Type signature has too many parameters # type: (int) -> None pass [case testFastParseMalformedAssert] assert 1, 2 assert (1, 2) # E: Assertion is always true, perhaps remove parentheses? assert (1, 2), 3 # E: Assertion is always true, perhaps remove parentheses? assert (1,) # E: Assertion is always true, perhaps remove parentheses? assert () [builtins fixtures/tuple.pyi] [case testFastParseAssertMessage] assert 1 assert 1, 2 assert 1, 1+2 assert 1, 1+'test' # E: Unsupported operand types for + ("int" and "str") assert 1, f() # E: Name "f" is not defined [case testFastParserConsistentFunctionTypes] def f1(x, y, z): # type: (int, int, int) -> int pass def f2(x, # type: int # E: Function has duplicate type signatures y, # type: int z # type: int ): # type: (int, int, int) -> int pass def f3(x, # type: int y, # type: int z # type: int ): # type: (...) -> int pass def f4(x, y, z): # type: (int, int, int) -> int pass def f5(x) -> int: # E: Function has duplicate type signatures # type: (int) -> int pass def f6(x: int, y: int, z: int): # type: (...) -> int pass def f7(x: int): # E: Function has duplicate type signatures # type: (int) -> int pass [case testFastParserDuplicateNames_no_native_parse] def f(x, y, z): pass def g(x, y, x): # E: Duplicate parameter "x" in function definition pass def h(x, y, *x): # E: Duplicate parameter "x" in function definition pass def i(x, y, *z, **z): # E: Duplicate parameter "z" in function definition pass def j(x: int, y: int, *, x: int = 3): # E: Duplicate parameter "x" in function definition pass def k(*, y, z, y): # E: Duplicate parameter "y" in function definition pass lambda x, y, x: ... # E: Duplicate parameter "x" in function definition [case testNoCrashOnImportFromStar] from pack import * [file pack/__init__.py] from . import * [case testNoCrashOnImportFromStarNested] import blamodule [file blamodule/__init__.py] from . import command from . import backends [file blamodule/backends/__init__.py] from .Bla import Bla Bla().method() [file blamodule/backends/Bla.py] from .. import * class Bla: def method(self) -> str: return command.call() [file blamodule/command.py] def call() -> str: pass [builtins fixtures/module.pyi] [case testInvalidEscapeSequenceWarningsSuppressed] # flags: --python-version 3.14 --enable-incomplete-feature=TypeForm # Test that SyntaxWarnings for invalid escape sequences are suppressed # when parsing potential type expressions containing regex patterns or # similar strings. Callable arguments are always potential type expressions. from typing import TypeForm def identity(typx: TypeForm) -> TypeForm: return typx # This should not generate SyntaxWarning despite invalid escape sequence identity(r"re\.match") # E: Argument 1 to "identity" has incompatible type "str"; expected "TypeForm[Any]" [builtins fixtures/tuple.pyi] [typing fixtures/typing-full.pyi]