From 13cad915e6b181b2f6a85efc2ead4856b23bccc0 Mon Sep 17 00:00:00 2001 From: Angus L'Herrou Date: Tue, 5 Oct 2021 18:44:29 -0400 Subject: Detect typing module attributes with 'import typing as ' (#632) * added functionality to detect typing module attributes with 'import typing as ' * remove async keyword from test_aliased_import --- pyflakes/checker.py | 12 +++++++++++- pyflakes/test/test_type_annotations.py | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pyflakes/checker.py b/pyflakes/checker.py index 6fafe89..45c7a4a 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -720,6 +720,16 @@ def _is_typing_helper(node, is_name_match_fn, scope_stack): return False + def _module_scope_is_typing(name): + for scope in reversed(scope_stack): + if name in scope: + return ( + isinstance(scope[name], Importation) and + scope[name].fullName in TYPING_MODULES + ) + + return False + return ( ( isinstance(node, ast.Name) and @@ -727,7 +737,7 @@ def _is_typing_helper(node, is_name_match_fn, scope_stack): ) or ( isinstance(node, ast.Attribute) and isinstance(node.value, ast.Name) and - node.value.id in TYPING_MODULES and + _module_scope_is_typing(node.value.id) and is_name_match_fn(node.attr) ) ) diff --git a/pyflakes/test/test_type_annotations.py b/pyflakes/test/test_type_annotations.py index 6a66bcd..f3b6c24 100644 --- a/pyflakes/test/test_type_annotations.py +++ b/pyflakes/test/test_type_annotations.py @@ -121,6 +121,23 @@ class TestTypeAnnotations(TestCase): def f(self, x): return x """) + def test_aliased_import(self): + """Detect when typing is imported as another name""" + self.flakes(""" + import typing as t + + @t.overload + def f(s): # type: (None) -> None + pass + + @t.overload + def f(s): # type: (int) -> int + pass + + def f(s): + return s + """) + def test_not_a_typing_overload(self): """regression test for @typing.overload detection bug in 2.1.0""" self.flakes(""" -- cgit v1.2.1