From 04fa4276eac6f623cd5ced4711afc9e58a68e230 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Thu, 7 Oct 2021 19:40:35 +0200 Subject: Fix false-negative with typing.Type + typing.Callable aliases (#5090) --- ChangeLog | 5 +++++ .../ext/typing/typing_consider_using_alias.py | 10 ++++++++- .../ext/typing/typing_consider_using_alias.txt | 17 +++++++++------ .../typing_consider_using_alias_without_future.py | 10 ++++++++- .../typing_consider_using_alias_without_future.txt | 17 +++++++++------ .../ext/typing/typing_deprecated_alias.py | 10 ++++++++- .../ext/typing/typing_deprecated_alias.txt | 25 ++++++++++++---------- 7 files changed, 66 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index c63a18a84..73238e1ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -84,6 +84,11 @@ Release date: TBA Closes #5048 +* ``TypingChecker`` + + * Fix false-negative for ``deprecated-typing-alias`` and ``consider-using-alias`` + with ``typing.Type`` + ``typing.Callable``. + What's New in Pylint 2.11.1? ============================ diff --git a/tests/functional/ext/typing/typing_consider_using_alias.py b/tests/functional/ext/typing/typing_consider_using_alias.py index 7549dd2e4..3d4037fdf 100644 --- a/tests/functional/ext/typing/typing_consider_using_alias.py +++ b/tests/functional/ext/typing/typing_consider_using_alias.py @@ -11,7 +11,7 @@ import collections.abc import typing from collections.abc import Awaitable from dataclasses import dataclass -from typing import Dict, List, Set, Union, TypedDict +from typing import Dict, List, Set, Union, TypedDict, Callable, Tuple, Type var1: typing.Dict[str, int] # [consider-using-alias] var2: List[int] # [consider-using-alias] @@ -33,6 +33,14 @@ Alias2 = Dict[int, List[int]] Alias3 = Union[int, typing.List[str]] Alias4 = List # [consider-using-alias] +var21: Type[object] # [consider-using-alias] +var22: Tuple[str] # [consider-using-alias] +var23: Callable[..., str] # [consider-using-alias] +var31: type[object] +var32: tuple[str] +var33: collections.abc.Callable[..., str] + + def func1(arg1: List[int], /, *args: List[int], arg2: set[int], **kwargs: Dict[str, int]) -> typing.Tuple[int]: # -1:[consider-using-alias,consider-using-alias,consider-using-alias,consider-using-alias] pass diff --git a/tests/functional/ext/typing/typing_consider_using_alias.txt b/tests/functional/ext/typing/typing_consider_using_alias.txt index 2ae1378f7..e3deddf7e 100644 --- a/tests/functional/ext/typing/typing_consider_using_alias.txt +++ b/tests/functional/ext/typing/typing_consider_using_alias.txt @@ -8,10 +8,13 @@ consider-using-alias:23:6::'typing.ContextManager' will be deprecated with PY39, consider-using-alias:24:6::'typing.Pattern' will be deprecated with PY39, consider using 're.Pattern' instead consider-using-alias:25:7::'typing.Match' will be deprecated with PY39, consider using 're.Match' instead consider-using-alias:34:9::'typing.List' will be deprecated with PY39, consider using 'list' instead -consider-using-alias:36:74:func1:'typing.Dict' will be deprecated with PY39, consider using 'dict' instead -consider-using-alias:36:16:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead -consider-using-alias:36:37:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead -consider-using-alias:36:93:func1:'typing.Tuple' will be deprecated with PY39, consider using 'tuple' instead -consider-using-alias:52:12:CustomNamedTuple:'typing.List' will be deprecated with PY39, consider using 'list' instead -consider-using-alias:57:12:CustomTypedDict2:'typing.List' will be deprecated with PY39, consider using 'list' instead -consider-using-alias:61:12:CustomDataClass:'typing.List' will be deprecated with PY39, consider using 'list' instead +consider-using-alias:36:7::'typing.Type' will be deprecated with PY39, consider using 'type' instead +consider-using-alias:37:7::'typing.Tuple' will be deprecated with PY39, consider using 'tuple' instead +consider-using-alias:38:7::'typing.Callable' will be deprecated with PY39, consider using 'collections.abc.Callable' instead +consider-using-alias:44:74:func1:'typing.Dict' will be deprecated with PY39, consider using 'dict' instead +consider-using-alias:44:16:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead +consider-using-alias:44:37:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead +consider-using-alias:44:93:func1:'typing.Tuple' will be deprecated with PY39, consider using 'tuple' instead +consider-using-alias:60:12:CustomNamedTuple:'typing.List' will be deprecated with PY39, consider using 'list' instead +consider-using-alias:65:12:CustomTypedDict2:'typing.List' will be deprecated with PY39, consider using 'list' instead +consider-using-alias:69:12:CustomDataClass:'typing.List' will be deprecated with PY39, consider using 'list' instead diff --git a/tests/functional/ext/typing/typing_consider_using_alias_without_future.py b/tests/functional/ext/typing/typing_consider_using_alias_without_future.py index 44f55b8b4..bdc792186 100644 --- a/tests/functional/ext/typing/typing_consider_using_alias_without_future.py +++ b/tests/functional/ext/typing/typing_consider_using_alias_without_future.py @@ -8,7 +8,7 @@ import collections.abc import typing from collections.abc import Awaitable from dataclasses import dataclass -from typing import Dict, List, Set, Union, TypedDict +from typing import Dict, List, Set, Union, TypedDict, Callable, Tuple, Type var1: typing.Dict[str, int] # [consider-using-alias] var2: List[int] # [consider-using-alias] @@ -30,6 +30,14 @@ Alias2 = Dict[int, List[int]] Alias3 = Union[int, typing.List[str]] Alias4 = List # [consider-using-alias] +var21: Type[object] # [consider-using-alias] +var22: Tuple[str] # [consider-using-alias] +var23: Callable[..., str] # [consider-using-alias] +var31: type[object] +var32: tuple[str] +var33: collections.abc.Callable[..., str] + + def func1(arg1: List[int], /, *args: List[int], arg2: set[int], **kwargs: Dict[str, int]) -> typing.Tuple[int]: # -1:[consider-using-alias,consider-using-alias,consider-using-alias,consider-using-alias] pass diff --git a/tests/functional/ext/typing/typing_consider_using_alias_without_future.txt b/tests/functional/ext/typing/typing_consider_using_alias_without_future.txt index c7105b965..f60436dc8 100644 --- a/tests/functional/ext/typing/typing_consider_using_alias_without_future.txt +++ b/tests/functional/ext/typing/typing_consider_using_alias_without_future.txt @@ -8,10 +8,13 @@ consider-using-alias:20:6::'typing.ContextManager' will be deprecated with PY39, consider-using-alias:21:6::'typing.Pattern' will be deprecated with PY39, consider using 're.Pattern' instead. Add 'from __future__ import annotations' as well consider-using-alias:22:7::'typing.Match' will be deprecated with PY39, consider using 're.Match' instead. Add 'from __future__ import annotations' as well consider-using-alias:31:9::'typing.List' will be deprecated with PY39, consider using 'list' instead -consider-using-alias:33:74:func1:'typing.Dict' will be deprecated with PY39, consider using 'dict' instead. Add 'from __future__ import annotations' as well -consider-using-alias:33:16:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well -consider-using-alias:33:37:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well -consider-using-alias:33:93:func1:'typing.Tuple' will be deprecated with PY39, consider using 'tuple' instead. Add 'from __future__ import annotations' as well -consider-using-alias:49:12:CustomNamedTuple:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well -consider-using-alias:54:12:CustomTypedDict2:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well -consider-using-alias:58:12:CustomDataClass:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well +consider-using-alias:33:7::'typing.Type' will be deprecated with PY39, consider using 'type' instead. Add 'from __future__ import annotations' as well +consider-using-alias:34:7::'typing.Tuple' will be deprecated with PY39, consider using 'tuple' instead. Add 'from __future__ import annotations' as well +consider-using-alias:35:7::'typing.Callable' will be deprecated with PY39, consider using 'collections.abc.Callable' instead. Add 'from __future__ import annotations' as well +consider-using-alias:41:74:func1:'typing.Dict' will be deprecated with PY39, consider using 'dict' instead. Add 'from __future__ import annotations' as well +consider-using-alias:41:16:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well +consider-using-alias:41:37:func1:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well +consider-using-alias:41:93:func1:'typing.Tuple' will be deprecated with PY39, consider using 'tuple' instead. Add 'from __future__ import annotations' as well +consider-using-alias:57:12:CustomNamedTuple:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well +consider-using-alias:62:12:CustomTypedDict2:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well +consider-using-alias:66:12:CustomDataClass:'typing.List' will be deprecated with PY39, consider using 'list' instead. Add 'from __future__ import annotations' as well diff --git a/tests/functional/ext/typing/typing_deprecated_alias.py b/tests/functional/ext/typing/typing_deprecated_alias.py index 3cd139cdb..5b84319dd 100644 --- a/tests/functional/ext/typing/typing_deprecated_alias.py +++ b/tests/functional/ext/typing/typing_deprecated_alias.py @@ -8,7 +8,7 @@ import collections.abc import typing from collections.abc import Awaitable from dataclasses import dataclass -from typing import Dict, List, Set, Union, TypedDict +from typing import Dict, List, Set, Union, TypedDict, Callable, Tuple, Type var1: typing.Dict[str, int] # [deprecated-typing-alias] var2: List[int] # [deprecated-typing-alias] @@ -30,6 +30,14 @@ Alias2 = Dict[int, List[int]] # [deprecated-typing-alias,deprecated-typing-alia Alias3 = Union[int, typing.List[str]] # [deprecated-typing-alias] Alias4 = List # [deprecated-typing-alias] +var21: Type[object] # [deprecated-typing-alias] +var22: Tuple[str] # [deprecated-typing-alias] +var23: Callable[..., str] # [deprecated-typing-alias] +var31: type[object] +var32: tuple[str] +var33: collections.abc.Callable[..., str] + + def func1(arg1: List[int], /, *args: List[int], arg2: set[int], **kwargs: Dict[str, int]) -> typing.Tuple[int]: # -1:[deprecated-typing-alias,deprecated-typing-alias,deprecated-typing-alias,deprecated-typing-alias] pass diff --git a/tests/functional/ext/typing/typing_deprecated_alias.txt b/tests/functional/ext/typing/typing_deprecated_alias.txt index fa74fc161..3da7cfefe 100644 --- a/tests/functional/ext/typing/typing_deprecated_alias.txt +++ b/tests/functional/ext/typing/typing_deprecated_alias.txt @@ -12,14 +12,17 @@ deprecated-typing-alias:29:9::'typing.Dict' is deprecated, use 'dict' instead deprecated-typing-alias:29:19::'typing.List' is deprecated, use 'list' instead deprecated-typing-alias:30:20::'typing.List' is deprecated, use 'list' instead deprecated-typing-alias:31:9::'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:33:74:func1:'typing.Dict' is deprecated, use 'dict' instead -deprecated-typing-alias:33:16:func1:'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:33:37:func1:'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:33:93:func1:'typing.Tuple' is deprecated, use 'tuple' instead -deprecated-typing-alias:40:20:CustomIntList:'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:44:28::'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:46:14::'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:49:12:CustomNamedTuple:'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:51:56::'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:54:12:CustomTypedDict2:'typing.List' is deprecated, use 'list' instead -deprecated-typing-alias:58:12:CustomDataClass:'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:33:7::'typing.Type' is deprecated, use 'type' instead +deprecated-typing-alias:34:7::'typing.Tuple' is deprecated, use 'tuple' instead +deprecated-typing-alias:35:7::'typing.Callable' is deprecated, use 'collections.abc.Callable' instead +deprecated-typing-alias:41:74:func1:'typing.Dict' is deprecated, use 'dict' instead +deprecated-typing-alias:41:16:func1:'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:41:37:func1:'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:41:93:func1:'typing.Tuple' is deprecated, use 'tuple' instead +deprecated-typing-alias:48:20:CustomIntList:'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:52:28::'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:54:14::'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:57:12:CustomNamedTuple:'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:59:56::'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:62:12:CustomTypedDict2:'typing.List' is deprecated, use 'list' instead +deprecated-typing-alias:66:12:CustomDataClass:'typing.List' is deprecated, use 'list' instead -- cgit v1.2.1