Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suppress unsubscriptable-object warnings in type-checking blocks #5720

Merged
merged 4 commits into from Apr 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions ChangeLog
Expand Up @@ -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.

Expand Down
5 changes: 5 additions & 0 deletions doc/whatsnew/2.14.rst
Expand Up @@ -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.

Expand Down
6 changes: 5 additions & 1 deletion pylint/checkers/typecheck.py
Expand Up @@ -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")
Expand Down
13 changes: 13 additions & 0 deletions 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"