Insert blank lines prior to if statements - #171
Draft
AlexWaygood wants to merge 1 commit into
Draft
Conversation
This comment has been minimized.
This comment has been minimized.
AlexWaygood
force-pushed
the
prototype/blank-lines-before-if
branch
from
June 12, 2026 15:45
3c9a221 to
fb99f56
Compare
This comment has been minimized.
This comment has been minimized.
AlexWaygood
force-pushed
the
prototype/blank-lines-before-if
branch
from
June 12, 2026 15:47
fb99f56 to
3fbbdeb
Compare
|
⚠ Diff showing the effect of this PR on the typeshed stdlib: diff --git a/stdlib/_asyncio.pyi b/stdlib/_asyncio.pyi
index aeac0db..79ff14d 100644
--- a/stdlib/_asyncio.pyi
+++ b/stdlib/_asyncio.pyi
@@ -166,6 +166,7 @@ class Task(Future[_T_co]): # type: ignore[type-var] # pyright: ignore[reportIn
def get_name(self) -> str: ...
def set_name(self, value: object, /) -> None: ...
+
if sys.version_info >= (3, 12):
def get_context(self) -> Context: ...
diff --git a/stdlib/_blake2.pyi b/stdlib/_blake2.pyi
index a2cf379..716a7f0 100644
--- a/stdlib/_blake2.pyi
+++ b/stdlib/_blake2.pyi
@@ -25,6 +25,7 @@ class blake2b:
block_size: int
digest_size: int
name: str
+
if sys.version_info >= (3, 13):
def __new__(
cls,
@@ -87,6 +88,7 @@ class blake2s:
block_size: int
digest_size: int
name: str
+
if sys.version_info >= (3, 13):
def __new__(
cls,
diff --git a/stdlib/_collections_abc.pyi b/stdlib/_collections_abc.pyi
index 116cbca..6f60e95 100644
--- a/stdlib/_collections_abc.pyi
+++ b/stdlib/_collections_abc.pyi
@@ -66,8 +66,10 @@ __all__ = [
"Sequence",
"MutableSequence",
]
+
if sys.version_info < (3, 15):
__all__ += ["ByteString"]
+
if sys.version_info >= (3, 12):
__all__ += ["Buffer"]
@@ -80,6 +82,7 @@ class dict_keys(KeysView[_KT_co], Generic[_KT_co, _VT_co]): # undocumented
def __reversed__(self) -> Iterator[_KT_co]:
"""Return a reverse iterator over the dict keys."""
__hash__: ClassVar[None] # type: ignore[assignment]
+
if sys.version_info >= (3, 13):
def isdisjoint(self, other: Iterable[_KT_co], /) -> bool:
"""Return True if the view and the given iterable have a null intersection."""
@@ -103,6 +106,7 @@ class dict_items(ItemsView[_KT_co, _VT_co]): # undocumented
def __reversed__(self) -> Iterator[tuple[_KT_co, _VT_co]]:
"""Return a reverse iterator over the dict items."""
__hash__: ClassVar[None] # type: ignore[assignment]
+
if sys.version_info >= (3, 13):
def isdisjoint(self, other: Iterable[tuple[_KT_co, _VT_co]], /) -> bool:
"""Return True if the view and the given iterable have a null intersection."""
diff --git a/stdlib/_csv.pyi b/stdlib/_csv.pyi
index 28ac53f..8074320 100644
--- a/stdlib/_csv.pyi
+++ b/stdlib/_csv.pyi
@@ -13,6 +13,7 @@ QUOTE_ALL: Final = 1
QUOTE_MINIMAL: Final = 0
QUOTE_NONE: Final = 3
QUOTE_NONNUMERIC: Final = 2
+
if sys.version_info >= (3, 12):
QUOTE_STRINGS: Final = 4
QUOTE_NOTNULL: Final = 5
@@ -83,6 +84,7 @@ class Writer:
@property
def dialect(self) -> Dialect: ...
+
if sys.version_info >= (3, 13):
def writerow(self, row: Iterable[Any], /) -> Any:
"""Construct and write a CSV record from an iterable of fields.
diff --git a/stdlib/_ctypes.pyi b/stdlib/_ctypes.pyi
index 4c31686..ba7a4ff 100644
--- a/stdlib/_ctypes.pyi
+++ b/stdlib/_ctypes.pyi
@@ -313,6 +313,7 @@ class Union(_CData, metaclass=_UnionType):
_fields_: ClassVar[Sequence[tuple[str, type[_CDataType]] | tuple[str, type[_CDataType], int]]]
_pack_: ClassVar[int]
_anonymous_: ClassVar[Sequence[str]]
+
if sys.version_info >= (3, 13):
_align_: ClassVar[int]
@@ -343,6 +344,7 @@ class Structure(_CData, metaclass=_PyCStructType):
_fields_: ClassVar[Sequence[tuple[str, type[_CDataType]] | tuple[str, type[_CDataType], int]]]
_pack_: ClassVar[int]
_anonymous_: ClassVar[Sequence[str]]
+
if sys.version_info >= (3, 13):
_align_: ClassVar[int]
diff --git a/stdlib/_curses.pyi b/stdlib/_curses.pyi
index aa9e62c..9f301b8 100644
--- a/stdlib/_curses.pyi
+++ b/stdlib/_curses.pyi
@@ -94,6 +94,7 @@ BUTTON4_DOUBLE_CLICKED: Final[int]
BUTTON4_PRESSED: Final[int]
BUTTON4_RELEASED: Final[int]
BUTTON4_TRIPLE_CLICKED: Final[int]
+
# Darwin ncurses doesn't provide BUTTON5_* constants prior to 3.12.10 and 3.13.3
if sys.version_info >= (3, 12) or sys.platform != "darwin":
BUTTON5_PRESSED: Final[int]
diff --git a/stdlib/_decimal.pyi b/stdlib/_decimal.pyi
index 185ccdd..18977c1 100644
--- a/stdlib/_decimal.pyi
+++ b/stdlib/_decimal.pyi
@@ -27,6 +27,7 @@ _TrapType: TypeAlias = type[DecimalException]
__version__: Final[str]
__libmpdec_version__: Final[str]
+
if sys.version_info >= (3, 15):
SPEC_VERSION: Final[str]
@@ -44,6 +45,7 @@ MAX_EMAX: Final[int]
MAX_PREC: Final[int]
MIN_EMIN: Final[int]
MIN_ETINY: Final[int]
+
if sys.version_info >= (3, 14):
IEEE_CONTEXT_MAX_BITS: Final[int]
diff --git a/stdlib/_frozen_importlib.pyi b/stdlib/_frozen_importlib.pyi
index 3b3fa12..fe55b7b 100644
--- a/stdlib/_frozen_importlib.pyi
+++ b/stdlib/_frozen_importlib.pyi
@@ -151,6 +151,7 @@ class BuiltinImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader)
@classmethod
def get_source(cls, fullname: str) -> None:
"""Return None as built-in modules do not have source code."""
+
# Loader
if sys.version_info < (3, 12):
@staticmethod
@@ -216,6 +217,7 @@ class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader):
@classmethod
def get_source(cls, fullname: str) -> None:
"""Return None as frozen modules do not have source code."""
+
# Loader
if sys.version_info < (3, 12):
@staticmethod
diff --git a/stdlib/_frozen_importlib_external.pyi b/stdlib/_frozen_importlib_external.pyi
index 56c42e8..72fd273 100644
--- a/stdlib/_frozen_importlib_external.pyi
+++ b/stdlib/_frozen_importlib_external.pyi
@@ -343,6 +343,7 @@ if sys.version_info >= (3, 11):
@deprecated("Deprecated since Python 3.10; will be removed in Python 3.15. Use `exec_module()` instead.")
def load_module(self, fullname: str) -> types.ModuleType: ...
def get_resource_reader(self, module: types.ModuleType) -> importlib.readers.NamespaceReader: ...
+
if sys.version_info < (3, 12):
@staticmethod
@deprecated(
diff --git a/stdlib/_imp.pyi b/stdlib/_imp.pyi
index 1f47d2e..7a9c203 100644
--- a/stdlib/_imp.pyi
+++ b/stdlib/_imp.pyi
@@ -7,6 +7,7 @@ from importlib.machinery import ModuleSpec
from typing import Any
check_hash_based_pycs: str
+
if sys.version_info >= (3, 14):
pyc_magic_number_token: int
diff --git a/stdlib/_io.pyi b/stdlib/_io.pyi
index fcff6ce..023e304 100644
--- a/stdlib/_io.pyi
+++ b/stdlib/_io.pyi
@@ -549,6 +549,7 @@ class BufferedReader(BufferedIOBase, _BufferedIOBase, BinaryIO, Generic[_Buffere
"""Create a new buffered reader using the given readable raw IO object."""
raw: _BufferedReaderStreamT
+
if sys.version_info >= (3, 14):
def __init__(self, raw: _BufferedReaderStreamT, buffer_size: int = 131072) -> None: ...
else:
@@ -594,6 +595,7 @@ class BufferedWriter(BufferedIOBase, _BufferedIOBase, BinaryIO, Generic[_Buffere
"""
raw: _BufferedWriterStreamT
+
if sys.version_info >= (3, 14):
def __init__(self, raw: _BufferedWriterStreamT, buffer_size: int = 131072) -> None: ...
else:
@@ -615,6 +617,7 @@ class BufferedRandom(BufferedIOBase, _BufferedIOBase, BinaryIO): # type: ignore
mode: str
name: Any
raw: RawIOBase
+
if sys.version_info >= (3, 14):
def __init__(self, raw: RawIOBase, buffer_size: int = 131072) -> None: ...
else:
diff --git a/stdlib/_socket.pyi b/stdlib/_socket.pyi
index 605b9fe..da13311 100644
--- a/stdlib/_socket.pyi
+++ b/stdlib/_socket.pyi
@@ -81,12 +81,16 @@ SO_SNDBUF: Final[int]
SO_SNDLOWAT: Final[int]
SO_SNDTIMEO: Final[int]
SO_TYPE: Final[int]
+
if sys.platform != "linux":
SO_USELOOPBACK: Final[int]
+
if sys.platform == "win32":
SO_EXCLUSIVEADDRUSE: Final[int]
+
if sys.platform != "win32":
SO_REUSEPORT: Final[int]
+
if sys.platform != "darwin" or sys.version_info >= (3, 13):
SO_BINDTODEVICE: Final[int]
@@ -99,8 +103,10 @@ if sys.platform != "win32" and sys.platform != "darwin":
SO_PEERSEC: Final[int]
SO_PRIORITY: Final[int]
SO_PROTOCOL: Final[int]
+
if sys.platform != "win32" and sys.platform != "darwin" and sys.platform != "linux":
SO_SETFIB: Final[int]
+
if sys.platform == "linux" and sys.version_info >= (3, 13):
SO_BINDTOIFINDEX: Final[int]
@@ -112,22 +118,28 @@ MSG_OOB: Final[int]
MSG_PEEK: Final[int]
MSG_TRUNC: Final[int]
MSG_WAITALL: Final[int]
+
if sys.platform != "win32":
MSG_DONTWAIT: Final[int]
MSG_EOR: Final[int]
MSG_NOSIGNAL: Final[int] # Sometimes this exists on darwin, sometimes not
+
if sys.platform != "darwin":
MSG_ERRQUEUE: Final[int]
+
if sys.platform == "win32":
MSG_BCAST: Final[int]
MSG_MCAST: Final[int]
+
if sys.platform != "win32" and sys.platform != "darwin":
MSG_CMSG_CLOEXEC: Final[int]
MSG_CONFIRM: Final[int]
MSG_FASTOPEN: Final[int]
MSG_MORE: Final[int]
+
if sys.platform != "win32" and sys.platform != "linux":
MSG_EOF: Final[int]
+
if sys.platform != "win32" and sys.platform != "linux" and sys.platform != "darwin":
MSG_NOTIFICATION: Final[int]
MSG_BTAG: Final[int] # Not FreeBSD either
@@ -137,6 +149,7 @@ SOL_IP: Final[int]
SOL_SOCKET: Final[int]
SOL_TCP: Final[int]
SOL_UDP: Final[int]
+
if sys.platform != "win32" and sys.platform != "darwin":
# Defined in socket.h for Linux, but these aren't always present for
# some reason.
@@ -149,8 +162,10 @@ if sys.platform != "win32" and sys.platform != "darwin":
if sys.platform != "win32":
SCM_RIGHTS: Final[int]
+
if sys.platform != "win32" and sys.platform != "darwin":
SCM_CREDENTIALS: Final[int]
+
if sys.platform != "win32" and sys.platform != "linux":
SCM_CREDS: Final[int]
@@ -174,11 +189,13 @@ IPPROTO_PIM: Final[int]
IPPROTO_PUP: Final[int]
IPPROTO_ROUTING: Final[int]
IPPROTO_SCTP: Final[int]
+
if sys.platform != "linux":
IPPROTO_GGP: Final[int]
IPPROTO_IPV4: Final[int]
IPPROTO_MAX: Final[int]
IPPROTO_ND: Final[int]
+
if sys.platform == "win32":
IPPROTO_CBT: Final[int]
IPPROTO_ICLFXBM: Final[int]
@@ -187,23 +204,28 @@ if sys.platform == "win32":
IPPROTO_PGM: Final[int]
IPPROTO_RDP: Final[int]
IPPROTO_ST: Final[int]
+
if sys.platform != "win32":
IPPROTO_GRE: Final[int]
IPPROTO_IPIP: Final[int]
IPPROTO_RSVP: Final[int]
IPPROTO_TP: Final[int]
+
if sys.platform != "win32" and sys.platform != "linux":
IPPROTO_EON: Final[int]
IPPROTO_HELLO: Final[int]
IPPROTO_IPCOMP: Final[int]
IPPROTO_XTP: Final[int]
+
if sys.platform != "win32" and sys.platform != "darwin" and sys.platform != "linux":
IPPROTO_BIP: Final[int] # Not FreeBSD either
IPPROTO_MOBILE: Final[int] # Not FreeBSD either
IPPROTO_VRRP: Final[int] # Not FreeBSD either
+
if sys.platform == "linux":
# Availability: Linux >= 2.6.20, FreeBSD >= 10.1
IPPROTO_UDPLITE: Final[int]
+
if sys.platform == "linux":
IPPROTO_MPTCP: Final[int]
@@ -225,11 +247,13 @@ IP_MULTICAST_IF: Final[int]
IP_MULTICAST_LOOP: Final[int]
IP_MULTICAST_TTL: Final[int]
IP_OPTIONS: Final[int]
+
if sys.platform != "linux":
IP_RECVDSTADDR: Final[int]
IP_RECVTOS: Final[int]
IP_TOS: Final[int]
IP_TTL: Final[int]
+
if sys.platform != "win32":
IP_DEFAULT_MULTICAST_LOOP: Final[int]
IP_DEFAULT_MULTICAST_TTL: Final[int]
@@ -237,11 +261,14 @@ if sys.platform != "win32":
IP_RECVOPTS: Final[int]
IP_RECVRETOPTS: Final[int]
IP_RETOPTS: Final[int]
+
if sys.version_info >= (3, 13) and sys.platform == "linux":
CAN_RAW_ERR_FILTER: Final[int]
+
if sys.version_info >= (3, 15):
if sys.platform == "win32" or sys.platform == "linux":
IPV6_HDRINCL: Final[int]
+
if sys.version_info >= (3, 14):
IP_RECVTTL: Final[int]
@@ -332,8 +359,10 @@ if sys.version_info >= (3, 14):
if sys.platform != "win32" and sys.platform != "darwin":
IP_TRANSPARENT: Final[int]
+
if sys.platform != "win32" and sys.platform != "darwin" and sys.version_info >= (3, 11):
IP_BIND_ADDRESS_NO_PORT: Final[int]
+
if sys.version_info >= (3, 12):
IP_ADD_SOURCE_MEMBERSHIP: Final[int]
IP_BLOCK_SOURCE: Final[int]
@@ -357,6 +386,7 @@ IPV6_HOPOPTS: Final[int]
IPV6_PKTINFO: Final[int]
IPV6_RECVRTHDR: Final[int]
IPV6_RTHDR: Final[int]
+
if sys.platform != "win32":
IPV6_RTHDR_TYPE_0: Final[int]
IPV6_DSTOPTS: Final[int]
@@ -381,10 +411,12 @@ EAI_NODATA: Final[int]
EAI_NONAME: Final[int]
EAI_SERVICE: Final[int]
EAI_SOCKTYPE: Final[int]
+
if sys.platform != "win32":
EAI_ADDRFAMILY: Final[int]
EAI_OVERFLOW: Final[int]
EAI_SYSTEM: Final[int]
+
if sys.platform != "win32" and sys.platform != "linux":
EAI_BADHINTS: Final[int]
EAI_MAX: Final[int]
@@ -397,6 +429,7 @@ AI_NUMERICHOST: Final[int]
AI_NUMERICSERV: Final[int]
AI_PASSIVE: Final[int]
AI_V4MAPPED: Final[int]
+
if sys.platform != "win32" and sys.platform != "linux":
AI_DEFAULT: Final[int]
AI_MASK: Final[int]
@@ -409,6 +442,7 @@ NI_NAMEREQD: Final[int]
NI_NOFQDN: Final[int]
NI_NUMERICHOST: Final[int]
NI_NUMERICSERV: Final[int]
+
if sys.platform == "linux" and sys.version_info >= (3, 13):
NI_IDN: Final[int]
@@ -417,12 +451,16 @@ TCP_KEEPCNT: Final[int]
TCP_KEEPINTVL: Final[int]
TCP_MAXSEG: Final[int]
TCP_NODELAY: Final[int]
+
if sys.platform != "win32":
TCP_NOTSENT_LOWAT: Final[int]
+
if sys.platform != "darwin":
TCP_KEEPIDLE: Final[int]
+
if sys.platform == "darwin":
TCP_KEEPALIVE: Final[int]
+
if sys.version_info >= (3, 11) and sys.platform == "darwin":
TCP_CONNECTION_INFO: Final[int]
@@ -436,6 +474,7 @@ if sys.platform != "win32" and sys.platform != "darwin":
TCP_SYNCNT: Final[int]
TCP_USER_TIMEOUT: Final[int]
TCP_WINDOW_CLAMP: Final[int]
+
if sys.platform == "linux" and sys.version_info >= (3, 12):
TCP_CC_INFO: Final[int]
TCP_FASTOPEN_CONNECT: Final[int]
@@ -478,6 +517,7 @@ if sys.platform == "linux":
CAN_RAW_RECV_OWN_MSGS: Final[int]
CAN_RTR_FLAG: Final[int]
CAN_SFF_MASK: Final[int]
+
if sys.version_info < (3, 11):
CAN_RAW_ERR_FILTER: Final[int]
@@ -516,6 +556,7 @@ if sys.platform == "linux":
CAN_RAW_JOIN_FILTERS: Final[int]
# Availability: Linux >= 2.6.25
CAN_ISOTP: Final[int]
+
if sys.version_info >= (3, 15):
CAN_ISOTP_CHK_PAD_DATA: Final[int]
CAN_ISOTP_CHK_PAD_LEN: Final[int]
@@ -776,6 +817,7 @@ if sys.platform != "win32" and sys.platform != "darwin":
BTPROTO_HCI: Final[int]
BTPROTO_L2CAP: Final[int]
BTPROTO_SCO: Final[int] # not in FreeBSD
+
if sys.platform != "darwin":
BTPROTO_RFCOMM: Final[int]
diff --git a/stdlib/_sqlite3.pyi b/stdlib/_sqlite3.pyi
index b14270d..ab367d6 100644
--- a/stdlib/_sqlite3.pyi
+++ b/stdlib/_sqlite3.pyi
@@ -69,6 +69,7 @@ SQLITE_SAVEPOINT: Final = 32
SQLITE_SELECT: Final = 21
SQLITE_TRANSACTION: Final = 22
SQLITE_UPDATE: Final = 23
+
if sys.version_info >= (3, 15):
SQLITE_KEYWORDS: tuple[str, ...]
adapters: dict[tuple[type[Any], type[Any]], _Adapter[Any]]
diff --git a/stdlib/_ssl.pyi b/stdlib/_ssl.pyi
index dd0ad0d..7f0dd50 100644
--- a/stdlib/_ssl.pyi
+++ b/stdlib/_ssl.pyi
@@ -168,12 +168,14 @@ class _SSLContext:
def set_ciphers(self, cipherlist: str, /) -> None: ...
def set_default_verify_paths(self) -> None: ...
def set_ecdh_curve(self, name: str, /) -> None: ...
+
if sys.version_info >= (3, 15):
def get_groups(self, *, include_aliases: bool = False) -> list[str]: ...
def set_ciphersuites(self, ciphersuites: str, /) -> None: ...
def set_client_sigalgs(self, sigalgslist: str, /) -> None: ...
def set_groups(self, grouplist: str, /) -> None: ...
def set_server_sigalgs(self, sigalgslist: str, /) -> None: ...
+
if sys.version_info >= (3, 13):
def set_psk_client_callback(self, callback: Callable[[str | None], tuple[str | None, bytes]] | None) -> None: ...
def set_psk_server_callback(
@@ -341,8 +343,10 @@ OP_SINGLE_ECDH_USE: Final = 0x0
OP_NO_COMPRESSION: Final = 0x20000
OP_ENABLE_MIDDLEBOX_COMPAT: Final = 0x100000
OP_NO_RENEGOTIATION: Final = 0x40000000
+
if sys.version_info >= (3, 11) or sys.platform == "linux":
OP_IGNORE_UNEXPECTED_EOF: Final = 0x80
+
if sys.version_info >= (3, 12):
OP_LEGACY_SERVER_CONNECT: Final = 0x4
OP_ENABLE_KTLS: Final = 0x8
@@ -373,8 +377,10 @@ HAS_SNI: Final[bool]
HAS_TLS_UNIQUE: Final[bool]
HAS_ECDH: Final[bool]
HAS_NPN: Final[bool]
+
if sys.version_info >= (3, 13):
HAS_PSK: Final[bool]
+
if sys.version_info >= (3, 15):
HAS_PSK_TLS13: Final[bool]
HAS_ALPN: Final[bool]
@@ -384,6 +390,7 @@ HAS_TLSv1: Final[bool]
HAS_TLSv1_1: Final[bool]
HAS_TLSv1_2: Final[bool]
HAS_TLSv1_3: Final[bool]
+
if sys.version_info >= (3, 14):
HAS_PHA: Final[bool]
diff --git a/stdlib/_tkinter.pyi b/stdlib/_tkinter.pyi
index bffab9d..89aecd8 100644
--- a/stdlib/_tkinter.pyi
+++ b/stdlib/_tkinter.pyi
@@ -62,6 +62,7 @@ class TkappType:
def call(self, command: Any, /, *args: Any) -> Any: ...
# TODO: Figure out what arguments the following `func` callbacks should accept
def createcommand(self, name: str, func: Callable[..., object], /) -> None: ...
+
if sys.platform != "win32":
def createfilehandler(self, file: FileDescriptorLike, mask: int, func: Callable[..., object], /) -> None: ...
def deletefilehandler(self, file: FileDescriptorLike, /) -> None: ...
@@ -88,6 +89,7 @@ class TkappType:
def quit(self) -> None: ...
def record(self, script: str, /) -> str: ...
def setvar(self, *ags, **kwargs): ...
+
if sys.version_info < (3, 11):
@deprecated("Deprecated since Python 3.9; removed in Python 3.11. Use `splitlist()` instead.")
def split(self, arg, /): ...
@@ -106,6 +108,7 @@ class TkappType:
def wantobjects(self, wantobjects: Literal[0, 1] | bool, /) -> None: ...
def willdispatch(self) -> None: ...
+
if sys.version_info >= (3, 12):
def gettrace(self, /) -> _TkinterTraceFunc | None:
"""Get the tracing function."""
diff --git a/stdlib/abc.pyi b/stdlib/abc.pyi
index 76f392c..c418c36 100644
--- a/stdlib/abc.pyi
+++ b/stdlib/abc.pyi
@@ -28,6 +28,7 @@ class ABCMeta(type):
"""
__abstractmethods__: frozenset[str]
+
if sys.version_info >= (3, 11):
def __new__(
mcls: type[_typeshed.Self], name: str, bases: tuple[type, ...], namespace: dict[str, Any], /, **kwargs: Any
diff --git a/stdlib/argparse.pyi b/stdlib/argparse.pyi
index 98b1712..cfccff8 100644
--- a/stdlib/argparse.pyi
+++ b/stdlib/argparse.pyi
@@ -353,6 +353,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
def print_usage(self, file: SupportsWrite[str] | None = None) -> None: ...
def print_help(self, file: SupportsWrite[str] | None = None) -> None: ...
+
if sys.version_info >= (3, 15):
def format_usage(self, formatter: HelpFormatter | None = None) -> str: ...
def format_help(self, formatter: HelpFormatter | None = None) -> str: ...
@@ -399,6 +400,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
# undocumented
def _get_optional_actions(self) -> list[Action]: ...
def _get_positional_actions(self) -> list[Action]: ...
+
if sys.version_info >= (3, 12):
def _parse_known_args(
self, arg_strings: list[str], namespace: Namespace, intermixed: bool
@@ -409,6 +411,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
def _read_args_from_files(self, arg_strings: list[str]) -> list[str]: ...
def _match_argument(self, action: Action, arg_strings_pattern: str) -> int: ...
def _match_arguments_partial(self, actions: Sequence[Action], arg_strings_pattern: str) -> list[int]: ...
+
if sys.version_info >= (3, 12):
def _parse_optional(self, arg_string: str) -> list[tuple[Action | None, str, str | None, str | None]] | None: ...
else:
@@ -419,6 +422,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
def _get_values(self, action: Action, arg_strings: list[str]) -> Any: ...
def _get_value(self, action: Action, arg_string: str) -> Any: ...
def _check_value(self, action: Action, value: Any) -> None: ...
+
if sys.version_info >= (3, 15):
def _get_formatter(self, file: SupportsWrite[str] | None = None) -> HelpFormatter: ...
else:
@@ -484,6 +488,7 @@ class HelpFormatter:
def _format_usage(
self, usage: str | None, actions: Iterable[Action], groups: Iterable[_MutuallyExclusiveGroup], prefix: str | None
) -> str: ...
+
if sys.version_info < (3, 14):
# Removed in Python 3.14.3
def _format_actions_usage(self, actions: Iterable[Action], groups: Iterable[_MutuallyExclusiveGroup]) -> str: ...
@@ -591,6 +596,7 @@ class Action(_AttributeHolder):
required: bool
help: str | None
metavar: str | tuple[str, ...] | None
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -946,6 +952,7 @@ class _HelpAction(Action):
# undocumented
class _VersionAction(Action):
version: str | None
+
if sys.version_info >= (3, 13):
def __init__(
self,
diff --git a/stdlib/array.pyi b/stdlib/array.pyi
index 30b1802..02db1b4 100644
--- a/stdlib/array.pyi
+++ b/stdlib/array.pyi
@@ -12,10 +12,12 @@ from typing import Any, ClassVar, Literal, SupportsIndex, TypeAlias, TypeVar, ov
from typing_extensions import Self, deprecated, disjoint_base
_IntTypeCode: TypeAlias = Literal["b", "B", "h", "H", "i", "I", "l", "L", "q", "Q"]
+
if sys.version_info >= (3, 15):
_FloatTypeCode: TypeAlias = Literal["f", "d", "e", "Zf", "Zd"]
else:
_FloatTypeCode: TypeAlias = Literal["f", "d"]
+
if sys.version_info >= (3, 13):
_UnicodeTypeCode: TypeAlias = Literal["u", "w"]
else:
diff --git a/stdlib/ast.pyi b/stdlib/ast.pyi
index 402547a..0e40b49 100644
--- a/stdlib/ast.pyi
+++ b/stdlib/ast.pyi
@@ -60,6 +60,7 @@ if sys.version_info >= (3, 12):
__match_args__ = ()
_attributes: ClassVar[tuple[str, ...]]
_fields: ClassVar[tuple[str, ...]]
+
if sys.version_info >= (3, 13):
_field_types: ClassVar[dict[str, Any]]
@@ -86,6 +87,7 @@ class Module(mod):
__match_args__ = ("body", "type_ignores")
body: list[stmt]
type_ignores: list[TypeIgnore]
+
if sys.version_info >= (3, 13):
def __init__(self, body: list[stmt] = ..., type_ignores: list[TypeIgnore] = ...) -> None: ...
else:
@@ -100,6 +102,7 @@ class Interactive(mod):
__match_args__ = ("body",)
body: list[stmt]
+
if sys.version_info >= (3, 13):
def __init__(self, body: list[stmt] = ...) -> None: ...
else:
@@ -126,6 +129,7 @@ class FunctionType(mod):
__match_args__ = ("argtypes", "returns")
argtypes: list[expr]
returns: expr
+
if sys.version_info >= (3, 13):
@overload
def __init__(self, argtypes: list[expr], returns: expr) -> None: ...
@@ -192,8 +196,10 @@ class FunctionDef(stmt):
decorator_list: list[expr]
returns: expr | None
type_comment: str | None
+
if sys.version_info >= (3, 12):
type_params: list[type_param]
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -272,8 +278,10 @@ class AsyncFunctionDef(stmt):
decorator_list: list[expr]
returns: expr | None
type_comment: str | None
+
if sys.version_info >= (3, 12):
type_params: list[type_param]
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -351,8 +359,10 @@ class ClassDef(stmt):
keywords: list[keyword]
body: list[stmt]
decorator_list: list[expr]
+
if sys.version_info >= (3, 12):
type_params: list[type_param]
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -416,6 +426,7 @@ class Delete(stmt):
__match_args__ = ("targets",)
targets: list[expr]
+
if sys.version_info >= (3, 13):
def __init__(self, targets: list[expr] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -432,6 +443,7 @@ class Assign(stmt):
targets: list[expr]
value: expr
type_comment: str | None
+
if sys.version_info >= (3, 13):
@overload
def __init__(
@@ -460,6 +472,7 @@ if sys.version_info >= (3, 12):
name: Name
type_params: list[type_param]
value: expr
+
if sys.version_info >= (3, 13):
@overload
def __init__(
@@ -557,6 +570,7 @@ class For(stmt):
body: list[stmt]
orelse: list[stmt]
type_comment: str | None
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -600,6 +614,7 @@ class AsyncFor(stmt):
body: list[stmt]
orelse: list[stmt]
type_comment: str | None
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -641,6 +656,7 @@ class While(stmt):
test: expr
body: list[stmt]
orelse: list[stmt]
+
if sys.version_info >= (3, 13):
def __init__(
self, test: expr, body: list[stmt] = ..., orelse: list[stmt] = ..., **kwargs: Unpack[_Attributes]
@@ -661,6 +677,7 @@ class If(stmt):
test: expr
body: list[stmt]
orelse: list[stmt]
+
if sys.version_info >= (3, 13):
def __init__(
self, test: expr, body: list[stmt] = ..., orelse: list[stmt] = ..., **kwargs: Unpack[_Attributes]
@@ -681,6 +698,7 @@ class With(stmt):
items: list[withitem]
body: list[stmt]
type_comment: str | None
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -712,6 +730,7 @@ class AsyncWith(stmt):
items: list[withitem]
body: list[stmt]
type_comment: str | None
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -756,6 +775,7 @@ class Try(stmt):
handlers: list[ExceptHandler]
orelse: list[stmt]
finalbody: list[stmt]
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -796,6 +816,7 @@ if sys.version_info >= (3, 11):
handlers: list[ExceptHandler]
orelse: list[stmt]
finalbody: list[stmt]
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -847,8 +868,10 @@ class Import(stmt):
else:
__match_args__ = ("names",)
names: list[alias]
+
if sys.version_info >= (3, 15):
is_lazy: bool | None
+
if sys.version_info >= (3, 15):
def __init__(self, names: list[alias] = ..., is_lazy: bool | None = None, **kwargs: Unpack[_Attributes]) -> None: ...
@@ -873,8 +896,10 @@ class ImportFrom(stmt):
module: str | None
names: list[alias]
level: int
+
if sys.version_info >= (3, 15):
is_lazy: bool | None
+
if sys.version_info >= (3, 15):
@overload
def __init__(
@@ -926,6 +951,7 @@ class Global(stmt):
__match_args__ = ("names",)
names: list[str]
+
if sys.version_info >= (3, 13):
def __init__(self, names: list[str] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -940,6 +966,7 @@ class Nonlocal(stmt):
__match_args__ = ("names",)
names: list[str]
+
if sys.version_info >= (3, 13):
def __init__(self, names: list[str] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1017,6 +1044,7 @@ class BoolOp(expr):
__match_args__ = ("op", "values")
op: boolop
values: list[expr]
+
if sys.version_info >= (3, 13):
def __init__(self, op: boolop, values: list[expr] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1094,6 +1122,7 @@ class Dict(expr):
__match_args__ = ("keys", "values")
keys: list[expr | None]
values: list[expr]
+
if sys.version_info >= (3, 13):
def __init__(self, keys: list[expr | None] = ..., values: list[expr] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1108,6 +1137,7 @@ class Set(expr):
__match_args__ = ("elts",)
elts: list[expr]
+
if sys.version_info >= (3, 13):
def __init__(self, elts: list[expr] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1123,6 +1153,7 @@ class ListComp(expr):
__match_args__ = ("elt", "generators")
elt: expr
generators: list[comprehension]
+
if sys.version_info >= (3, 13):
def __init__(self, elt: expr, generators: list[comprehension] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1138,6 +1169,7 @@ class SetComp(expr):
__match_args__ = ("elt", "generators")
elt: expr
generators: list[comprehension]
+
if sys.version_info >= (3, 13):
def __init__(self, elt: expr, generators: list[comprehension] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1152,11 +1184,13 @@ class DictComp(expr):
__match_args__ = ("key", "value", "generators")
key: expr
+
if sys.version_info >= (3, 15):
value: expr | None
else:
value: expr
generators: list[comprehension]
+
if sys.version_info >= (3, 13):
def __init__(
self, key: expr, value: expr, generators: list[comprehension] = ..., **kwargs: Unpack[_Attributes]
@@ -1176,6 +1210,7 @@ class GeneratorExp(expr):
__match_args__ = ("elt", "generators")
elt: expr
generators: list[comprehension]
+
if sys.version_info >= (3, 13):
def __init__(self, elt: expr, generators: list[comprehension] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1225,6 +1260,7 @@ class Compare(expr):
left: expr
ops: list[cmpop]
comparators: list[expr]
+
if sys.version_info >= (3, 13):
def __init__(
self, left: expr, ops: list[cmpop] = ..., comparators: list[expr] = ..., **kwargs: Unpack[_Attributes]
@@ -1245,6 +1281,7 @@ class Call(expr):
func: expr
args: list[expr]
keywords: list[keyword]
+
if sys.version_info >= (3, 13):
def __init__(
self, func: expr, args: list[expr] = ..., keywords: list[keyword] = ..., **kwargs: Unpack[_Attributes]
@@ -1278,6 +1315,7 @@ class JoinedStr(expr):
__match_args__ = ("values",)
values: list[expr]
+
if sys.version_info >= (3, 13):
def __init__(self, values: list[expr] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1332,6 +1370,7 @@ class Constant(expr):
__match_args__ = ("value", "kind")
value: _ConstantValue
kind: str | None
+
if sys.version_info < (3, 14):
# Aliases for value, for backwards compatibility
@property
@@ -1416,6 +1455,7 @@ class List(expr):
__match_args__ = ("elts", "ctx")
elts: list[expr]
ctx: expr_context # Not present in Python < 3.13 if not passed to `__init__`
+
if sys.version_info >= (3, 13):
def __init__(self, elts: list[expr] = ..., ctx: expr_context = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1611,6 +1651,7 @@ class comprehension(AST):
iter: expr
ifs: list[expr]
is_async: int
+
if sys.version_info >= (3, 13):
@overload
def __init__(self, target: expr, iter: expr, ifs: list[expr], is_async: int) -> None: ...
@@ -1645,6 +1686,7 @@ class ExceptHandler(excepthandler):
type: expr | None
name: str | None
body: list[stmt]
+
if sys.version_info >= (3, 13):
def __init__(
self, type: expr | None = None, name: str | None = None, body: list[stmt] = ..., **kwargs: Unpack[_Attributes]
@@ -1674,6 +1716,7 @@ class arguments(AST):
kw_defaults: list[expr | None]
kwarg: arg | None
defaults: list[expr]
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -1835,6 +1878,7 @@ class match_case(AST):
pattern: ast.pattern
guard: expr | None
body: list[stmt]
+
if sys.version_info >= (3, 13):
def __init__(self, pattern: ast.pattern, guard: expr | None = None, body: list[stmt] = ...) -> None: ...
else:
@@ -1853,6 +1897,7 @@ class Match(stmt):
__match_args__ = ("subject", "cases")
subject: expr
cases: list[match_case]
+
if sys.version_info >= (3, 13):
def __init__(self, subject: expr, cases: list[match_case] = ..., **kwargs: Unpack[_Attributes]) -> None: ...
else:
@@ -1889,6 +1934,7 @@ class MatchSequence(pattern):
__match_args__ = ("patterns",)
patterns: list[pattern]
+
if sys.version_info >= (3, 13):
def __init__(self, patterns: list[pattern] = ..., **kwargs: Unpack[_Attributes[int]]) -> None: ...
else:
@@ -1905,6 +1951,7 @@ class MatchMapping(pattern):
keys: list[expr]
patterns: list[pattern]
rest: str | None
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -1937,6 +1984,7 @@ class MatchClass(pattern):
patterns: list[pattern]
kwd_attrs: list[str]
kwd_patterns: list[pattern]
+
if sys.version_info >= (3, 13):
def __init__(
self,
@@ -2000,6 +2048,7 @@ class MatchOr(pattern):
__match_args__ = ("patterns",)
patterns: list[pattern]
+
if sys.version_info >= (3, 13):
def __init__(self, patterns: list[pattern] = ..., **kwargs: Unpack[_Attributes[int]]) -> None: ...
else:
@@ -2050,6 +2099,7 @@ if sys.version_info >= (3, 12):
__match_args__ = ("name", "bound")
name: str
bound: expr | None
+
if sys.version_info >= (3, 13):
default_value: expr | None
def __init__(
@@ -2077,6 +2127,7 @@ if sys.version_info >= (3, 12):
else:
__match_args__ = ("name",)
name: str
+
if sys.version_info >= (3, 13):
default_value: expr | None
def __init__(self, name: str, default_value: expr | None = None, **kwargs: Unpack[_Attributes[int]]) -> None: ...
@@ -2097,6 +2148,7 @@ if sys.version_info >= (3, 12):
else:
__match_args__ = ("name",)
name: str
+
if sys.version_info >= (3, 13):
default_value: expr | None
def __init__(self, name: str, default_value: expr | None = None, **kwargs: Unpack[_Attributes[int]]) -> None: ...
diff --git a/stdlib/asyncio/base_events.pyi b/stdlib/asyncio/base_events.pyi
index c7b3a3e..b675c21 100644
--- a/stdlib/asyncio/base_events.pyi
+++ b/stdlib/asyncio/base_events.pyi
@@ -684,6 +684,7 @@ class BaseEventLoop(AbstractEventLoop):
async def sock_sendall(self, sock: socket, data: ReadableBuffer) -> None: ...
async def sock_connect(self, sock: socket, address: _Address) -> None: ...
async def sock_accept(self, sock: socket) -> tuple[socket, _RetAddress]: ...
+
if sys.version_info >= (3, 11):
async def sock_recvfrom(self, sock: socket, bufsize: int) -> tuple[bytes, _RetAddress]: ...
async def sock_recvfrom_into(self, sock: socket, buf: WriteableBuffer, nbytes: int = 0) -> tuple[int, _RetAddress]: ...
@@ -751,6 +752,7 @@ class BaseEventLoop(AbstractEventLoop):
# Debug flag management.
def get_debug(self) -> bool: ...
def set_debug(self, enabled: bool) -> None: ...
+
if sys.version_info >= (3, 12):
async def shutdown_default_executor(self, timeout: float | None = None) -> None:
"""Schedule the shutdown of the default executor.
diff --git a/stdlib/asyncio/constants.pyi b/stdlib/asyncio/constants.pyi
index 61aaf51..60b7f36 100644
--- a/stdlib/asyncio/constants.pyi
+++ b/stdlib/asyncio/constants.pyi
@@ -7,10 +7,12 @@ ACCEPT_RETRY_DELAY: Final = 1
DEBUG_STACK_DEPTH: Final = 10
SSL_HANDSHAKE_TIMEOUT: float
SENDFILE_FALLBACK_READBUFFER_SIZE: Final = 262144
+
if sys.version_info >= (3, 11):
SSL_SHUTDOWN_TIMEOUT: float
FLOW_CONTROL_HIGH_WATER_SSL_READ: Final = 256
FLOW_CONTROL_HIGH_WATER_SSL_WRITE: Final = 512
+
if sys.version_info >= (3, 12):
THREAD_JOIN_TIMEOUT: Final = 300
diff --git a/stdlib/asyncio/events.pyi b/stdlib/asyncio/events.pyi
index 50a5086..5497605 100644
--- a/stdlib/asyncio/events.pyi
+++ b/stdlib/asyncio/events.pyi
@@ -86,6 +86,7 @@ class Handle:
def cancel(self) -> None: ...
def _run(self) -> None: ...
def cancelled(self) -> bool: ...
+
if sys.version_info >= (3, 12):
def get_context(self) -> Context: ...
@@ -223,6 +224,7 @@ class AbstractEventLoop:
# Future methods
@abstractmethod
def create_future(self) -> Future[Any]: ...
+
# Tasks methods
if sys.version_info >= (3, 14):
@abstractmethod
@@ -869,6 +871,7 @@ class AbstractEventLoop:
async def sock_connect(self, sock: socket, address: _Address) -> None: ...
@abstractmethod
async def sock_accept(self, sock: socket) -> tuple[socket, _RetAddress]: ...
+
if sys.version_info >= (3, 11):
@abstractmethod
async def sock_recvfrom(self, sock: socket, bufsize: int) -> tuple[bytes, _RetAddress]: ...
diff --git a/stdlib/asyncio/sslproto.pyi b/stdlib/asyncio/sslproto.pyi
index 961fcd0..bb1244c 100644
--- a/stdlib/asyncio/sslproto.pyi
+++ b/stdlib/asyncio/sslproto.pyi
@@ -164,6 +164,7 @@ class _SSLProtocolTransport(transports._FlowControlMixin, transports.Transport):
_sendfile_compatible: ClassVar[constants._SendfileMode]
_loop: events.AbstractEventLoop
+
if sys.version_info >= (3, 11):
_ssl_protocol: SSLProtocol | None
else:
@@ -294,6 +295,7 @@ class SSLProtocol(_SSLProtocolBase):
def _get_extra_info(self, name: str, default: Any | None = None) -> Any: ...
def _start_shutdown(self) -> None: ...
+
if sys.version_info >= (3, 11):
def _write_appdata(self, list_of_data: list[bytes]) -> None: ...
else:
@@ -303,6 +305,7 @@ class SSLProtocol(_SSLProtocolBase):
def _check_handshake_timeout(self) -> None: ...
def _on_handshake_complete(self, handshake_exc: BaseException | None) -> None: ...
def _fatal_error(self, exc: BaseException, message: str = "Fatal error on transport") -> None: ...
+
if sys.version_info >= (3, 11):
def _abort(self, exc: BaseException | None) -> None: ...
def get_buffer(self, n: int) -> memoryview: ...
diff --git a/stdlib/asyncio/taskgroups.pyi b/stdlib/asyncio/taskgroups.pyi
index e864a7a..5d0957e 100644
--- a/stdlib/asyncio/taskgroups.pyi
+++ b/stdlib/asyncio/taskgroups.pyi
@@ -38,6 +38,7 @@ class TaskGroup:
async def __aenter__(self) -> Self: ...
async def __aexit__(self, et: type[BaseException] | None, exc: BaseException | None, tb: TracebackType | None) -> None: ...
+
if sys.version_info >= (3, 14):
def create_task(
self,
@@ -57,6 +58,7 @@ class TaskGroup:
) -> Task[_T]: ...
def _on_task_done(self, task: Task[object]) -> None: ...
+
if sys.version_info >= (3, 15):
def cancel(self) -> None:
"""Cancel the task group
diff --git a/stdlib/asyncio/tasks.pyi b/stdlib/asyncio/tasks.pyi
index e51650b..223e260 100644
--- a/stdlib/asyncio/tasks.pyi
+++ b/stdlib/asyncio/tasks.pyi
@@ -76,6 +76,7 @@ _T4 = TypeVar("_T4")
_T5 = TypeVar("_T5")
_T6 = TypeVar("_T6")
_FT = TypeVar("_FT", bound=Future[Any])
+
if sys.version_info >= (3, 12):
_FutureLike: TypeAlias = Future[_T] | Awaitable[_T]
else:
diff --git a/stdlib/asyncio/trsock.pyi b/stdlib/asyncio/trsock.pyi
index df65fcc..07c0661 100644
--- a/stdlib/asyncio/trsock.pyi
+++ b/stdlib/asyncio/trsock.pyi
@@ -51,6 +51,7 @@ class TransportSocket:
def settimeout(self, value: float | None) -> None: ...
def gettimeout(self) -> float | None: ...
def setblocking(self, flag: bool) -> None: ...
+
if sys.version_info < (3, 11):
def _na(self, what: str) -> None: ...
@deprecated("Removed in Python 3.11")
diff --git a/stdlib/bdb.pyi b/stdlib/bdb.pyi
index f75a51e..9022b69 100644
--- a/stdlib/bdb.pyi
+++ b/stdlib/bdb.pyi
@@ -44,6 +44,7 @@ class Bdb:
stopframe: FrameType | None
returnframe: FrameType | None
stoplineno: int
+
if sys.version_info >= (3, 14):
backend: _Backend
def __init__(self, skip: Iterable[str] | None = None, backend: _Backend = "settrace") -> None: ...
@@ -353,6 +354,7 @@ class Breakpoint:
def __init__(
self, file: str, line: int, temporary: bool = False, cond: str | None = None, funcname: str | None = None
) -> None: ...
+
if sys.version_info >= (3, 11):
@staticmethod
def clearBreakpoints() -> None: ...
diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi
index 475c449..2c1b98d 100644
--- a/stdlib/builtins.pyi
+++ b/stdlib/builtins.pyi
@@ -145,6 +145,7 @@ class object:
# see #6661 and https://docs.python.org/3/library/pickle.html#object.__reduce__
def __reduce__(self) -> str | tuple[Any, ...]: ...
def __reduce_ex__(self, protocol: SupportsIndex, /) -> str | tuple[Any, ...]: ...
+
if sys.version_info >= (3, 11):
def __getstate__(self) -> object: ...
@@ -233,6 +234,7 @@ class classmethod(Generic[_T, _P, _R_co]):
@property
def __wrapped__(self) -> Callable[Concatenate[type[_T], _P], _R_co]: ...
+
if sys.version_info >= (3, 14):
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
__annotate__: AnnotateFunc | None
@@ -309,6 +311,7 @@ class type:
if sys.version_info >= (3, 12):
__type_params__: tuple[TypeVar | ParamSpec | TypeVarTuple, ...]
__annotations__: dict[str, AnnotationForm]
+
if sys.version_info >= (3, 14):
__annotate__: AnnotateFunc | None
@@ -1948,6 +1951,7 @@ class bytes(Sequence[int]):
def __gt__(self, value: bytes, /) -> bool: ...
def __ge__(self, value: bytes, /) -> bool: ...
def __getnewargs__(self) -> tuple[bytes]: ...
+
if sys.version_info >= (3, 11):
def __bytes__(self) -> bytes:
"""Convert this value to exact type bytes."""
@@ -2770,6 +2774,7 @@ class slice(Generic[_StartT_co, _StopT_co, _StepT_co]):
def __new__(cls, start: _T1, stop: _T2, step: _T3, /) -> slice[_T1, _T2, _T3]: ...
def __eq__(self, value: object, /) -> bool: ...
+
if sys.version_info >= (3, 12):
def __hash__(self) -> int: ...
else:
@@ -3520,6 +3525,7 @@ class property:
fset: Callable[[Any, Any], None] | None
fdel: Callable[[Any], None] | None
__isabstractmethod__: bool
+
if sys.version_info >= (3, 13):
__name__: str
@@ -4793,6 +4799,7 @@ class BaseException:
# See https://github.com/python/typeshed/pull/14900
def __str__(self) -> str: ... # noqa: Y029
def __repr__(self) -> str: ... # noqa: Y029
+
if sys.version_info >= (3, 11):
# only present after add_note() is called
__notes__: list[str]
@@ -4844,6 +4851,7 @@ class OSError(Exception):
EnvironmentError = OSError
IOError = OSError
+
if sys.platform == "win32":
WindowsError = OSError
diff --git a/stdlib/calendar.pyi b/stdlib/calendar.pyi
index ef06e52..b43b8c2 100644
--- a/stdlib/calendar.pyi
+++ b/stdlib/calendar.pyi
@@ -65,6 +65,7 @@ if sys.version_info >= (3, 12):
"NOVEMBER",
"DECEMBER",
]
+
if sys.version_info >= (3, 15):
__all__ += ["standalone_month_name", "standalone_month_abbr"]
diff --git a/stdlib/code.pyi b/stdlib/code.pyi
index 0b9783c..eca8286 100644
--- a/stdlib/code.pyi
+++ b/stdlib/code.pyi
@@ -120,6 +120,7 @@ class InteractiveConsole(InteractiveInterpreter):
buffer: list[str] # undocumented
filename: str # undocumented
+
if sys.version_info >= (3, 13):
local_exit: bool # undocumented
def __init__(
diff --git a/stdlib/codeop.pyi b/stdlib/codeop.pyi
index 2ef0679..68d96f2 100644
--- a/stdlib/codeop.pyi
+++ b/stdlib/codeop.pyi
@@ -87,6 +87,7 @@ class Compile:
"""
flags: int
+
if sys.version_info >= (3, 13):
def __call__(self, source: str, filename: str, symbol: str, flags: int = 0) -> CodeType: ...
else:
diff --git a/stdlib/collections/__init__.pyi b/stdlib/collections/__init__.pyi
index 1fe6657..b3628a7 100644
--- a/stdlib/collections/__init__.pyi
+++ b/stdlib/collections/__init__.pyi
@@ -916,6 +916,7 @@ class ChainMap(MutableMapping[_KT, _VT]):
def copy(self) -> Self:
"""New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]"""
__copy__ = copy
+
# All arguments to `fromkeys` are passed to `dict.fromkeys` at runtime,
# so the signature should be kept in line with `dict.fromkeys`.
if sys.version_info >= (3, 13):
diff --git a/stdlib/concurrent/futures/process.pyi b/stdlib/concurrent/futures/process.pyi
index 2956904..202fce8 100644
--- a/stdlib/concurrent/futures/process.pyi
+++ b/stdlib/concurrent/futures/process.pyi
@@ -97,6 +97,7 @@ class _ResultItem:
work_id: int
exception: Exception
result: Any
+
if sys.version_info >= (3, 11):
exit_pid: int | None
def __init__(
@@ -116,9 +117,11 @@ class _SafeQueue(Queue[Future[Any]]):
"""Safe Queue set exception to the future object linked to a job"""
pending_work_items: dict[int, _WorkItem[Any]]
+
if sys.version_info < (3, 12):
shutdown_lock: Lock
thread_wakeup: _ThreadWakeup
+
if sys.version_info >= (3, 12):
def __init__(
self,
@@ -276,6 +279,7 @@ class ProcessPoolExecutor(Executor):
_executor_manager_thread_wakeup: _ThreadWakeup
_result_queue: SimpleQueue[Any]
_work_ids: Queue[Any]
+
if sys.version_info >= (3, 11):
@overload
def __init__(
diff --git a/stdlib/concurrent/futures/thread.pyi b/stdlib/concurrent/futures/thread.pyi
index 95541a3..4c45f8b 100644
--- a/stdlib/concurrent/futures/thread.pyi
+++ b/stdlib/concurrent/futures/thread.pyi
@@ -106,6 +106,7 @@ class ThreadPoolExecutor(Executor):
_shutdown: bool
_shutdown_lock: Lock
_thread_name_prefix: str | None
+
if sys.version_info >= (3, 14):
_create_worker_context: Callable[[], WorkerContext]
_resolve_work_item_task: _ResolveTaskFunc
diff --git a/stdlib/concurrent/interpreters/_queues.pyi b/stdlib/concurrent/interpreters/_queues.pyi
index 1150f31..9013845 100644
--- a/stdlib/concurrent/interpreters/_queues.pyi
+++ b/stdlib/concurrent/interpreters/_queues.pyi
@@ -71,6 +71,7 @@ if sys.version_info >= (3, 14): # needed to satisfy pyright checks for Python <
def empty(self) -> bool: ...
def full(self) -> bool: ...
def qsize(self) -> int: ...
+
if sys.version_info >= (3, 14):
def put(
self,
@@ -127,6 +128,7 @@ if sys.version_info >= (3, 14): # needed to satisfy pyright checks for Python <
) -> None: ...
def put_nowait(self, obj: object, *, unbounditems: _AnyUnbound | None = None) -> None: ...
+
if sys.version_info >= (3, 14):
def get(self, block: bool = True, timeout: SupportsIndex | None = None, *, _delay: float = 0.01) -> object:
"""Return the next object from the queue.
diff --git a/stdlib/configparser.pyi b/stdlib/configparser.pyi
index b409d1d..feb9fc0 100644
--- a/stdlib/configparser.pyi
+++ b/stdlib/configparser.pyi
@@ -326,6 +326,7 @@ class RawConfigParser(_Parser):
BOOLEAN_STATES: ClassVar[Mapping[str, bool]] # undocumented
default_section: str
+
if sys.version_info >= (3, 13):
@overload
def __init__(
@@ -792,6 +793,7 @@ class ParsingError(Error):
source: str
errors: list[tuple[int, str]]
+
if sys.version_info >= (3, 13):
def __init__(self, source: str, *args: object) -> None: ...
def combine(self, others: Iterable[ParsingError]) -> ParsingError: ...
diff --git a/stdlib/csv.pyi b/stdlib/csv.pyi
index c87eb34..6c83d47 100644
--- a/stdlib/csv.pyi
+++ b/stdlib/csv.pyi
@@ -111,8 +111,10 @@ __all__ = [
"DictWriter",
"unix_dialect",
]
+
if sys.version_info >= (3, 12):
__all__ += ["QUOTE_STRINGS", "QUOTE_NOTNULL"]
+
if sys.version_info < (3, 13):
__all__ += ["__doc__", "__version__"]
@@ -193,6 +195,7 @@ class DictReader(Generic[_T]):
def __iter__(self) -> Self: ...
def __next__(self) -> dict[_T | Any, str | Any]: ...
+
if sys.version_info >= (3, 12):
def __class_getitem__(cls, item: Any, /) -> GenericAlias:
"""Represent a PEP 585 generic type
@@ -225,6 +228,7 @@ class DictWriter(Generic[_T]):
def writeheader(self) -> Any: ...
def writerow(self, rowdict: Mapping[_T, Any]) -> Any: ...
def writerows(self, rowdicts: Iterable[Mapping[_T, Any]]) -> None: ...
+
if sys.version_info >= (3, 12):
def __class_getitem__(cls, item: Any, /) -> GenericAlias:
"""Represent a PEP 585 generic type
diff --git a/stdlib/ctypes/__init__.pyi b/stdlib/ctypes/__init__.pyi
index a276854..c8da440 100644
--- a/stdlib/ctypes/__init__.pyi
+++ b/stdlib/ctypes/__init__.pyi
@@ -147,6 +147,7 @@ class LibraryLoader(Generic[_DLLT]):
"""
cdll: LibraryLoader[CDLL]
+
if sys.platform == "win32":
windll: LibraryLoader[WinDLL]
oledll: LibraryLoader[OleDLL]
@@ -284,6 +285,7 @@ if sys.version_info >= (3, 14):
class py_object(_CanCastTo, _SimpleCData[_T]):
_type_: ClassVar[Literal["O"]]
+
if sys.version_info >= (3, 14):
def __class_getitem__(cls, item: Any, /) -> GenericAlias:
"""Represent a PEP 585 generic type
diff --git a/stdlib/ctypes/wintypes.pyi b/stdlib/ctypes/wintypes.pyi
index b94c5e7..55f8c0c 100644
--- a/stdlib/ctypes/wintypes.pyi
+++ b/stdlib/ctypes/wintypes.pyi
@@ -83,6 +83,7 @@ HACCEL = HANDLE
HBITMAP = HANDLE
HBRUSH = HANDLE
HCOLORSPACE = HANDLE
+
if sys.version_info >= (3, 14):
HCONV = HANDLE
HCONVLIST = HANDLE
diff --git a/stdlib/datetime.pyi b/stdlib/datetime.pyi
index a13fa0d..31f801e 100644
--- a/stdlib/datetime.pyi
+++ b/stdlib/datetime.pyi
@@ -464,6 +464,7 @@ class datetime(date):
def tzinfo(self) -> _TzInfo | None: ...
@property
def fold(self) -> int: ...
+
# On <3.12, the name of the first parameter in the pure-Python implementation
# didn't match the name in the C implementation,
# meaning it is only *safe* to pass it as a keyword argument on 3.12+
diff --git a/stdlib/dbm/dumb.pyi b/stdlib/dbm/dumb.pyi
index c60d63e..5381692 100644
--- a/stdlib/dbm/dumb.pyi
+++ b/stdlib/dbm/dumb.pyi
@@ -39,6 +39,7 @@ error = OSError
class _Database(MutableMapping[_KeyType, bytes]):
def __init__(self, filebasename: str, mode: str, flag: str = "c") -> None: ...
def sync(self) -> None: ...
+
if sys.version_info >= (3, 15):
def reorganize(self) -> None: ...
diff --git a/stdlib/dbm/sqlite3.pyi b/stdlib/dbm/sqlite3.pyi
index 0a11a4b..e75ccb3 100644
--- a/stdlib/dbm/sqlite3.pyi
+++ b/stdlib/dbm/sqlite3.pyi
@@ -10,6 +10,7 @@ LOOKUP_KEY: Final[LiteralString]
STORE_KV: Final[LiteralString]
DELETE_KEY: Final[LiteralString]
ITER_KEYS: Final[LiteralString]
+
if sys.version_info >= (3, 15):
REORGANIZE: Final[LiteralString]
@@ -28,6 +29,7 @@ class _Database(MutableMapping[bytes, bytes]):
def keys(self) -> list[bytes]: ... # type: ignore[override]
def __enter__(self) -> Self: ...
def __exit__(self, *args: Unused) -> None: ...
+
if sys.version_info >= (3, 15):
def reorganize(self) -> None: ...
diff --git a/stdlib/decimal.pyi b/stdlib/decimal.pyi
index 7d7db7a..5eb5d15 100644
--- a/stdlib/decimal.pyi
+++ b/stdlib/decimal.pyi
@@ -131,6 +131,7 @@ from typing_extensions import Self, disjoint_base
if sys.version_info >= (3, 14):
from _decimal import IEEE_CONTEXT_MAX_BITS as IEEE_CONTEXT_MAX_BITS, IEEEContext as IEEEContext
+
if sys.version_info >= (3, 15):
from _decimal import SPEC_VERSION as SPEC_VERSION
@@ -183,6 +184,7 @@ class Decimal:
"""
def __new__(cls, value: _DecimalNew = "0", context: Context | None = None) -> Self: ...
+
if sys.version_info >= (3, 14):
@classmethod
def from_number(cls, number: Decimal | float, /) -> Self:
diff --git a/stdlib/dis.pyi b/stdlib/dis.pyi
index b197554..a14b277 100644
--- a/stdlib/dis.pyi
+++ b/stdlib/dis.pyi
@@ -33,6 +33,7 @@ __all__ = [
"EXTENDED_ARG",
"stack_effect",
]
+
if sys.version_info >= (3, 13):
__all__ += ["hasjump"]
@@ -120,6 +121,7 @@ if sys.version_info >= (3, 12):
if sys.version_info < (3, 13):
def _disassemble(self, lineno_width: int = 3, mark_as_current: bool = False, offset_width: int = 4) -> str: ...
+
if sys.version_info >= (3, 13):
@property
def oparg(self) -> int:
@@ -208,6 +210,7 @@ class Bytecode:
codeobj: types.CodeType
first_line: int
+
if sys.version_info >= (3, 14):
show_positions: bool
# 3.14 added `show_positions`
diff --git a/stdlib/doctest.pyi b/stdlib/doctest.pyi
index e82f832..77ccd0a 100644
--- a/stdlib/doctest.pyi
+++ b/stdlib/doctest.pyi
@@ -402,6 +402,7 @@ class DocTestRunner:
original_optionflags: int
tries: int
failures: int
+
if sys.version_info >= (3, 13):
skips: int
test: DocTest
diff --git a/stdlib/enum.pyi b/stdlib/enum.pyi
index f3ab903..6926872 100644
--- a/stdlib/enum.pyi
+++ b/stdlib/enum.pyi
@@ -37,6 +37,7 @@ if sys.version_info >= (3, 11):
if sys.version_info >= (3, 13):
__all__ += ["EnumDict"]
+
if sys.version_info >= (3, 15):
__all__ += ["show_flag_values", "bin"]
@@ -441,12 +442,15 @@ class Enum(metaclass=EnumMeta):
"""
def __reduce_ex__(self, proto: Unused) -> tuple[Any, ...]: ...
+
if sys.version_info >= (3, 11):
def __copy__(self) -> Self: ...
def __deepcopy__(self, memo: Any) -> Self: ...
+
if sys.version_info >= (3, 12) and sys.version_info < (3, 14):
@classmethod
def __signature__(cls) -> str: ...
+
if sys.version_info >= (3, 13):
# Value may be any type, even in special enums. Enabling Enum parsing from
# multiple value types
@@ -522,6 +526,7 @@ class Flag(Enum):
def __and__(self, other: Self) -> Self: ...
def __xor__(self, other: Self) -> Self: ...
def __invert__(self) -> Self: ...
+
if sys.version_info >= (3, 11):
def __iter__(self) -> Iterator[Self]:
"""
diff --git a/stdlib/fcntl.pyi b/stdlib/fcntl.pyi
index 1e7b437..18a0530 100644
--- a/stdlib/fcntl.pyi
+++ b/stdlib/fcntl.pyi
@@ -29,10 +29,12 @@ if sys.platform != "win32":
F_GETLEASE: Final[int]
F_SETLEASE: Final[int]
+
if sys.platform == "darwin":
F_FULLFSYNC: Final[int]
F_NOCACHE: Final[int]
F_GETPATH: Final[int]
+
if sys.platform == "linux":
F_SETLKW64: Final[int]
F_SETSIG: Final[int]
@@ -65,6 +67,7 @@ if sys.platform != "win32":
LOCK_NB: Final[int]
LOCK_SH: Final[int]
LOCK_UN: Final[int]
+
if sys.platform == "linux":
LOCK_MAND: Final[int]
LOCK_READ: Final[int]
diff --git a/stdlib/fileinput.pyi b/stdlib/fileinput.pyi
index 45b3ffb..e1086e9 100644
--- a/stdlib/fileinput.pyi
+++ b/stdlib/fileinput.pyi
@@ -249,6 +249,7 @@ class FileInput(Generic[AnyStr]):
) -> None: ...
def __iter__(self) -> Self: ...
def __next__(self) -> AnyStr: ...
+
if sys.version_info < (3, 11):
def __getitem__(self, i: int) -> AnyStr: ...
diff --git a/stdlib/fnmatch.pyi b/stdlib/fnmatch.pyi
index bea649b..832e426 100644
--- a/stdlib/fnmatch.pyi
+++ b/stdlib/fnmatch.pyi
@@ -15,6 +15,7 @@ from collections.abc import Iterable
from typing import AnyStr
__all__ = ["filter", "fnmatch", "fnmatchcase", "translate"]
+
if sys.version_info >= (3, 14):
__all__ += ["filterfalse"]
diff --git a/stdlib/fractions.pyi b/stdlib/fractions.pyi
index ec8aa30..a03170c 100644
--- a/stdlib/fractions.pyi
+++ b/stdlib/fractions.pyi
@@ -336,6 +336,7 @@ class Fraction(Rational):
def __copy__(self) -> Self: ...
def __deepcopy__(self, memo: Any) -> Self: ...
+
if sys.version_info >= (3, 11):
def __int__(a, _index: Callable[[SupportsIndex], int] = ...) -> int:
"""int(a)"""
diff --git a/stdlib/functools.pyi b/stdlib/functools.pyi
index 703988f..5df9029 100644
--- a/stdlib/functools.pyi
+++ b/stdlib/functools.pyi
@@ -324,6 +324,7 @@ class partialmethod(Generic[_T]):
func: Callable[..., _T] | _Descriptor
args: tuple[Any, ...]
keywords: dict[str, Any]
+
if sys.version_info >= (3, 14):
@overload
def __new__(self, func: Callable[..., _T], /, *args: Any, **keywords: Any) -> Self: ...
diff --git a/stdlib/genericpath.pyi b/stdlib/genericpath.pyi
index 06cff66..68a8045 100644
--- a/stdlib/genericpath.pyi
+++ b/stdlib/genericpath.pyi
@@ -25,10 +25,13 @@ __all__ = [
"samestat",
"ALLOW_MISSING",
]
+
if sys.version_info >= (3, 12):
__all__ += ["islink"]
+
if sys.version_info >= (3, 13):
__all__ += ["isjunction", "isdevdrive", "lexists"]
+
if sys.version_info >= (3, 15):
__all__ += ["ALL_BUT_LAST"]
diff --git a/stdlib/gettext.pyi b/stdlib/gettext.pyi
index 6d2bd82..3b97654 100644
--- a/stdlib/gettext.pyi
+++ b/stdlib/gettext.pyi
@@ -55,6 +55,7 @@ class NullTranslations:
def npgettext(self, context: str, msgid1: str, msgid2: str, n: int) -> str: ...
def info(self) -> dict[str, str]: ...
def charset(self) -> str | None: ...
+
if sys.version_info < (3, 11):
@deprecated("Deprecated since Python 3.8; removed in Python 3.11.")
def output_charset(self) -> str | None: ...
diff --git a/stdlib/http/__init__.pyi b/stdlib/http/__init__.pyi
index 1b65f16..a41c7e2 100644
--- a/stdlib/http/__init__.pyi
+++ b/stdlib/http/__init__.pyi
@@ -73,19 +73,23 @@ class HTTPStatus(IntEnum):
GONE = 410
LENGTH_REQUIRED = 411
PRECONDITION_FAILED = 412
+
if sys.version_info >= (3, 13):
CONTENT_TOO_LARGE = 413
REQUEST_ENTITY_TOO_LARGE = 413
+
if sys.version_info >= (3, 13):
URI_TOO_LONG = 414
REQUEST_URI_TOO_LONG = 414
UNSUPPORTED_MEDIA_TYPE = 415
+
if sys.version_info >= (3, 13):
RANGE_NOT_SATISFIABLE = 416
REQUESTED_RANGE_NOT_SATISFIABLE = 416
EXPECTATION_FAILED = 417
IM_A_TEAPOT = 418
MISDIRECTED_REQUEST = 421
+
if sys.version_info >= (3, 13):
UNPROCESSABLE_CONTENT = 422
UNPROCESSABLE_ENTITY = 422
diff --git a/stdlib/http/client.pyi b/stdlib/http/client.pyi
index 546b234..7615a66 100644
--- a/stdlib/http/client.pyi
+++ b/stdlib/http/client.pyi
@@ -149,19 +149,23 @@ CONFLICT: Final = 409
GONE: Final = 410
LENGTH_REQUIRED: Final = 411
PRECONDITION_FAILED: Final = 412
+
if sys.version_info >= (3, 13):
CONTENT_TOO_LARGE: Final = 413
REQUEST_ENTITY_TOO_LARGE: Final = 413
+
if sys.version_info >= (3, 13):
URI_TOO_LONG: Final = 414
REQUEST_URI_TOO_LONG: Final = 414
UNSUPPORTED_MEDIA_TYPE: Final = 415
+
if sys.version_info >= (3, 13):
RANGE_NOT_SATISFIABLE: Final = 416
REQUESTED_RANGE_NOT_SATISFIABLE: Final = 416
EXPECTATION_FAILED: Final = 417
IM_A_TEAPOT: Final = 418
MISDIRECTED_REQUEST: Final = 421
+
if sys.version_info >= (3, 13):
UNPROCESSABLE_CONTENT: Final = 422
UNPROCESSABLE_ENTITY: Final = 422
@@ -321,6 +325,7 @@ class HTTPConnection:
host: str
port: int
sock: socket | MaybeNone # can be `None` if `.connect()` was not called
+
if sys.version_info >= (3, 15):
def __init__(
self,
@@ -367,6 +372,7 @@ class HTTPConnection:
"""
def set_debuglevel(self, level: int) -> None: ...
+
if sys.version_info >= (3, 12):
def get_proxy_response_headers(self) -> HTTPMessage | None:
"""
@@ -440,6 +446,7 @@ class HTTPSConnection(HTTPConnection):
# Can be `None` if `.connect()` was not called:
sock: ssl.SSLSocket | MaybeNone
+
if sys.version_info >= (3, 15):
def __init__(
self,
diff --git a/stdlib/http/server.pyi b/stdlib/http/server.pyi
index 083efad..3dcda3b 100644
--- a/stdlib/http/server.pyi
+++ b/stdlib/http/server.pyi
@@ -25,8 +25,10 @@ from typing import Any, AnyStr, BinaryIO, ClassVar, Protocol, type_check_only
from typing_extensions import Self, deprecated
__all__ = ["HTTPServer", "ThreadingHTTPServer", "BaseHTTPRequestHandler", "SimpleHTTPRequestHandler"]
+
if sys.version_info < (3, 15):
__all__ += ["CGIHTTPRequestHandler"]
+
if sys.version_info >= (3, 14):
__all__ = ["HTTPSServer", "ThreadingHTTPSServer"]
@@ -187,6 +189,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
protocol_version: str
MessageClass: type
responses: Mapping[int, tuple[str, str]]
+
if sys.version_info >= (3, 15):
default_content_type: str
default_request_version: str # undocumented
@@ -329,9 +332,11 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
"""
extensions_map: dict[str, str]
+
if sys.version_info >= (3, 12):
index_pages: ClassVar[tuple[str, ...]]
directory: str
+
if sys.version_info >= (3, 15):
def __init__(
self,
diff --git a/stdlib/imaplib.pyi b/stdlib/imaplib.pyi
index f52b144..9f5f5ca 100644
--- a/stdlib/imaplib.pyi
+++ b/stdlib/imaplib.pyi
@@ -551,6 +551,7 @@ class IMAP4_SSL(IMAP4):
keyfile: StrOrBytesPath | None
certfile: StrOrBytesPath | None
sslobj: SSLSocket
+
if sys.version_info >= (3, 14):
@property
@deprecated("IMAP4_SSL.file is unsupported, can cause errors, and may be removed.")
@@ -579,6 +580,7 @@ class IMAP4_stream(IMAP4):
command: str
def __init__(self, command: str) -> None: ...
+
if sys.version_info >= (3, 14):
@property
@deprecated("IMAP4_stream.file is unsupported, can cause errors, and may be removed.")
diff --git a/stdlib/importlib/machinery.pyi b/stdlib/importlib/machinery.pyi
index 9cbc943
... (truncated 2227 lines) ... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.