summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mueller <30130371+cdce8p@users.noreply.github.com>2021-10-07 19:40:35 +0200
committerGitHub <noreply@github.com>2021-10-07 19:40:35 +0200
commit04fa4276eac6f623cd5ced4711afc9e58a68e230 (patch)
tree8645e2d3524afd8173ceea13230fa3f1b7ea5302
parentc4ed76d3948afdb0176835c1fa6eb48f54bfd54f (diff)
downloadpylint-git-04fa4276eac6f623cd5ced4711afc9e58a68e230.tar.gz
Fix false-negative with typing.Type + typing.Callable aliases (#5090)
-rw-r--r--ChangeLog5
-rw-r--r--tests/functional/ext/typing/typing_consider_using_alias.py10
-rw-r--r--tests/functional/ext/typing/typing_consider_using_alias.txt17
-rw-r--r--tests/functional/ext/typing/typing_consider_using_alias_without_future.py10
-rw-r--r--tests/functional/ext/typing/typing_consider_using_alias_without_future.txt17
-rw-r--r--tests/functional/ext/typing/typing_deprecated_alias.py10
-rw-r--r--tests/functional/ext/typing/typing_deprecated_alias.txt25
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