
-- String interpolation
-- --------------------

[case testStringInterpolationType]
from typing import Tuple
i: int
f: float
s: str
t: Tuple[int]
'%d' % i
'%f' % f
'%s' % s
'%d' % (f,)
'%d' % (s,) # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float, SupportsInt]")
'%d' % t
'%d' % s  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float, SupportsInt]")
'%f' % s  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float, SupportsFloat]")
'%x' % f  # E: Incompatible types in string interpolation (expression has type "float", placeholder has type "int")
'%i' % f
'%o' % f  # E: Incompatible types in string interpolation (expression has type "float", placeholder has type "int")
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationSAcceptsAnyType]
from typing import Any
i: int
o: object
s: str
'%s %s %s' % (i, o, s)
[builtins fixtures/primitives.pyi]

[case testStringInterpolationSBytesVsStrErrorPy3]
xb: bytes
xs: str

'%s' % xs   # OK
'%s' % xb   # E: If x = b'abc' then "%s" % x produces "b'abc'", not "abc". If this is desired behavior use "%r" % x. Otherwise, decode the bytes
'%(name)s' % {'name': b'value'}  # E: If x = b'abc' then "%s" % x produces "b'abc'", not "abc". If this is desired behavior use "%r" % x. Otherwise, decode the bytes
[builtins fixtures/primitives.pyi]

[case testStringInterpolationCount]
'%d %d' % 1  # E: Not enough arguments for format string
'%d %d' % (1, 2)
'%d %d' % (1, 2, 3)  # E: Not all arguments converted during string formatting
t = 1, 's'
'%d %s' % t
'%s %d' % t  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float, SupportsInt]")
'%d' % t  # E: Not all arguments converted during string formatting
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationWithAnyType]
from typing import Any
a = None # type: Any
'%d %d' % a
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationInvalidPlaceholder]
'%W' % 1  # E: Unsupported format character "W"
'%b' % 1  # E: Format character "b" is only supported on bytes patterns

[case testStringInterpolationWidth]
'%2f' % 3.14
'%*f' % 3.14 # E: Not enough arguments for format string
'%*f' % (4, 3.14)
'%*f' % (1.1, 3.14) # E: * wants int
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationPrecision]
'%.2f' % 3.14
'%.*f' % 3.14 # E: Not enough arguments for format string
'%.*f' % (4, 3.14)
'%.*f' % (1.1, 3.14) # E: * wants int
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationWidthAndPrecision]
'%4.2f' % 3.14
'%4.*f' % 3.14 # E: Not enough arguments for format string
'%*.2f' % 3.14 # E: Not enough arguments for format string
'%*.*f' % 3.14 # E: Not enough arguments for format string
'%*.*f' % (4, 2, 3.14)
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationFlagsAndLengthModifiers]
'%04hd' % 1
'%-.4ld' % 1
'%+*Ld' % (1, 1)
'% .*ld' % (1, 1)
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationDoublePercentage]
'%% %d' % 1
'%3% %d' % 1
'%*%' % 1
'%*% %d' % 1  # E: Not enough arguments for format string
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationC]
'%c' % 1
'%c' % 1.0   # E: "%c" requires int or char (expression has type "float")
'%c' % 's'
'%c' % ''    # E: "%c" requires int or char
'%c' % 'ab'  # E: "%c" requires int or char
'%c' % b'a'  # E: "%c" requires int or char (expression has type "bytes")
'%c' % b''   # E: "%c" requires int or char (expression has type "bytes")
'%c' % b'ab' # E: "%c" requires int or char (expression has type "bytes")
[builtins fixtures/primitives.pyi]

[case testStringInterpolationMappingTypes]
'%(a)d %(b)s' % {'a': 1, 'b': 's'}
'%(a)d %(b)s' % {'a': 's', 'b': 1}  # E: Incompatible types in string interpolation (expression has type "str", placeholder with key 'a' has type "Union[int, float, SupportsInt]")
b'%(x)s' % {b'x': b'data'}
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationMappingKeys]
'%()d' % {'': 2}
'%(a)d' % {'a': 1, 'b': 2, 'c': 3}
'%(q)d' % {'a': 1, 'b': 2, 'c': 3}  # E: Key "q" not found in mapping
'%(a)d %%' % {'a': 1}
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationMappingDictTypes]
from typing import Any, Dict, Iterable

class StringThing:
    def keys(self) -> Iterable[str]:
        ...
    def __getitem__(self, __key: str) -> str:
        ...

class BytesThing:
    def keys(self) -> Iterable[bytes]:
        ...
    def __getitem__(self, __key: bytes) -> str:
        ...

a: Any
ds: Dict[str, int]
do: Dict[object, int]
di: Dict[int, int]
'%(a)' % 1  # E: Format requires a mapping (expression has type "int", expected type for mapping is "SupportsKeysAndGetItem[str, Any]")
'%()d' % a
'%()d' % ds
'%()d' % do  # E: Format requires a mapping (expression has type "Dict[object, int]", expected type for mapping is "SupportsKeysAndGetItem[str, Any]")
b'%()d' % ds  # E: Format requires a mapping (expression has type "Dict[str, int]", expected type for mapping is "SupportsKeysAndGetItem[bytes, Any]")
'%()s' % StringThing()
b'%()s' % BytesThing()
[builtins fixtures/primitives.pyi]

[case testStringInterpolationMappingInvalidSpecifiers]
'%(a)d %d' % 1  # E: String interpolation mixes specifier with and without mapping keys
'%(b)*d' % 1  # E: String interpolation contains both stars and mapping keys
'%(b).*d' % 1  # E: String interpolation contains both stars and mapping keys

[case testStringInterpolationMappingFlagsAndLengthModifiers]
'%(a)1d' % {'a': 1}
'%(a).1d' % {'a': 1}
'%(a)#1.1ld' % {'a': 1}
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationFloatPrecision]
'%.f' % 1.2
'%.3f' % 1.2
'%.f' % 'x'
'%.3f' % 'x'
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]
[out]
main:3: error: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float, SupportsFloat]")
main:4: error: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float, SupportsFloat]")

[case testStringInterpolationSpaceKey]
'%( )s' % {' ': 'foo'}

[case testStringInterpolationStarArgs]
x = (1, 2)
"%d%d" % (*x,)
[typing fixtures/typing-medium.pyi]
[builtins fixtures/tuple.pyi]

[case testStringInterpolationVariableLengthTuple]
from typing import Tuple
def f(t: Tuple[int, ...]) -> None:
    '%d %d' % t
    '%d %d %d' % t
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testStringInterpolationUnionType]
from typing import Tuple, Union
a: Union[Tuple[int, str], Tuple[str, int]] = ('A', 1)
'%s %s' % a
'%s' % a  # E: Not all arguments converted during string formatting

b: Union[Tuple[int, str], Tuple[int, int], Tuple[str, int]] = ('A', 1)
'%s %s' % b
'%s %s %s' % b  # E: Not enough arguments for format string

c: Union[Tuple[str, int], Tuple[str, int, str]] = ('A', 1)
'%s %s' % c  # E: Not all arguments converted during string formatting
[builtins fixtures/tuple.pyi]

[case testStringInterpolationIterableType]
from typing import Sequence, List, Tuple, Iterable

t1: Sequence[str] = ('A', 'B')
t2: List[str] = ['A', 'B']
t3: Tuple[str, ...] = ('A', 'B')
t4: Tuple[str, str] = ('A', 'B')
t5: Iterable[str] = ('A', 'B')
'%s %s' % t1
'%s %s' % t2
'%s %s' % t3
'%s %s %s' % t3
'%s %s' % t4
'%s %s %s' % t4 # E: Not enough arguments for format string
'%s %s' % t5
[builtins fixtures/tuple.pyi]


-- Bytes interpolation
-- --------------------

[case testBytesInterpolation]
b'%b' % 1  # E: Incompatible types in string interpolation (expression has type "int", placeholder has type "bytes")
b'%b' % b'1'
b'%a' % 3

[case testBytesInterpolationC]
b'%c' % 1
b'%c' % 1.0   # E: "%c" requires an integer in range(256) or a single byte (expression has type "float")
b'%c' % 's'   # E: "%c" requires an integer in range(256) or a single byte (expression has type "str")
b'%c' % ''    # E: "%c" requires an integer in range(256) or a single byte (expression has type "str")
b'%c' % 'ab'  # E: "%c" requires an integer in range(256) or a single byte (expression has type "str")
b'%c' % b'a'
b'%c' % b''   # E: "%c" requires an integer in range(256) or a single byte
b'%c' % b'aa' # E: "%c" requires an integer in range(256) or a single byte
[builtins fixtures/primitives.pyi]

[case testByteByteInterpolation]
def foo(a: bytes, b: bytes):
    b'%s:%s' % (a, b)
foo(b'a', b'b') == b'a:b'
[builtins fixtures/tuple.pyi]

[case testBytePercentInterpolationSupported]
b'%s' % (b'xyz',)
b'%(name)s' % {'name': b'jane'}  # E: Dictionary keys in bytes formatting must be bytes, not strings
b'%(name)s' % {b'name': 'jane'}  # E: On Python 3 b'%s' requires bytes, not string
b'%c' % (123)
[builtins fixtures/tuple.pyi]


-- str.format() calls
-- ------------------


[case testFormatCallParseErrors]
'}'.format()  # E: Invalid conversion specifier in format string: unexpected }
'{'.format()  # E: Invalid conversion specifier in format string: unmatched {

'}}'.format()  # OK
'{{'.format()  # OK

'{{}}}'.format()  # E: Invalid conversion specifier in format string: unexpected }
'{{{}}'.format()  # E: Invalid conversion specifier in format string: unexpected }

'{}}{{}'.format()  # E: Invalid conversion specifier in format string: unexpected }
'{{{}:{}}}'.format(0)  # E: Cannot find replacement for positional format specifier 1
[builtins fixtures/primitives.pyi]

[case testFormatCallValidationErrors]
'{!}}'.format(0)  # E: Invalid conversion specifier in format string: unexpected }
'{!x}'.format(0)  # E: Invalid conversion type "x", must be one of "r", "s" or "a"
'{!:}'.format(0)  # E: Invalid conversion specifier in format string

'{{}:s}'.format(0)  # E: Invalid conversion specifier in format string: unexpected }
'{{}.attr}'.format(0)  # E: Invalid conversion specifier in format string: unexpected }
'{{}[key]}'.format(0)  # E: Invalid conversion specifier in format string: unexpected }

'{ {}:s}'.format()  # E: Conversion value must not contain { or }
'{ {}.attr}'.format()  # E: Conversion value must not contain { or }
'{ {}[key]}'.format()  # E: Conversion value must not contain { or }
[builtins fixtures/primitives.pyi]

[case testFormatCallEscaping]
'{}'.format()  # E: Cannot find replacement for positional format specifier 0
'{}'.format(0)  # OK

'{{}}'.format()  # OK
'{{}}'.format(0)  # E: Not all arguments converted during string formatting

'{{{}}}'.format()  # E: Cannot find replacement for positional format specifier 0
'{{{}}}'.format(0)  # OK

'{{}} {} {{}}'.format(0)  # OK
'{{}} {:d} {{}} {:d}'.format('a', 'b')  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")

'foo({}, {}) == {{}} ({{}} expected)'.format(0)  # E: Cannot find replacement for positional format specifier 1
'foo({}, {}) == {{}} ({{}} expected)'.format(0, 1)  # OK
'foo({}, {}) == {{}} ({{}} expected)'.format(0, 1, 2)  # E: Not all arguments converted during string formatting
[builtins fixtures/primitives.pyi]

[case testFormatCallNestedFormats]
'{:{}{}}'.format(42, '*')  # E: Cannot find replacement for positional format specifier 2
'{:{}{}}'.format(42, '*', '^')  # OK
'{:{}{}}'.format(42, '*', '^', 0)  # E: Not all arguments converted during string formatting

# NOTE: we don't check format specifiers that contain { or } at all
'{:{{}}}'.format()  # E: Cannot find replacement for positional format specifier 0

'{:{:{}}}'.format()  # E: Formatting nesting must be at most two levels deep
'{:{{}:{}}}'.format()  # E: Invalid conversion specifier in format string: unexpected }

'{!s:{fill:d}{align}}'.format(42, fill='*', align='^')  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
[builtins fixtures/primitives.pyi]

[case testFormatCallAutoNumbering]
'{}, {{}}, {0}'.format()  # E: Cannot combine automatic field numbering and manual field specification
'{0}, {1}, {}'.format()  # E: Cannot combine automatic field numbering and manual field specification

'{0}, {1}, {0}'.format(1, 2, 3)  # E: Not all arguments converted during string formatting
'{}, {other:+d}, {}'.format(1, 2, other='no')  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
'{0}, {other}, {}'.format()  # E: Cannot combine automatic field numbering and manual field specification

'{:{}}, {:{:.5d}{}}'.format(1, 2, 3, 'a', 5)  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
[builtins fixtures/primitives.pyi]

[case testFormatCallMatchingPositional]
'{}'.format(positional='no')  # E: Cannot find replacement for positional format specifier 0 \
                              # E: Not all arguments converted during string formatting
'{.x}, {}, {}'.format(1, 'two', 'three')  # E: "int" has no attribute "x"
'Reverse {2.x}, {1}, {0}'.format(1, 2, 'three')  # E: "str" has no attribute "x"
''.format(1, 2)  # E: Not all arguments converted during string formatting
[builtins fixtures/primitives.pyi]

[case testFormatCallMatchingNamed]
'{named}'.format(0)  # E: Cannot find replacement for named format specifier "named" \
                     # E: Not all arguments converted during string formatting
'{one.x}, {two}'.format(one=1, two='two')  # E: "int" has no attribute "x"
'{one}, {two}, {.x}'.format(1, one='two', two='three')  # E: "int" has no attribute "x"
''.format(stuff='yes')  # E: Not all arguments converted during string formatting
[builtins fixtures/primitives.pyi]

[case testFormatCallMatchingVarArg]
from typing import List
args: List[int] = []
'{}, {}'.format(1, 2, *args)  # Don't flag this because args may be empty

strings: List[str]
'{:d}, {[0].x}'.format(*strings)  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int") \
                                  # E: "str" has no attribute "x"
# TODO: this is a runtime error, but error message is confusing
'{[0][:]:d}'.format(*strings)  # E: Syntax error in format specifier "0[0]["
[builtins fixtures/primitives.pyi]

[case testFormatCallMatchingKwArg]
from typing import Dict
kwargs: Dict[str, str] = {}
'{one}, {two}'.format(one=1, two=2, **kwargs)  # Don't flag this because args may be empty

'{stuff:.3d}'.format(**kwargs)  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
'{stuff[0]:f}, {other}'.format(**kwargs)  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float]")
'{stuff[0]:c}'.format(**kwargs)
[builtins fixtures/primitives.pyi]

[case testFormatCallCustomFormatSpec]
from typing import Union
class Bad:
    ...
class Good:
    def __format__(self, spec: str) -> str: ...

'{:OMG}'.format(Good())
'{:OMG}'.format(Bad())  # E: Unrecognized format specification "OMG"
'{!s:OMG}'.format(Good())  # E: Unrecognized format specification "OMG"
'{:{}OMG{}}'.format(Bad(), 'too', 'dynamic')

x: Union[Good, Bad]
'{:OMG}'.format(x)  # E: Unrecognized format specification "OMG"
[builtins fixtures/primitives.pyi]

[case testFormatCallFormatTypes]
'{:x}'.format(42)
'{:E}'.format(42)
'{:g}'.format(42)
'{:x}'.format('no')  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
'{:E}'.format('no')  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float]")
'{:g}'.format('no')  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float]")
'{:n}'.format(3.14)
'{:d}'.format(3.14)  # E: Incompatible types in string interpolation (expression has type "float", placeholder has type "int")

'{:s}'.format(42)
'{:s}'.format('yes')

'{:z}'.format('what')  # E: Unsupported format character "z"
'{:Z}'.format('what')  # E: Unsupported format character "Z"
[builtins fixtures/primitives.pyi]

[case testFormatCallFormatTypesChar]
'{:c}'.format(42)
'{:c}'.format('no')  # E: ":c" requires int or char
'{:c}'.format('c')

class C:
    ...
'{:c}'.format(C())  # E: Incompatible types in string interpolation (expression has type "C", placeholder has type "Union[int, str]")
x: str
'{:c}'.format(x)
[builtins fixtures/primitives.pyi]

[case testFormatCallFormatTypesCustomFormat]
from typing import Union
class Bad:
    ...
class Good:
    def __format__(self, spec: str) -> str: ...

x: Union[Good, Bad]
y: Union[Good, int]
z: Union[Bad, int]
t: Union[Good, str]
'{:d}'.format(x)  # E: Incompatible types in string interpolation (expression has type "Bad", placeholder has type "int")
'{:d}'.format(y)
'{:d}'.format(z)  # E: Incompatible types in string interpolation (expression has type "Bad", placeholder has type "int")
'{:d}'.format(t)  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
[builtins fixtures/primitives.pyi]

[case testFormatCallFormatTypesBytes]
from typing import Union, TypeVar, NewType, Generic

A = TypeVar('A', str, bytes)
B = TypeVar('B', bound=bytes)

x: Union[str, bytes]
a: str
b: bytes

N = NewType('N', bytes)
n: N

'{}'.format(a)
'{}'.format(b)  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes
'{}'.format(x)  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes
'{}'.format(n)  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes

f'{b}'  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes
f'{x}'  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes
f'{n}'  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes

class C(Generic[B]):
    x: B
    def meth(self) -> None:
        '{}'.format(self.x)  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes

def func(x: A) -> A:
    '{}'.format(x)  # E: If x = b'abc' then f"{x}" or "{}".format(x) produces "b'abc'", not "abc". If this is desired behavior, use f"{x!r}" or "{!r}".format(x). Otherwise, decode the bytes
    return x

'{!r}'.format(a)
'{!r}'.format(b)
'{!r}'.format(x)
'{!r}'.format(n)
f'{a}'
f'{a!r}'
f'{b!r}'
f'{x!r}'
f'{n!r}'

class D(bytes):
    def __str__(self) -> str:
        return "overrides __str__ of bytes"

'{}'.format(D())
[builtins fixtures/primitives.pyi]

[case testFormatCallFinal]
from typing_extensions import Final

FMT: Final = '{.x}, {:{:d}}'

FMT.format(1, 2, 'no')  # E: "int" has no attribute "x" \
                        # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
[builtins fixtures/primitives.pyi]

[case testFormatCallFinalChar]
from typing_extensions import Final

GOOD: Final = 'c'
BAD: Final = 'no'
OK: Final[str] = '...'

'{:c}'.format(GOOD)
'{:c}'.format(BAD)  # E: ":c" requires int or char
'{:c}'.format(OK)
[builtins fixtures/primitives.pyi]

[case testFormatCallForcedConversions]
'{!r}'.format(42)
'{!s}'.format(42)
'{!s:d}'.format(42)  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "int")
'{!s:s}'.format('OK')
'{} and {!x}'.format(0, 1)  # E: Invalid conversion type "x", must be one of "r", "s" or "a"
[builtins fixtures/primitives.pyi]

[case testFormatCallAccessorsBasic]
from typing import Any
x: Any

'{.x:{[0]}}'.format('yes', 42)  # E: "str" has no attribute "x" \
                                # E: Value of type "int" is not indexable

'{.1+}'.format(x)  # E: Syntax error in format specifier "0.1+"
'{name.x[x]()[x]:.2f}'.format(name=x)  # E: Only index and member expressions are allowed in format field accessors; got "name.x[x]()[x]"
[builtins fixtures/primitives.pyi]

[case testFormatCallAccessorsIndices]
from typing_extensions import TypedDict

class User(TypedDict):
    id: int
    name: str

u: User
'{user[name]:.3f}'.format(user=u)  # E: Incompatible types in string interpolation (expression has type "str", placeholder has type "Union[int, float]")

def f() -> str: ...
'{[f()]}'.format(u)  # E: Invalid index expression in format field accessor "[f()]"
[builtins fixtures/primitives.pyi]

[case testFormatCallFlags]
from typing import Union

class Good:
    def __format__(self, spec: str) -> str: ...

'{:#}'.format(42)

'{:#}'.format('no')  # E: Numeric flags are only allowed for numeric types
'{!s:#}'.format(42)  # E: Numeric flags are only allowed for numeric types

'{:#s}'.format(42)  # E: Numeric flags are only allowed for numeric types
'{:+s}'.format(42)  # E: Numeric flags are only allowed for numeric types

'{:+d}'.format(42)
'{:#d}'.format(42)

x: Union[float, Good]
'{:+f}'.format(x)
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]

[case testFormatCallSpecialCases]
'{:08b}'.format(int('3'))

class S:
    def __int__(self) -> int: ...

'{:+d}'.format(S())  # E: Incompatible types in string interpolation (expression has type "S", placeholder has type "int")
'%d' % S()  # This is OK however
'{:%}'.format(0.001)
[builtins fixtures/primitives.pyi]
[typing fixtures/typing-medium.pyi]
