diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index cf11e213cf..7c9024af73 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -61,7 +61,7 @@ import re import sys from functools import lru_cache -from typing import DefaultDict, List, Optional, Set, Tuple +from typing import DefaultDict, List, Optional, Set, Tuple, Union import astroid from astroid import nodes @@ -358,12 +358,13 @@ def _assigned_locally(name_node): return any(a.name == name_node.name for a in assign_stmts) -def _is_type_checking_import(node): - parent = node.parent - if not isinstance(parent, nodes.If): - return False - test = parent.test - return test.as_string() in TYPING_TYPE_CHECKS_GUARDS +def _is_type_checking_import(node: Union[nodes.Import, nodes.ImportFrom]) -> bool: + """Check if an import node is guarded by a TYPE_CHECKS guard""" + for ancestor in node.node_ancestors(): + if isinstance(ancestor, nodes.If): + if ancestor.test.as_string() in TYPING_TYPE_CHECKS_GUARDS: + return True + return False def _has_locals_call_after_node(stmt, scope): diff --git a/tests/functional/u/unused/unused_import.py b/tests/functional/u/unused/unused_import.py index 3bf17c6c98..bd624dc76c 100644 --- a/tests/functional/u/unused/unused_import.py +++ b/tests/functional/u/unused/unused_import.py @@ -61,3 +61,7 @@ def dummy(self, truc): def blop(self): """yo""" print(self, 'blip') + +if TYPE_CHECKING: + if sys.version_info >= (3, 6, 2): + from typing import NoReturn