diff options
Diffstat (limited to 'pyflakes/checker.py')
-rw-r--r-- | pyflakes/checker.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py index 9b39e6c..0ee6189 100644 --- a/pyflakes/checker.py +++ b/pyflakes/checker.py @@ -38,10 +38,17 @@ if PY2: def getNodeType(node_class): # workaround str.upper() which is locale-dependent return str(unicode(node_class.__name__).upper()) + + def get_raise_argument(node): + return node.type + else: def getNodeType(node_class): return node_class.__name__.upper() + def get_raise_argument(node): + return node.exc + # Silence `pyflakes` from reporting `undefined name 'unicode'` in Python 3. unicode = str @@ -138,6 +145,10 @@ def convert_to_value(item): return UnhandledKeyType() +def is_notimplemented_name_node(node): + return isinstance(node, ast.Name) and getNodeName(node) == 'NotImplemented' + + class Binding(object): """ Represents the binding of a value to a name. @@ -965,7 +976,7 @@ class Checker(object): # "stmt" type nodes DELETE = PRINT = FOR = ASYNCFOR = WHILE = IF = WITH = WITHITEM = \ - ASYNCWITH = ASYNCWITHITEM = RAISE = TRYFINALLY = EXEC = \ + ASYNCWITH = ASYNCWITHITEM = TRYFINALLY = EXEC = \ EXPR = ASSIGN = handleChildren PASS = ignore @@ -989,6 +1000,19 @@ class Checker(object): EQ = NOTEQ = LT = LTE = GT = GTE = IS = ISNOT = IN = NOTIN = \ MATMULT = ignore + def RAISE(self, node): + self.handleChildren(node) + + arg = get_raise_argument(node) + + if isinstance(arg, ast.Call): + if is_notimplemented_name_node(arg.func): + # Handle "raise NotImplemented(...)" + self.report(messages.RaiseNotImplemented, node) + elif is_notimplemented_name_node(arg): + # Handle "raise NotImplemented" + self.report(messages.RaiseNotImplemented, node) + # additional node types COMPREHENSION = KEYWORD = FORMATTEDVALUE = JOINEDSTR = handleChildren |