diff options
author | John Vandenberg <jayvdb@gmail.com> | 2015-11-12 17:46:04 +1100 |
---|---|---|
committer | John Vandenberg <jayvdb@gmail.com> | 2015-11-12 18:13:18 +1100 |
commit | 4feb31f04e4748bb131c58502175a1cc3bf5a19a (patch) | |
tree | a6be230a30f18a87d3eb49be844acdd2f68571e7 | |
parent | 9a4d45c12e86cbb9effd749bd13ba48927063c23 (diff) | |
download | pyflakes-4feb31f04e4748bb131c58502175a1cc3bf5a19a.tar.gz |
Fix global removing all UndefinedName
03ffc763 introduced better global support,
however a logic error caused it to remove any
previously detected UndefinedName whenever
a global was encountered.
-rw-r--r-- | pyflakes/checker.py | 6 | ||||
-rw-r--r-- | pyflakes/test/test_undefined_names.py | 25 |
2 files changed, 28 insertions, 3 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py index 80f26ee..f3f8a46 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -693,10 +693,12 @@ class Checker(object): node_value = Assignment(node_name, node) # Remove UndefinedName messages already reported for this name. + # TODO: if the global is not used in this scope, it does not + # become a globally defined name. See test_unused_global. self.messages = [ m for m in self.messages if not - isinstance(m, messages.UndefinedName) and not - m.message_args[0] == node_name] + isinstance(m, messages.UndefinedName) or + m.message_args[0] != node_name] # Bind name to global scope if it doesn't exist already. global_scope.setdefault(node_name, node_value) diff --git a/pyflakes/test/test_undefined_names.py b/pyflakes/test/test_undefined_names.py index faaaf8c..bb50f2c 100644 --- a/pyflakes/test/test_undefined_names.py +++ b/pyflakes/test/test_undefined_names.py @@ -3,7 +3,7 @@ from _ast import PyCF_ONLY_AST from sys import version_info from pyflakes import messages as m, checker -from pyflakes.test.harness import TestCase, skipIf +from pyflakes.test.harness import TestCase, skipIf, skip class Test(TestCase): @@ -125,6 +125,29 @@ class Test(TestCase): print(x) ''', m.UndefinedName) + def test_global_reset_name_only(self): + """A global statement does not prevent other names being undefined.""" + # Only different undefined names are reported. + # See following test that fails where the same name is used. + self.flakes(''' + def f1(): + s + + def f2(): + global m + ''', m.UndefinedName) + + @skip("todo") + def test_unused_global(self): + """An unused global statement does not define the name.""" + self.flakes(''' + def f1(): + m + + def f2(): + global m + ''', m.UndefinedName) + def test_del(self): """Del deletes bindings.""" self.flakes('a = 1; del a; a', m.UndefinedName) |