Tarek Ziadé avatar Tarek Ziadé committed 13d068a

Fixed the exception scope behavior

Comments (0)

Files changed (5)

     MIT License.
-    from compiler import parse
-    iter_child_nodes = None
+    from compiler import parse      # NOQA
+    iter_child_nodes = None         # NOQA
 except ImportError:
-    from ast import parse, iter_child_nodes
+    from ast import parse, iter_child_nodes     # NOQA
 import optparse
 import sys


             return self.filename < other.filename
         return self.lineno < other.lineno
-    def __cmp__(self, other):
-        if self.filename != other.filename:
-            return cmp(self.filename, other.filename)
-        return cmp(self.lineno, other.lineno)
 class UnusedImport(Message):
     message = '%r imported but unused'


     import __builtin__      # NOQA
 except ImportError:
-    import builtins as __builtin__
+    import builtins as __builtin__  # NOQA
 import os.path
 import _ast
     COMPREHENSION = KEYWORD = handleChildren
     def EXCEPTHANDLER(self, node):
         if node.name is not None:
-            self.addBinding(node.lineno, FunctionDefinition(node.name, node))
+            self.addBinding(node.lineno, Assignment(node.name, node))
+        def runException():
+            for stmt in node.body:
+                self.handleNode(stmt, node)
+        self.deferFunction(runException)
     def addBinding(self, lineno, value, reportRedef=True):
         '''Called when a binding is altered.
                         and (not isinstance(value, Importation) \
                              or value.fullName == existing.fullName)
                         and reportRedef):
                                 lineno, value.name,
             if offset is not None:
                 offset = offset - (len(text) - len(line))
             sys.stderr.write('%s:%d: %s\n' % (filename, lineno, msg))
             sys.stderr.write(line + '\n')


     from StringIO import StringIO
 except ImportError:
-    from io import StringIO
+    from io import StringIO     # NOQA
 from flake8.mccabe import get_code_complexity
     # XXX quick dirty hack, just need to keep the line in the warning
     if not os.path.isfile(warning.filename):
         return False
-    line = open(warning.filename).readlines()[warning.lineno - 1]
+    # XXX should cache the file in memory
+    with open(warning.filename) as f:
+        line = f.readlines()[warning.lineno - 1]
     return skip_line(line)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.