From d6d2249edc1a9469db491d0acdff5f63b94f4ef4 Mon Sep 17 00:00:00 2001 From: Shantanu <12621235+hauntsaninja@users.noreply.github.com> Date: Fri, 25 Sep 2020 22:33:26 -0700 Subject: [PATCH] builtins: rename _LT (#4579) Having an obscure type variable name is causing some pretty inscrutable errors. For instance: ``` xarray/core/utils.py:466: error: Value of type variable "_LT" of "sorted" cannot be "K" tornado/simple_httpclient.py:324: error: Value of type variable "_LT" of "min" cannot be "Optional[float]" ``` I think having a more descriptive type variable name here is better for user experience and helps address the "why" of an error. --- stdlib/2/__builtin__.pyi | 34 +++++++++++++++++++--------------- stdlib/2and3/builtins.pyi | 34 +++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/stdlib/2/__builtin__.pyi b/stdlib/2/__builtin__.pyi index 0edbb889e..a79300956 100644 --- a/stdlib/2/__builtin__.pyi +++ b/stdlib/2/__builtin__.pyi @@ -82,7 +82,7 @@ _T3 = TypeVar("_T3") _T4 = TypeVar("_T4") _T5 = TypeVar("_T5") _TT = TypeVar("_TT", bound="type") -_LT = TypeVar("_LT", bound=_SupportsLessThan) +_SupportsLessThanT = TypeVar("_SupportsLessThanT", bound=_SupportsLessThan) _TBE = TypeVar("_TBE", bound="BaseException") class object: @@ -962,7 +962,7 @@ class list(MutableSequence[_T], Generic[_T]): def reverse(self) -> None: ... if sys.version_info >= (3,): @overload - def sort(self: List[_LT], *, key: None = ..., reverse: bool = ...) -> None: ... + def sort(self: List[_SupportsLessThanT], *, key: None = ..., reverse: bool = ...) -> None: ... @overload def sort(self, *, key: Callable[[_T], _SupportsLessThan], reverse: bool = ...) -> None: ... else: @@ -1440,17 +1440,19 @@ else: if sys.version_info >= (3,): @overload - def max(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... + def max( + __arg1: _SupportsLessThanT, __arg2: _SupportsLessThanT, *_args: _SupportsLessThanT, key: None = ... + ) -> _SupportsLessThanT: ... @overload - def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def max(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + def max(__iterable: Iterable[_SupportsLessThanT], *, key: None = ...) -> _SupportsLessThanT: ... @overload - def max(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + def max(__iterable: Iterable[_T], *, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def max(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + def max(__iterable: Iterable[_SupportsLessThanT], *, key: None = ..., default: _T) -> Union[_SupportsLessThanT, _T]: ... @overload - def max(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... + def max(__iterable: Iterable[_T1], *, key: Callable[[_T1], _SupportsLessThanT], default: _T2) -> Union[_T1, _T2]: ... else: @overload @@ -1460,17 +1462,19 @@ else: if sys.version_info >= (3,): @overload - def min(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... + def min( + __arg1: _SupportsLessThanT, __arg2: _SupportsLessThanT, *_args: _SupportsLessThanT, key: None = ... + ) -> _SupportsLessThanT: ... @overload - def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def min(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + def min(__iterable: Iterable[_SupportsLessThanT], *, key: None = ...) -> _SupportsLessThanT: ... @overload - def min(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + def min(__iterable: Iterable[_T], *, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def min(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + def min(__iterable: Iterable[_SupportsLessThanT], *, key: None = ..., default: _T) -> Union[_SupportsLessThanT, _T]: ... @overload - def min(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... + def min(__iterable: Iterable[_T1], *, key: Callable[[_T1], _SupportsLessThanT], default: _T2) -> Union[_T1, _T2]: ... else: @overload @@ -1671,7 +1675,7 @@ def setattr(__obj: Any, __name: Text, __value: Any) -> None: ... if sys.version_info >= (3,): @overload - def sorted(__iterable: Iterable[_LT], *, key: None = ..., reverse: bool = ...) -> List[_LT]: ... + def sorted(__iterable: Iterable[_SupportsLessThanT], *, key: None = ..., reverse: bool = ...) -> List[_SupportsLessThanT]: ... @overload def sorted(__iterable: Iterable[_T], *, key: Callable[[_T], _SupportsLessThan], reverse: bool = ...) -> List[_T]: ... diff --git a/stdlib/2and3/builtins.pyi b/stdlib/2and3/builtins.pyi index 0edbb889e..a79300956 100644 --- a/stdlib/2and3/builtins.pyi +++ b/stdlib/2and3/builtins.pyi @@ -82,7 +82,7 @@ _T3 = TypeVar("_T3") _T4 = TypeVar("_T4") _T5 = TypeVar("_T5") _TT = TypeVar("_TT", bound="type") -_LT = TypeVar("_LT", bound=_SupportsLessThan) +_SupportsLessThanT = TypeVar("_SupportsLessThanT", bound=_SupportsLessThan) _TBE = TypeVar("_TBE", bound="BaseException") class object: @@ -962,7 +962,7 @@ class list(MutableSequence[_T], Generic[_T]): def reverse(self) -> None: ... if sys.version_info >= (3,): @overload - def sort(self: List[_LT], *, key: None = ..., reverse: bool = ...) -> None: ... + def sort(self: List[_SupportsLessThanT], *, key: None = ..., reverse: bool = ...) -> None: ... @overload def sort(self, *, key: Callable[[_T], _SupportsLessThan], reverse: bool = ...) -> None: ... else: @@ -1440,17 +1440,19 @@ else: if sys.version_info >= (3,): @overload - def max(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... + def max( + __arg1: _SupportsLessThanT, __arg2: _SupportsLessThanT, *_args: _SupportsLessThanT, key: None = ... + ) -> _SupportsLessThanT: ... @overload - def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def max(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + def max(__iterable: Iterable[_SupportsLessThanT], *, key: None = ...) -> _SupportsLessThanT: ... @overload - def max(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + def max(__iterable: Iterable[_T], *, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def max(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + def max(__iterable: Iterable[_SupportsLessThanT], *, key: None = ..., default: _T) -> Union[_SupportsLessThanT, _T]: ... @overload - def max(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... + def max(__iterable: Iterable[_T1], *, key: Callable[[_T1], _SupportsLessThanT], default: _T2) -> Union[_T1, _T2]: ... else: @overload @@ -1460,17 +1462,19 @@ else: if sys.version_info >= (3,): @overload - def min(__arg1: _LT, __arg2: _LT, *_args: _LT, key: None = ...) -> _LT: ... + def min( + __arg1: _SupportsLessThanT, __arg2: _SupportsLessThanT, *_args: _SupportsLessThanT, key: None = ... + ) -> _SupportsLessThanT: ... @overload - def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _LT]) -> _T: ... + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def min(__iterable: Iterable[_LT], *, key: None = ...) -> _LT: ... + def min(__iterable: Iterable[_SupportsLessThanT], *, key: None = ...) -> _SupportsLessThanT: ... @overload - def min(__iterable: Iterable[_T], *, key: Callable[[_T], _LT]) -> _T: ... + def min(__iterable: Iterable[_T], *, key: Callable[[_T], _SupportsLessThanT]) -> _T: ... @overload - def min(__iterable: Iterable[_LT], *, key: None = ..., default: _T) -> Union[_LT, _T]: ... + def min(__iterable: Iterable[_SupportsLessThanT], *, key: None = ..., default: _T) -> Union[_SupportsLessThanT, _T]: ... @overload - def min(__iterable: Iterable[_T1], *, key: Callable[[_T1], _LT], default: _T2) -> Union[_T1, _T2]: ... + def min(__iterable: Iterable[_T1], *, key: Callable[[_T1], _SupportsLessThanT], default: _T2) -> Union[_T1, _T2]: ... else: @overload @@ -1671,7 +1675,7 @@ def setattr(__obj: Any, __name: Text, __value: Any) -> None: ... if sys.version_info >= (3,): @overload - def sorted(__iterable: Iterable[_LT], *, key: None = ..., reverse: bool = ...) -> List[_LT]: ... + def sorted(__iterable: Iterable[_SupportsLessThanT], *, key: None = ..., reverse: bool = ...) -> List[_SupportsLessThanT]: ... @overload def sorted(__iterable: Iterable[_T], *, key: Callable[[_T], _SupportsLessThan], reverse: bool = ...) -> List[_T]: ...