blob: 4fdabc1ab479e3c21f4731605c172a62ed0e68ac [file] [log] [blame] [edit]
[case testFastParseSyntaxError]
1 + # E: invalid syntax
[case testFastParseTypeCommentSyntaxError]
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]
def f(): # E: syntax error in type comment 'None -> None' # N: Suggestion: wrap argument types in parentheses
# type: None -> None
pass
[case testFastParseFunctionAnnotationSyntaxErrorSpaces]
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 testFastParseInvalidTypes2]
# flags: --py2
# All of these should not crash
from typing import Callable, Tuple, Iterable
x = None # type: Tuple[int, str].x # E: Invalid type comment or annotation
a = None # type: Iterable[x].x # E: Invalid type comment or annotation
b = None # type: Tuple[x][x] # E: Invalid type comment or annotation
c = None # type: Iterable[x][x] # E: Invalid type comment or annotation
d = None # type: Callable[..., int][x] # E: Invalid type comment or annotation
e = None # type: Callable[..., int].x # E: Invalid type comment or annotation
def f1(x): # E: Invalid type comment or annotation
# type: (Tuple[int, str].x) -> None
pass
def f2(x): # E: Invalid type comment or annotation
# type: (Iterable[x].x) -> None
pass
def f3(x): # E: Invalid type comment or annotation
# type: (Tuple[x][x]) -> None
pass
def f4(x): # E: Invalid type comment or annotation
# type: (Iterable[x][x]) -> None
pass
def f5(x): # E: Invalid type comment or annotation
# type: (Callable[..., int][x]) -> None
pass
def f6(x): # E: Invalid type comment or annotation
# type: (Callable[..., int].x) -> None
pass
[case testFastParseInvalidTypes3]
# flags: --python-version 3.6
# 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]
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 'Union[__main__.B, None]'
reveal_type(args) # N: Revealed type is 'builtins.tuple[__main__.C]'
reveal_type(d) # N: Revealed type is 'Union[__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]
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 'Union[__main__.B, None]'
reveal_type(args) # N: Revealed type is 'builtins.tuple[__main__.C]'
reveal_type(d) # N: Revealed type is 'Union[__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]
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 testFastParsePerArgumentAnnotations_python2]
class A: pass
class B: pass
class C: pass
class D: pass
def f(a, # type: A
b = None, # type: B
*args # type: C
# kwargs not tested due to lack of 2.7 dict fixtures
):
reveal_type(a) # N: Revealed type is '__main__.A'
reveal_type(b) # N: Revealed type is 'Union[__main__.B, None]'
reveal_type(args) # N: Revealed type is 'builtins.tuple[__main__.C]'
[builtins fixtures/dict.pyi]
[out]
[case testFastParsePerArgumentAnnotationsWithReturn_python2]
class A: pass
class B: pass
class C: pass
class D: pass
def f(a, # type: A
b = None, # type: B
*args # type: C
# kwargs not tested due to lack of 2.7 dict fixtures
):
# type: (...) -> int
reveal_type(a) # N: Revealed type is '__main__.A'
reveal_type(b) # N: Revealed type is 'Union[__main__.B, None]'
reveal_type(args) # N: Revealed type is 'builtins.tuple[__main__.C]'
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 arguments
# 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 arguments
# type: (int) -> None
x()
y()
f(1, 2)
f(1) # E: Missing positional argument "y" in call to "f"
[case testFasterParseTooManyArgumentsAnnotation_python2]
def f(): # E: Type signature has too many arguments
# type: (int) -> None
pass
f()
f(1) # E: Too many arguments for "f"
[case testFasterParseTooFewArgumentsAnnotation_python2]
def f(x, y): # E: Type signature has too few arguments
# type: (int) -> None
x()
y()
f(1, 2)
f(1) # E: Missing positional argument "y" in call to "f"
[case testFasterParseTypeCommentError_python2]
from typing import Tuple
def f(a):
# type: (Tuple(int, int)) -> int
pass
[out]
main:2: error: Invalid type comment or annotation
main:2: note: Suggestion: use Tuple[...] instead of Tuple(...)
[case testFasterParseTypeErrorList_python2]
from typing import List
def f(a):
# type: (List(int)) -> int
pass
[builtins_py2 fixtures/floatdict_python2.pyi]
[out]
main:2: error: Invalid type comment or annotation
main:2: note: Suggestion: use List[...] instead of List(...)
[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 testFastParseMatMul]
from typing import Any
x = None # type: Any
x @ 1
x @= 1
[case testIncorrectTypeCommentIndex]
from typing import Dict
x = None # type: Dict[x: y]
[out]
main:3: error: syntax error in type comment
[case testPrintStatementTrailingCommaFastParser_python2]
print 0,
print 1, 2,
[case testFastParserShowsMultipleErrors]
def f(x): # E: Type signature has too few arguments
# type: () -> None
pass
def g(): # E: Type signature has too many arguments
# 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 ()
assert (1,) # E: Assertion is always true, perhaps remove parentheses?
[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 f(x, y, z):
# type: (int, int, int) -> int
pass
def f(x, # type: int # E: Function has duplicate type signatures
y, # type: int
z # type: int
):
# type: (int, int, int) -> int
pass
def f(x, # type: int
y, # type: int
z # type: int
):
# type: (...) -> int
pass
def f(x, y, z):
# type: (int, int, int) -> int
pass
def f(x) -> int: # E: Function has duplicate type signatures
# type: (int) -> int
pass
def f(x: int, y: int, z: int):
# type: (...) -> int
pass
def f(x: int): # E: Function has duplicate type signatures
# type: (int) -> int
pass
[case testFastParserDuplicateNames]
def f(x, y, z):
pass
def g(x, y, x): # E: Duplicate argument 'x' in function definition
pass
def h(x, y, *x): # E: Duplicate argument 'x' in function definition
pass
def i(x, y, *z, **z): # E: Duplicate argument 'z' in function definition
pass
def j(x: int, y: int, *, x: int = 3): # E: Duplicate argument 'x' in function definition
pass
def k(*, y, z, y): # E: Duplicate argument 'y' in function definition
pass
lambda x, y, x: ... # E: Duplicate argument 'x' in function definition
[case testFastParserDuplicateNames_python2]
def f(x, y, z):
pass
def g(x, y, x): # E: Duplicate argument 'x' in function definition
pass
def h(x, y, *x): # E: Duplicate argument 'x' in function definition
pass
def i(x, y, *z, **z): # E: Duplicate argument 'z' in function definition
pass
def j(x, (y, y), z): # E: Duplicate argument 'y' in function definition
pass
def k(x, (y, x)): # E: Duplicate argument 'x' in function definition
pass
def l((x, y), (z, x)): # E: Duplicate argument 'x' in function definition
pass
def m(x, ((x, y), z)): # E: Duplicate argument 'x' in function definition
pass
lambda x, (y, x): None # E: Duplicate argument '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 testNoCrashOnImportFromStarPython2]
# flags: --py2
from . import * # E: No parent module -- cannot perform relative import
[case testSpuriousTrailingComma_python2]
from typing import Optional
def update_state(tid, # type: int
vid, # type: int
update_ts=None, # type: Optional[float],
): # type: (...) -> str
pass
[out]
main:3: error: Syntax error in type annotation
main:3: note: Suggestion: Is there a spurious trailing comma?