Skip to content

Commit fb92ee8

Browse files
Michael0x2aJelleZijlstra
authored andcommitted
Make overloads in the Python 2 builtins with a 'None' fallback come first (#2261)
In short, this change makes sure calls like `map(None, a, b)` behave as expected when using `--no-strict-optional` is enabled. For additional context, see #5246
1 parent fa74160 commit fb92ee8

File tree

2 files changed

+50
-50
lines changed

2 files changed

+50
-50
lines changed

stdlib/2/__builtin__.pyi

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -735,11 +735,11 @@ def divmod(a: int, b: int) -> Tuple[int, int]: ...
735735
def divmod(a: float, b: float) -> Tuple[float, float]: ...
736736
def exit(code: Any = ...) -> NoReturn: ...
737737
@overload
738-
def filter(function: Callable[[_T], Any],
739-
iterable: Iterable[_T]) -> List[_T]: ...
740-
@overload
741738
def filter(function: None,
742739
iterable: Iterable[Optional[_T]]) -> List[_T]: ...
740+
@overload
741+
def filter(function: Callable[[_T], Any],
742+
iterable: Iterable[_T]) -> List[_T]: ...
743743
def format(o: object, format_spec: str = ...) -> str: ... # TODO unicode
744744
def getattr(o: Any, name: unicode, default: Optional[Any] = ...) -> Any: ...
745745
def hasattr(o: Any, name: unicode) -> bool: ...
@@ -756,71 +756,71 @@ def isinstance(o: object, t: Union[type, Tuple[Union[type, Tuple], ...]]) -> boo
756756
def issubclass(cls: type, classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ...
757757
def len(o: Sized) -> int: ...
758758
@overload
759-
def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ...
759+
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
760760
@overload
761-
def map(func: Callable[[_T1, _T2], _S],
761+
def map(func: None,
762762
iter1: Iterable[_T1],
763-
iter2: Iterable[_T2]) -> List[_S]: ...
763+
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
764764
@overload
765-
def map(func: Callable[[_T1, _T2, _T3], _S],
765+
def map(func: None,
766766
iter1: Iterable[_T1],
767767
iter2: Iterable[_T2],
768-
iter3: Iterable[_T3]) -> List[_S]: ...
768+
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
769769
@overload
770-
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
770+
def map(func: None,
771771
iter1: Iterable[_T1],
772772
iter2: Iterable[_T2],
773773
iter3: Iterable[_T3],
774-
iter4: Iterable[_T4]) -> List[_S]: ...
774+
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
775775
@overload
776-
def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S],
776+
def map(func: None,
777777
iter1: Iterable[_T1],
778778
iter2: Iterable[_T2],
779779
iter3: Iterable[_T3],
780780
iter4: Iterable[_T4],
781-
iter5: Iterable[_T5]) -> List[_S]: ...
781+
iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
782782
@overload
783-
def map(func: Callable[..., _S],
783+
def map(func: None,
784784
iter1: Iterable[Any],
785785
iter2: Iterable[Any],
786786
iter3: Iterable[Any],
787787
iter4: Iterable[Any],
788788
iter5: Iterable[Any],
789789
iter6: Iterable[Any],
790-
*iterables: Iterable[Any]) -> List[_S]: ...
790+
*iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ...
791791
@overload
792-
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
792+
def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ...
793793
@overload
794-
def map(func: None,
794+
def map(func: Callable[[_T1, _T2], _S],
795795
iter1: Iterable[_T1],
796-
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
796+
iter2: Iterable[_T2]) -> List[_S]: ...
797797
@overload
798-
def map(func: None,
798+
def map(func: Callable[[_T1, _T2, _T3], _S],
799799
iter1: Iterable[_T1],
800800
iter2: Iterable[_T2],
801-
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
801+
iter3: Iterable[_T3]) -> List[_S]: ...
802802
@overload
803-
def map(func: None,
803+
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
804804
iter1: Iterable[_T1],
805805
iter2: Iterable[_T2],
806806
iter3: Iterable[_T3],
807-
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
807+
iter4: Iterable[_T4]) -> List[_S]: ...
808808
@overload
809-
def map(func: None,
809+
def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S],
810810
iter1: Iterable[_T1],
811811
iter2: Iterable[_T2],
812812
iter3: Iterable[_T3],
813813
iter4: Iterable[_T4],
814-
iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
814+
iter5: Iterable[_T5]) -> List[_S]: ...
815815
@overload
816-
def map(func: None,
816+
def map(func: Callable[..., _S],
817817
iter1: Iterable[Any],
818818
iter2: Iterable[Any],
819819
iter3: Iterable[Any],
820820
iter4: Iterable[Any],
821821
iter5: Iterable[Any],
822822
iter6: Iterable[Any],
823-
*iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ...
823+
*iterables: Iterable[Any]) -> List[_S]: ...
824824
@overload
825825
def max(arg1: _T, arg2: _T, *args: _T, key: Callable[[_T], Any] = ...) -> _T: ...
826826
@overload

stdlib/2/builtins.pyi

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -735,11 +735,11 @@ def divmod(a: int, b: int) -> Tuple[int, int]: ...
735735
def divmod(a: float, b: float) -> Tuple[float, float]: ...
736736
def exit(code: Any = ...) -> NoReturn: ...
737737
@overload
738-
def filter(function: Callable[[_T], Any],
739-
iterable: Iterable[_T]) -> List[_T]: ...
740-
@overload
741738
def filter(function: None,
742739
iterable: Iterable[Optional[_T]]) -> List[_T]: ...
740+
@overload
741+
def filter(function: Callable[[_T], Any],
742+
iterable: Iterable[_T]) -> List[_T]: ...
743743
def format(o: object, format_spec: str = ...) -> str: ... # TODO unicode
744744
def getattr(o: Any, name: unicode, default: Optional[Any] = ...) -> Any: ...
745745
def hasattr(o: Any, name: unicode) -> bool: ...
@@ -756,71 +756,71 @@ def isinstance(o: object, t: Union[type, Tuple[Union[type, Tuple], ...]]) -> boo
756756
def issubclass(cls: type, classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ...
757757
def len(o: Sized) -> int: ...
758758
@overload
759-
def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ...
759+
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
760760
@overload
761-
def map(func: Callable[[_T1, _T2], _S],
761+
def map(func: None,
762762
iter1: Iterable[_T1],
763-
iter2: Iterable[_T2]) -> List[_S]: ...
763+
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
764764
@overload
765-
def map(func: Callable[[_T1, _T2, _T3], _S],
765+
def map(func: None,
766766
iter1: Iterable[_T1],
767767
iter2: Iterable[_T2],
768-
iter3: Iterable[_T3]) -> List[_S]: ...
768+
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
769769
@overload
770-
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
770+
def map(func: None,
771771
iter1: Iterable[_T1],
772772
iter2: Iterable[_T2],
773773
iter3: Iterable[_T3],
774-
iter4: Iterable[_T4]) -> List[_S]: ...
774+
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
775775
@overload
776-
def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S],
776+
def map(func: None,
777777
iter1: Iterable[_T1],
778778
iter2: Iterable[_T2],
779779
iter3: Iterable[_T3],
780780
iter4: Iterable[_T4],
781-
iter5: Iterable[_T5]) -> List[_S]: ...
781+
iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
782782
@overload
783-
def map(func: Callable[..., _S],
783+
def map(func: None,
784784
iter1: Iterable[Any],
785785
iter2: Iterable[Any],
786786
iter3: Iterable[Any],
787787
iter4: Iterable[Any],
788788
iter5: Iterable[Any],
789789
iter6: Iterable[Any],
790-
*iterables: Iterable[Any]) -> List[_S]: ...
790+
*iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ...
791791
@overload
792-
def map(func: None, iter1: Iterable[_T1]) -> List[_T1]: ...
792+
def map(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> List[_S]: ...
793793
@overload
794-
def map(func: None,
794+
def map(func: Callable[[_T1, _T2], _S],
795795
iter1: Iterable[_T1],
796-
iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ...
796+
iter2: Iterable[_T2]) -> List[_S]: ...
797797
@overload
798-
def map(func: None,
798+
def map(func: Callable[[_T1, _T2, _T3], _S],
799799
iter1: Iterable[_T1],
800800
iter2: Iterable[_T2],
801-
iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ...
801+
iter3: Iterable[_T3]) -> List[_S]: ...
802802
@overload
803-
def map(func: None,
803+
def map(func: Callable[[_T1, _T2, _T3, _T4], _S],
804804
iter1: Iterable[_T1],
805805
iter2: Iterable[_T2],
806806
iter3: Iterable[_T3],
807-
iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ...
807+
iter4: Iterable[_T4]) -> List[_S]: ...
808808
@overload
809-
def map(func: None,
809+
def map(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S],
810810
iter1: Iterable[_T1],
811811
iter2: Iterable[_T2],
812812
iter3: Iterable[_T3],
813813
iter4: Iterable[_T4],
814-
iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ...
814+
iter5: Iterable[_T5]) -> List[_S]: ...
815815
@overload
816-
def map(func: None,
816+
def map(func: Callable[..., _S],
817817
iter1: Iterable[Any],
818818
iter2: Iterable[Any],
819819
iter3: Iterable[Any],
820820
iter4: Iterable[Any],
821821
iter5: Iterable[Any],
822822
iter6: Iterable[Any],
823-
*iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ...
823+
*iterables: Iterable[Any]) -> List[_S]: ...
824824
@overload
825825
def max(arg1: _T, arg2: _T, *args: _T, key: Callable[[_T], Any] = ...) -> _T: ...
826826
@overload

0 commit comments

Comments
 (0)