From 1fae3dea5108a006d35da9e9ab785ca1ed1bc998 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 12 Feb 2022 09:52:33 -0500 Subject: ignore `__all__` when not directly assigned (#675) --- pyflakes/checker.py | 9 ++++++++- pyflakes/test/test_imports.py | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pyflakes/checker.py b/pyflakes/checker.py index 45c7a4a..45f2a42 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -1291,7 +1291,14 @@ class Checker(object): parent_stmt != node._pyflakes_parent and not self.isLiteralTupleUnpacking(parent_stmt)): binding = Binding(name, node) - elif name == '__all__' and isinstance(self.scope, ModuleScope): + elif ( + name == '__all__' and + isinstance(self.scope, ModuleScope) and + isinstance( + node._pyflakes_parent, + (ast.Assign, ast.AugAssign, ast.AnnAssign) + ) + ): binding = ExportBinding(name, node._pyflakes_parent, self.scope) elif PY2 and isinstance(getattr(node, 'ctx', None), ast.Param): binding = Argument(name, self.getScopeNode(node)) diff --git a/pyflakes/test/test_imports.py b/pyflakes/test/test_imports.py index d5be269..07504d9 100644 --- a/pyflakes/test/test_imports.py +++ b/pyflakes/test/test_imports.py @@ -1057,6 +1057,12 @@ class TestSpecialAll(TestCase): __all__ = ["bar"] ''', m.UnusedImport) + def test_ignored_when_not_directly_assigned(self): + self.flakes(''' + import bar + (__all__,) = ("foo",) + ''', m.UnusedImport) + def test_warningSuppressed(self): """ If a name is imported and unused but is named in C{__all__}, no warning -- cgit v1.2.1