summaryrefslogtreecommitdiff
path: root/pyflakes/checker.py
diff options
context:
space:
mode:
authorAnthony Sottile <asottile@umich.edu>2019-11-19 13:58:52 -0800
committerAnthony Sottile <asottile@umich.edu>2019-11-19 13:58:52 -0800
commit1b5f177731f3487bb0aa6e591ee734886a2d2328 (patch)
tree89298216c3d3a59cebce147f823c07dc7b282dac /pyflakes/checker.py
parent1911c203a13826d2eb03d582d60874b91e36f4fc (diff)
downloadpyflakes-future_proof.tar.gz
Make pyflakes more resistant to syntax additionsfuture_proof
Diffstat (limited to 'pyflakes/checker.py')
-rw-r--r--pyflakes/checker.py20
1 files changed, 19 insertions, 1 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py
index c8ccf56..3f5a7e0 100644
--- a/pyflakes/checker.py
+++ b/pyflakes/checker.py
@@ -1009,12 +1009,30 @@ class Checker(object):
self.scope[value.name] = value
+ def _unknown_handler(self, node):
+ # this environment variable configures whether to error on unknown
+ # ast types.
+ #
+ # this is silent by default but the error is enabled for the pyflakes
+ # testsuite.
+ #
+ # this allows new syntax to be added to python without *requiring*
+ # changes from the pyflakes side. but will still produce an error
+ # in the pyflakes testsuite (so more specific handling can be added if
+ # needed).
+ if os.environ.get('PYFLAKES_ERROR_UNKNOWN'):
+ raise NotImplementedError('Unexpected type: {}'.format(type(node)))
+ else:
+ self.handleChildren(node)
+
def getNodeHandler(self, node_class):
try:
return self._nodeHandlers[node_class]
except KeyError:
nodeType = getNodeType(node_class)
- self._nodeHandlers[node_class] = handler = getattr(self, nodeType)
+ self._nodeHandlers[node_class] = handler = getattr(
+ self, nodeType, self._unknown_handler,
+ )
return handler
def handleNodeLoad(self, node):