diff options
author | Anthony Sottile <asottile@umich.edu> | 2022-11-27 12:36:00 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-27 15:36:00 -0500 |
commit | 37f203ed6ec9c54ea4ded0b8480846ac750a1747 (patch) | |
tree | ddf86f10069b5dc68c3274e12d41c82af0616738 | |
parent | 3c70084704044f47441fbe1e5d953110dfcd4df0 (diff) | |
download | pyflakes-37f203ed6ec9c54ea4ded0b8480846ac750a1747.tar.gz |
fold unused checks into final scope checking (#750)
-rw-r--r-- | pyflakes/checker.py | 37 |
1 files changed, 7 insertions, 30 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py index 15b4c2b..a79de56 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -769,7 +769,6 @@ class Checker: withDoctest='PYFLAKES_DOCTEST' in os.environ, file_tokens=()): self._nodeHandlers = {} self._deferredFunctions = [] - self._deferredAssignments = [] self.deadScopes = [] self.messages = [] self.filename = filename @@ -790,11 +789,8 @@ class Checker: # Set _deferredFunctions to None so that deferFunction will fail # noisily if called after we've run through the deferred functions. self._deferredFunctions = None - self.runDeferred(self._deferredAssignments) - # Set _deferredAssignments to None so that deferAssignment will fail - # noisily if called after we've run through the deferred assignments. - self._deferredAssignments = None del self.scopeStack[1:] + self.popScope() self.checkDeadScopes() @@ -815,13 +811,6 @@ class Checker: """ self._deferredFunctions.append((callable, self.scopeStack[:], self.offset)) - def deferAssignment(self, callable): - """ - Schedule an assignment handler to be called just after deferred - function handlers. - """ - self._deferredAssignments.append((callable, self.scopeStack[:], self.offset)) - def runDeferred(self, deferred): """ Run the callables in C{deferred} using their associated scope stack. @@ -879,6 +868,12 @@ class Checker: if isinstance(scope, ClassScope): continue + if isinstance(scope, FunctionScope): + for name, binding in scope.unused_assignments(): + self.report(messages.UnusedVariable, binding.source, name) + for name, binding in scope.unused_annotations(): + self.report(messages.UnusedAnnotation, binding.source, name) + all_binding = scope.get('__all__') if all_binding and not isinstance(all_binding, ExportBinding): all_binding = None @@ -1991,28 +1986,10 @@ class Checker: self.handleNode(default, node) def runFunction(): - self.pushScope() self.handleChildren(node, omit=['decorator_list', 'returns']) - def check_unused_assignments(): - """ - Check to see if any assignments have not been used. - """ - for name, binding in self.scope.unused_assignments(): - self.report(messages.UnusedVariable, binding.source, name) - - def check_unused_annotations(): - """ - Check to see if any annotations have not been used. - """ - for name, binding in self.scope.unused_annotations(): - self.report(messages.UnusedAnnotation, binding.source, name) - - self.deferAssignment(check_unused_assignments) - self.deferAssignment(check_unused_annotations) - self.popScope() self.deferFunction(runFunction) |