diff --git a/stdlib/2/__builtin__.pyi b/stdlib/2/__builtin__.pyi index a1e79523fadb..e8d4ae079be9 100644 --- a/stdlib/2/__builtin__.pyi +++ b/stdlib/2/__builtin__.pyi @@ -11,6 +11,7 @@ from typing import ( MutableSet, ItemsView, KeysView, ValuesView, Optional, Container, ) from abc import abstractmethod, ABCMeta +from mypy_extensions import NoReturn _T = TypeVar('_T') _T_co = TypeVar('_T_co', covariant=True) @@ -682,7 +683,7 @@ def dir(o: object = ...) -> List[str]: ... def divmod(a: int, b: int) -> Tuple[int, int]: ... @overload def divmod(a: float, b: float) -> Tuple[float, float]: ... -def exit(code: int = ...) -> None: ... +def exit(code: int = ...) -> NoReturn: ... @overload def filter(function: Callable[[_T], Any], iterable: Iterable[_T]) -> List[_T]: ... diff --git a/stdlib/2/os/__init__.pyi b/stdlib/2/os/__init__.pyi index 71139cf5c92a..3bd50d8e0f1e 100644 --- a/stdlib/2/os/__init__.pyi +++ b/stdlib/2/os/__init__.pyi @@ -5,6 +5,7 @@ from typing import ( Dict, MutableMapping, NamedTuple, overload ) from . import path +from mypy_extensions import NoReturn error = OSError name = ... # type: str @@ -185,7 +186,7 @@ def execvpe(file: AnyStr, args: Union[Tuple[AnyStr], List[AnyStr]], env: Mapping def execv(path: AnyStr, args: Union[Tuple[AnyStr], List[AnyStr]]) -> None: ... def execve(path: AnyStr, args: Union[Tuple[AnyStr], List[AnyStr]], env: Mapping[AnyStr, AnyStr]) -> None: ... -def _exit(n: int) -> None: ... +def _exit(n: int) -> NoReturn: ... def fork() -> int: ... def forkpty() -> Tuple[int, int]: ... diff --git a/stdlib/2/sys.pyi b/stdlib/2/sys.pyi index 02e766548330..cb9172a84c45 100644 --- a/stdlib/2/sys.pyi +++ b/stdlib/2/sys.pyi @@ -5,6 +5,7 @@ from typing import ( overload, Type, ) from types import FrameType, ModuleType, TracebackType, ClassType +from mypy_extensions import NoReturn class _flags: bytes_warning = ... # type: int @@ -118,7 +119,7 @@ def exc_info() -> Tuple[Optional[Type[BaseException]], Optional[TracebackType]]: ... # sys.exit() accepts an optional argument of anything printable -def exit(arg: Any = ...) -> None: +def exit(arg: Any = ...) -> NoReturn: raise SystemExit() def getcheckinterval() -> int: ... # deprecated def getdefaultencoding() -> str: ... diff --git a/stdlib/3/builtins.pyi b/stdlib/3/builtins.pyi index 578694f08164..7081f5e0cab9 100644 --- a/stdlib/3/builtins.pyi +++ b/stdlib/3/builtins.pyi @@ -10,6 +10,7 @@ from typing import ( from abc import abstractmethod, ABCMeta from types import TracebackType import sys +from mypy_extensions import NoReturn # Note that names imported above are not automatically made visible via the # implicit builtins import. @@ -697,7 +698,7 @@ def eval(source: str, globals: Dict[str, Any] = None, locals: Mapping[str, Any] = None) -> Any: ... # TODO code object as source def exec(object: str, globals: Dict[str, Any] = None, locals: Mapping[str, Any] = None) -> Any: ... # TODO code object as source -def exit(code: int = None) -> None: ... +def exit(code: int = None) -> NoReturn: ... @overload def filter(function: Callable[[_T], Any], iterable: Iterable[_T]) -> Iterator[_T]: ... @overload diff --git a/stdlib/3/os/__init__.pyi b/stdlib/3/os/__init__.pyi index 054d62c84841..4f5deeae5b7d 100644 --- a/stdlib/3/os/__init__.pyi +++ b/stdlib/3/os/__init__.pyi @@ -11,6 +11,7 @@ from typing import ( Optional, Generic, Set, Callable ) from . import path +from mypy_extensions import NoReturn # ----- os variables ----- @@ -314,7 +315,7 @@ def execve(path: AnyStr, args: Union[Tuple[AnyStr], List[AnyStr]], env: Mapping[ def execvp(file: AnyStr, args: Union[Tuple[AnyStr], List[AnyStr]]) -> None: ... def execvpe(file: AnyStr, args: Union[Tuple[AnyStr], List[AnyStr]], env: Mapping[str, str]) -> None: ... -def _exit(n: int) -> None: ... +def _exit(n: int) -> NoReturn: ... def fork() -> int: ... # Unix only def forkpty() -> Tuple[int, int]: ... # some flavors of Unix def kill(pid: int, sig: int) -> None: ... diff --git a/stdlib/3/sys.pyi b/stdlib/3/sys.pyi index 0492f5292c42..042fcf14c08b 100644 --- a/stdlib/3/sys.pyi +++ b/stdlib/3/sys.pyi @@ -8,6 +8,7 @@ from typing import ( TypeVar, Callable, Type, ) from types import TracebackType +from mypy_extensions import NoReturn _T = TypeVar('_T') @@ -120,7 +121,7 @@ def exc_info() -> Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]]: ... # sys.exit() accepts an optional argument of anything printable -def exit(arg: Any = ...) -> None: +def exit(arg: Any = ...) -> NoReturn: raise SystemExit() def getcheckinterval() -> int: ... # deprecated def getdefaultencoding() -> str: ... diff --git a/third_party/2/six/__init__.pyi b/third_party/2/six/__init__.pyi index 721e30a4ce47..302c45886043 100644 --- a/third_party/2/six/__init__.pyi +++ b/third_party/2/six/__init__.pyi @@ -9,6 +9,7 @@ from typing import ( ) import typing import unittest +from mypy_extensions import NoReturn # Exports from __builtin__ import unichr as unichr @@ -79,7 +80,7 @@ def assertRaisesRegex(self: unittest.TestCase, msg: str = ...) -> Any: ... def assertRaisesRegex(self: unittest.TestCase, callable_obj: Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ... def assertRegex(self: unittest.TestCase, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], msg: str = ...) -> None: ... -def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] = ...) -> None: ... +def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] = ...) -> NoReturn: ... def exec_(_code_: Union[unicode, types.CodeType], _globs_: Dict[str, Any] = ..., _locs_: Dict[str, Any] = ...): ... def raise_from(value: BaseException, from_value: BaseException) -> None: ... diff --git a/third_party/2and3/mypy_extensions.pyi b/third_party/2and3/mypy_extensions.pyi index 6c57954d8a81..8b2ef3fe7509 100644 --- a/third_party/2and3/mypy_extensions.pyi +++ b/third_party/2and3/mypy_extensions.pyi @@ -1,6 +1,11 @@ -from typing import Dict, Type, TypeVar +from typing import Dict, Type, TypeVar, Union T = TypeVar('T') def TypedDict(typename: str, fields: Dict[str, Type[T]]) -> Type[dict]: ... + +# Return type that indicates a function does not return. +# This type is equivalent to the None type, but the no-op Union is necessary to +# distinguish the None type from the None value. +NoReturn = Union[None] diff --git a/third_party/3/six/__init__.pyi b/third_party/3/six/__init__.pyi index 111b16f5a628..333bd27ce3a2 100644 --- a/third_party/3/six/__init__.pyi +++ b/third_party/3/six/__init__.pyi @@ -23,6 +23,7 @@ from typing import ( import types import typing import unittest +from mypy_extensions import NoReturn # Exports from io import StringIO as StringIO, BytesIO as BytesIO @@ -92,7 +93,7 @@ def assertRegex(self: unittest.TestCase, text: AnyStr, expected_regex: Union[Any exec_ = exec -def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] = None) -> None: ... +def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] = None) -> NoReturn: ... def raise_from(value: BaseException, from_value: BaseException) -> None: ... print_ = print