diff options
author | Phil Frost <indigo@bitglue.com> | 2015-08-14 12:00:37 -0400 |
---|---|---|
committer | Phil Frost <indigo@bitglue.com> | 2015-08-14 12:00:37 -0400 |
commit | 12653ca4dcf56f10ac041dae7a916e86343239ca (patch) | |
tree | 755eec69d175afa186c502361f59bd545d31363d | |
parent | 1c5bbdf79f4ef387cd6d96f565fd262678c4c552 (diff) | |
parent | ec8dbbb30a2a5ad8a1522d5b474b942e1eef98c5 (diff) | |
download | pyflakes-12653ca4dcf56f10ac041dae7a916e86343239ca.tar.gz |
Merge pull request #26 from ryneeverett/unused-reassigned-variable
Add tests to document hard to test cases
It would be nice if shadowing an unused variable was an error, but this
is quite difficult to implement in a way which does not also raise false
positives in the context of loops.
-rw-r--r-- | pyflakes/checker.py | 1 | ||||
-rw-r--r-- | pyflakes/test/test_other.py | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py index fcdce9c..abd7f50 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -527,6 +527,7 @@ class Checker(object): else: binding = Assignment(name, node) if name in self.scope: + # then assume the rebound name is used as a global or within a loop binding.used = self.scope[name].used self.addBinding(node, binding) diff --git a/pyflakes/test/test_other.py b/pyflakes/test/test_other.py index ac116c8..718d16f 100644 --- a/pyflakes/test/test_other.py +++ b/pyflakes/test/test_other.py @@ -523,6 +523,30 @@ class TestUnusedAssignment(TestCase): return ''', m.UnusedVariable) + @skip("todo: Difficult because it does't apply in the context of a loop") + def test_unusedReassignedVariable(self): + """ + Shadowing a used variable can still raise an UnusedVariable warning. + """ + self.flakes(''' + def a(): + b = 1 + b.foo() + b = 2 + ''', m.UnusedVariable) + + def test_variableUsedInLoop(self): + """ + Shadowing a used variable cannot raise an UnusedVariable warning in the + context of a loop. + """ + self.flakes(''' + def a(): + b = True + while b: + b = False + ''') + def test_assignToGlobal(self): """ Assigning to a global and then not using that global is perfectly |