diff --git a/ChangeLog b/ChangeLog index 52007414b8..bef0c44164 100644 --- a/ChangeLog +++ b/ChangeLog @@ -59,6 +59,11 @@ Release date: TBA Closes #4525 +* Fix false positive for ``unsubscriptable-object`` in Python 3.8 and below for + statements guarded by ``if TYPE_CHECKING``. + + Closes #3979 + * Fix false negative for ``no-member`` when attempting to assign an instance attribute to itself without any prior assignment. diff --git a/doc/whatsnew/2.14.rst b/doc/whatsnew/2.14.rst index dfe548f4bd..fd9a156982 100644 --- a/doc/whatsnew/2.14.rst +++ b/doc/whatsnew/2.14.rst @@ -77,6 +77,11 @@ Other Changes Closes #5205 +* Fix false positive for ``unsubscriptable-object`` in Python 3.8 and below for + statements guarded by ``if TYPE_CHECKING``. + + Closes #3979 + * Fix false negative for ``no-member`` when attempting to assign an instance attribute to itself without any prior assignment. diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py index 2ab5ced330..5b3c6a372e 100644 --- a/pylint/checkers/typecheck.py +++ b/pylint/checkers/typecheck.py @@ -1951,7 +1951,11 @@ def visit_subscript(self, node: nodes.Subscript) -> None: return # It would be better to handle function # decorators, but let's start slow. - if supported_protocol and not supported_protocol(inferred, node): + if ( + supported_protocol + and not supported_protocol(inferred, node) + and not utils.in_type_checking_block(node) + ): self.add_message(msg, args=node.value.as_string(), node=node.value) @check_messages("dict-items-missing-iter") diff --git a/tests/functional/r/regression_02/regression_3979.py b/tests/functional/r/regression_02/regression_3979.py new file mode 100644 index 0000000000..4fb0c5a051 --- /dev/null +++ b/tests/functional/r/regression_02/regression_3979.py @@ -0,0 +1,13 @@ +""" +Regression test for https://github.com/PyCQA/pylint/issues/3979 +""" + +import os +from typing import TYPE_CHECKING, Any, Union + +if TYPE_CHECKING: + BasePathLike = os.PathLike[Any] # <-- pylint used to emit E1136 here +else: + BasePathLike = os.PathLike + +foo: Union[str, BasePathLike] = "bar"