| [case testNewSyntaxSyntaxError] | |
| x: int: int # E: Expected a statement | |
| [out] | |
| [case testNewSyntaxBasics] | |
| x: int | |
| x = 5 | |
| y: int = 5 | |
| a: str | |
| a = 5 # E: Incompatible types in assignment (expression has type "int", variable has type "str") | |
| b: str = 5 # E: Incompatible types in assignment (expression has type "int", variable has type "str") | |
| zzz: int | |
| zzz: str # E: Name "zzz" already defined on line 9 | |
| [out] | |
| [case testNewSyntaxWithDict] | |
| from typing import Dict, Any | |
| d: Dict[int, str] = {} | |
| d[42] = 'ab' | |
| d[42] = 42 # E: Incompatible types in assignment (expression has type "int", target has type "str") | |
| d['ab'] = 'ab' # E: Invalid index type "str" for "dict[int, str]"; expected type "int" | |
| [builtins fixtures/dict.pyi] | |
| [out] | |
| [case testNewSyntaxWithRevealType] | |
| from typing import Dict | |
| def tst_local(dct: Dict[int, T]) -> Dict[T, int]: | |
| ret: Dict[T, int] = {} | |
| return ret | |
| reveal_type(tst_local({1: 'a'})) # N: Revealed type is "builtins.dict[builtins.str, builtins.int]" | |
| [builtins fixtures/dict.pyi] | |
| [out] | |
| [case testNewSyntaxWithInstanceVars] | |
| class TstInstance: | |
| a: str | |
| def __init__(self) -> None: | |
| self.x: int | |
| TstInstance().x = 5 | |
| TstInstance().x = 'ab' # E: Incompatible types in assignment (expression has type "str", variable has type "int") | |
| TstInstance().a = 5 # E: Incompatible types in assignment (expression has type "int", variable has type "str") | |
| TstInstance().a = 'ab' | |
| [out] | |
| [case testNewSyntaxWithClassVars] | |
| class CCC: | |
| a: str = None # E: Incompatible types in assignment (expression has type "None", variable has type "str") | |
| [out] | |
| [case testNewSyntaxWithStrictOptional] | |
| strict: int | |
| strict = None # E: Incompatible types in assignment (expression has type "None", variable has type "int") | |
| strict2: int = None # E: Incompatible types in assignment (expression has type "None", variable has type "int") | |
| [out] | |
| [case testNewSyntaxWithStrictOptionalFunctions] | |
| def f() -> None: | |
| x: int | |
| if int(): | |
| x = None # E: Incompatible types in assignment (expression has type "None", variable has type "int") | |
| [out] | |
| [case testNewSyntaxWithStrictOptionalClasses] | |
| class C: | |
| def meth(self) -> None: | |
| x: int = None # E: Incompatible types in assignment (expression has type "None", variable has type "int") | |
| self.x: int = None # E: Incompatible types in assignment (expression has type "None", variable has type "int") | |
| [out] | |
| [case testNewSyntaxSpecialAssign] | |
| class X: | |
| x: str | |
| x[0]: int | |
| x.x: int | |
| [out] | |
| main:3: error: Unexpected type declaration | |
| main:3: error: Unsupported target for indexed assignment ("str") | |
| main:4: error: Type cannot be declared in assignment to non-self attribute | |
| main:4: error: "str" has no attribute "x" | |
| [case testNewSyntaxFStringBasics] | |
| f'foobar' | |
| f'{"foobar"}' | |
| f'foo{"bar"}' | |
| f'.{1}.' | |
| f'{type(1)}' | |
| a: str | |
| a = f'foobar' | |
| a = f'{"foobar"}' | |
| [builtins fixtures/f_string.pyi] | |
| [case testNewSyntaxFStringExpressionsOk] | |
| f'.{1 + 1}.' | |
| f'.{1 + 1}.{"foo" + "bar"}' | |
| [builtins fixtures/f_string.pyi] | |
| [case testNewSyntaxFStringExpressionsErrors] | |
| f'{1 + ""}' | |
| f'.{1 + ""}' | |
| [builtins fixtures/f_string.pyi] | |
| [out] | |
| main:1: error: Unsupported operand types for + ("int" and "str") | |
| main:2: error: Unsupported operand types for + ("int" and "str") | |
| [case testNewSyntaxFStringParseFormatOptions] | |
| value = 10.5142 | |
| width = 10 | |
| precision = 4 | |
| f'result: {value:{width}.{precision}}' | |
| [builtins fixtures/f_string.pyi] | |
| [case testNewSyntaxFStringSingleField] | |
| v = 1 | |
| reveal_type(f'{v}') # N: Revealed type is "builtins.str" | |
| reveal_type(f'{1}') # N: Revealed type is "builtins.str" | |
| [builtins fixtures/f_string.pyi] | |
| -- Native parser can parse future versions of Python | |
| [case testFeatureVersionSuggestion_old_parser] | |
| # flags: --python-version 3.99 | |
| x *** x this is what future python looks like public static void main String[] args await goto exit | |
| [out] | |
| main:2: error: Invalid syntax; you likely need to run mypy using Python 3.99 or newer |