UtilitiesPython2/pyflakes/checker.py

Fri, 18 Apr 2014 15:07:48 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 18 Apr 2014 15:07:48 +0200
changeset 3518
1d681235c1b4
parent 3246
4cd58a0d6c28
permissions
-rw-r--r--

Fixed the Mercurial command server client handling large data chunks on slow machines.

802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
3 # Copyright (c) 2010 - 2014 Detlev Offenbach <detlev@die-offenbachs.de>
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
5 # Original (c) 2005-2010 Divmod, Inc.
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 #
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
7 # This module is based on pyflakes for Python2 and Python3, but was modified to
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
8 # be integrated into eric5
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
10 import doctest
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
11 import os
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
12 import sys
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
13 try:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
14 builtin_vars = dir(__import__('builtins'))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
15 PY2 = False
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
16 ## added for eric5
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
17 basestring = str
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
18 ## end added for eric5
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
19 except ImportError:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
20 builtin_vars = dir(__import__('__builtin__'))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
21 PY2 = True
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
23 try:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
24 import ast
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
25 iter_child_nodes = ast.iter_child_nodes
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
26 except ImportError: # Python 2.5
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
27 import _ast as ast
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
28
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
29 if 'decorator_list' not in ast.ClassDef._fields:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
30 # Patch the missing attribute 'decorator_list'
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
31 ast.ClassDef.decorator_list = ()
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
32 ast.FunctionDef.decorator_list = property(lambda s: s.decorators)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
33
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
34 def iter_child_nodes(node):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
35 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
36 Yield all direct child nodes of *node*, that is, all fields that
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
37 are nodes and all items of fields that are lists of nodes.
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
38 """
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
39 for name in node._fields:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
40 field = getattr(node, name, None)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
41 if isinstance(field, ast.AST):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
42 yield field
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
43 elif isinstance(field, list):
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
44 for item in field:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
45 yield item
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
46 # Python >= 3.3 uses ast.Try instead of (ast.TryExcept + ast.TryFinally)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
47 if hasattr(ast, 'Try'):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
48 ast_TryExcept = ast.Try
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
49 ast_TryFinally = ()
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
50 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
51 ast_TryExcept = ast.TryExcept
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
52 ast_TryFinally = ast.TryFinally
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
53
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
54 from . import messages
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
55
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
56 if PY2:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
57 def getNodeType(node_class):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
58 # workaround str.upper() which is locale-dependent
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
59 return str(unicode(node_class.__name__).upper()) # __IGNORE_WARNING__
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
60 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
61 def getNodeType(node_class):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
62 return node_class.__name__.upper()
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
63
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
64
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 class Binding(object):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 Represents the binding of a value to a name.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 The checker uses this to keep track of which names have been bound and
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
70 which names have not. See Assignment for a special type of binding that
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 is checked with stricter rules.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 def __init__(self, name, source):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.name = name
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.source = source
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.used = False
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 def __str__(self):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 return self.name
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 def __repr__(self):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 return '<%s object %r from line %r at 0x%x>' % (
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__class__.__name__,
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.name,
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.source.lineno,
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 id(self))
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
88
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 class Importation(Binding):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 A binding created by an import statement.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 def __init__(self, name, source):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.fullName = name
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 name = name.split('.')[0]
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 super(Importation, self).__init__(name, source)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
98
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 class Argument(Binding):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 Represents binding a name as an argument.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
103 pass
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
104
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
105
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
106 class Definition(Binding):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
107 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
108 A binding that defines a function or a class.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
109 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
110 pass
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
112
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 class Assignment(Binding):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 Represents binding a name with an explicit assignment.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 The checker will raise warnings for any Assignment that isn't used. Also,
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 the checker does not consider assignments in tuple/list unpacking to be
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 Assignments, rather it treats them as simple Bindings.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
121 pass
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
123
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
124 class FunctionDefinition(Definition):
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 Represents a function definition.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 pass
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
130
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
131 class ClassDefinition(Definition):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
132 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
133 Represents a class definition.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
134 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
135 pass
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
136
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
137
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 class ExportBinding(Binding):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 A binding created by an __all__ assignment. If the names in the list
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 can be determined statically, they will be treated as names for export and
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 additional checking applied to them.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 The only __all__ assignment that can be recognized is one which takes
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 the value of a literal list containing literal strings. For example::
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 __all__ = ["foo", "bar"]
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 Names which are imported and not otherwise used but appear in the value of
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 __all__ will not have an unused import warning reported for them.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 def names(self):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 Return a list of the names referenced by this binding.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 names = []
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
157 if isinstance(self.source, ast.List):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
158 for node in self.source.elts:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
159 if isinstance(node, ast.Str):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
160 names.append(node.s)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 return names
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
163
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 class Scope(dict):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 Class defining the scope base class.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 importStarred = False # set to True when import * is found
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 def __repr__(self):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
171 scope_cls = self.__class__.__name__
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
172 return '<%s at 0x%x %s>' % (scope_cls, id(self), dict.__repr__(self))
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
174
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 class ClassScope(Scope):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 Class representing a name scope for a class.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 pass
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
181
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 class FunctionScope(Scope):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 Class representing a name scope for a function.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
186 usesLocals = False
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
187 alwaysUsed = set(['__tracebackhide__',
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
188 '__traceback_info__', '__traceback_supplement__'])
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
189
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 def __init__(self):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 super(FunctionScope, self).__init__()
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
192 # Simplify: manage the special locals as globals
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
193 self.globals = self.alwaysUsed.copy()
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
194
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
195 def unusedAssignments(self):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
196 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
197 Return a generator for the assignments which have not been used.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
198 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
199 for name, binding in self.items():
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
200 if (not binding.used and name not in self.globals
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
201 and not self.usesLocals
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
202 and isinstance(binding, Assignment)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
203 yield name, binding
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
204
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
205
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
206 class GeneratorScope(Scope):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
207 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
208 Class representing a name scope for a generator function.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
209 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
210 pass
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
212
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 class ModuleScope(Scope):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 Class representing a name scope for a module.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 pass
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
219 # Globally defined names which are not attributes of the builtins module, or
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
220 # are only present on some platforms.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
221 _MAGIC_GLOBALS = ['__file__', '__builtins__', 'WindowsError']
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
222
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
223
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
224 def getNodeName(node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
225 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
226 Module function for getting the name of a node.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
227 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
228 # Returns node.id, or node.name, or None
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
229 if hasattr(node, 'id'): # One of the many nodes with an id
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
230 return node.id
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
231 if hasattr(node, 'name'): # a ExceptHandler node
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
232 return node.name
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
234
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 class Checker(object):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 Class to check the cleanliness and sanity of Python code.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 nodeDepth = 0
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
240 offset = None
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 traceTree = False
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
242 withDoctest = ('PYFLAKES_NODOCTEST' not in os.environ)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
244 builtIns = set(builtin_vars).union(_MAGIC_GLOBALS)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
245 _customBuiltIns = os.environ.get('PYFLAKES_BUILTINS')
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
246 if _customBuiltIns:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
247 builtIns.update(_customBuiltIns.split(','))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
248 del _customBuiltIns
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
249
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
250 def __init__(self, tree, filename='(none)', builtins=None):
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 Constructor
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
254 @param tree parsed module tree or module source code
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 @param filename name of the module file (string)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
256 @param builtins set of names to be treated as builtins (set of string)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
258 self._nodeHandlers = {}
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 self._deferredFunctions = []
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 self._deferredAssignments = []
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
261 self.deadScopes = []
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 self.messages = []
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 self.filename = filename
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
264 if builtins:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
265 self.builtIns = self.builtIns.union(builtins)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 self.scopeStack = [ModuleScope()]
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
267 self.exceptHandlers = [()]
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 self.futuresAllowed = True
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
270 ## added for eric5
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
271 if isinstance(tree, basestring):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
272 tree = compile(tree, filename, "exec", ast.PyCF_ONLY_AST)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
273 ## end added for eric5
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
274
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
275 self.root = tree
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
276 self.handleChildren(tree)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
277 self.runDeferred(self._deferredFunctions)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 # Set _deferredFunctions to None so that deferFunction will fail
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 # noisily if called after we've run through the deferred functions.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 self._deferredFunctions = None
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
281 self.runDeferred(self._deferredAssignments)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 # Set _deferredAssignments to None so that deferAssignment will fail
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
283 # noisily if called after we've run through the deferred assignments.
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 self._deferredAssignments = None
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 del self.scopeStack[1:]
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 self.popScope()
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
287 self.checkDeadScopes()
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 def deferFunction(self, callable):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 '''
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 Schedule a function handler to be called just before completion.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 This is used for handling function bodies, which must be deferred
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 because code later in the file might modify the global scope. When
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 `callable` is called, the scope at the time this is called will be
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 restored, however it will contain any new bindings added to it.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 '''
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
298 self._deferredFunctions.append((callable, self.scopeStack[:],
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
299 self.offset))
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 def deferAssignment(self, callable):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 Schedule an assignment handler to be called just after deferred
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 function handlers.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
306 self._deferredAssignments.append((callable, self.scopeStack[:],
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
307 self.offset))
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
309 def runDeferred(self, deferred):
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 """
1544
d06ffad32855 Fixed a source docu in py2flakes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1535
diff changeset
311 Run the callables in deferred using their associated scope stack.
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
313 for handler, scope, offset in deferred:
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 self.scopeStack = scope
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
315 self.offset = offset
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 handler()
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
318 @property
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 def scope(self):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 return self.scopeStack[-1]
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 def popScope(self):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
323 self.deadScopes.append(self.scopeStack.pop())
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
325 def checkDeadScopes(self):
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 Look at scopes which have been fully examined and report names in them
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 which were imported but unused.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
330 for scope in self.deadScopes:
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 export = isinstance(scope.get('__all__'), ExportBinding)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 if export:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 all = scope['__all__'].names()
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
334 if not scope.importStarred and \
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
335 os.path.basename(self.filename) != '__init__.py':
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 # Look for possible mistakes in the export list
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 undefined = set(all) - set(scope)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 for name in undefined:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
339 self.report(messages.UndefinedExport,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
340 scope['__all__'].source, name)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 else:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 all = []
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 # Look for imported names that aren't used.
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
345 for importation in scope.values():
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 if isinstance(importation, Importation):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 if not importation.used and importation.name not in all:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
348 self.report(messages.UnusedImport,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
349 importation.source, importation.name)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
350
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
351 def pushScope(self, scopeClass=FunctionScope):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
352 self.scopeStack.append(scopeClass())
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
354 def pushFunctionScope(self): # XXX Deprecated
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
355 self.pushScope(FunctionScope)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
357 def pushClassScope(self): # XXX Deprecated
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
358 self.pushScope(ClassScope)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 def report(self, messageClass, *args, **kwargs):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 self.messages.append(messageClass(self.filename, *args, **kwargs))
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
363 def hasParent(self, node, kind):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
364 while hasattr(node, 'parent'):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
365 node = node.parent
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
366 if isinstance(node, kind):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
367 return True
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
368
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
369 def getCommonAncestor(self, lnode, rnode, stop=None):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
370 if not stop:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
371 stop = self.root
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
372 if lnode is rnode:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
373 return lnode
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
374 if stop in (lnode, rnode):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
375 return stop
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
376
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
377 if not hasattr(lnode, 'parent') or not hasattr(rnode, 'parent'):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
378 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
379 if (lnode.level > rnode.level):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
380 return self.getCommonAncestor(lnode.parent, rnode, stop)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
381 if (rnode.level > lnode.level):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
382 return self.getCommonAncestor(lnode, rnode.parent, stop)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
383 return self.getCommonAncestor(lnode.parent, rnode.parent, stop)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
384
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
385 def descendantOf(self, node, ancestors, stop=None):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
386 for a in ancestors:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
387 if self.getCommonAncestor(node, a, stop) not in (stop, None):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
388 return True
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
389 return False
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
390
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
391 def onFork(self, parent, lnode, rnode, items):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
392 return (self.descendantOf(lnode, items, parent) ^
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
393 self.descendantOf(rnode, items, parent))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
394
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
395 def differentForks(self, lnode, rnode):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
396 """True, if lnode and rnode are located on different forks of IF/TRY"""
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
397 ancestor = self.getCommonAncestor(lnode, rnode)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
398 if isinstance(ancestor, ast.If):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
399 for fork in (ancestor.body, ancestor.orelse):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
400 if self.onFork(ancestor, lnode, rnode, fork):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
401 return True
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
402 elif isinstance(ancestor, ast_TryExcept):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
403 body = ancestor.body + ancestor.orelse
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
404 for fork in [body] + [[hdl] for hdl in ancestor.handlers]:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
405 if self.onFork(ancestor, lnode, rnode, fork):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
406 return True
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
407 elif isinstance(ancestor, ast_TryFinally):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
408 if self.onFork(ancestor, lnode, rnode, ancestor.body):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
409 return True
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
410 return False
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
411
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
412 def addBinding(self, node, value, reportRedef=True):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
413 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
414 Called when a binding is altered.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
415
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
416 - `node` is the statement responsible for the change
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
417 - `value` is the optional new value, a Binding instance, associated
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
418 with the binding; if None, the binding is deleted if it exists.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
419 - if `reportRedef` is True (default), rebinding while unused will be
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
420 reported.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
421 """
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
422 redefinedWhileUnused = False
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
423 if not isinstance(self.scope, ClassScope):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
424 for scope in self.scopeStack[::-1]:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
425 existing = scope.get(value.name)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
426 if (isinstance(existing, Importation)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
427 and not existing.used
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
428 and (not isinstance(value, Importation) or
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
429 value.fullName == existing.fullName)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
430 and reportRedef
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
431 and not self.differentForks(node, existing.source)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
432 redefinedWhileUnused = True
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
433 self.report(messages.RedefinedWhileUnused,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
434 node, value.name, existing.source)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
435
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
436 existing = self.scope.get(value.name)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
437 if not redefinedWhileUnused and self.hasParent(value.source, ast.ListComp):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
438 if (existing and reportRedef
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
439 and not self.hasParent(existing.source, (ast.For, ast.ListComp))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
440 and not self.differentForks(node, existing.source)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
441 self.report(messages.RedefinedInListComp,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
442 node, value.name, existing.source)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
443
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
444 if (isinstance(existing, Definition)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
445 and not existing.used
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
446 and not self.differentForks(node, existing.source)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
447 self.report(messages.RedefinedWhileUnused,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
448 node, value.name, existing.source)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
449 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
450 self.scope[value.name] = value
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
451
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
452 def getNodeHandler(self, node_class):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
453 try:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
454 return self._nodeHandlers[node_class]
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
455 except KeyError:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
456 nodeType = getNodeType(node_class)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
457 self._nodeHandlers[node_class] = handler = getattr(self, nodeType)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
458 return handler
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
459
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
460 def handleNodeLoad(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
461 name = getNodeName(node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
462 if not name:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
463 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
464 # try local scope
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
465 try:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
466 self.scope[name].used = (self.scope, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
467 except KeyError:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
468 pass
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
469 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
470 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
471
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
472 scopes = [scope for scope in self.scopeStack[:-1]
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
473 if isinstance(scope, (FunctionScope, ModuleScope))]
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
474 if isinstance(self.scope, GeneratorScope) and scopes[-1] != self.scopeStack[-2]:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
475 scopes.append(self.scopeStack[-2])
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
476
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
477 # try enclosing function scopes and global scope
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
478 importStarred = self.scope.importStarred
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
479 for scope in reversed(scopes):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
480 importStarred = importStarred or scope.importStarred
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
481 try:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
482 scope[name].used = (self.scope, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
483 except KeyError:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
484 pass
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
485 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
486 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
487
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
488 # look in the built-ins
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
489 if importStarred or name in self.builtIns:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
490 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
491 if name == '__path__' and os.path.basename(self.filename) == '__init__.py':
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
492 # the special name __path__ is valid only in packages
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
493 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
494
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
495 # protected with a NameError handler?
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
496 if 'NameError' not in self.exceptHandlers[-1]:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
497 self.report(messages.UndefinedName, node, name)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
498
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
499 def handleNodeStore(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
500 name = getNodeName(node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
501 if not name:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
502 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
503 # if the name hasn't already been defined in the current scope
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
504 if isinstance(self.scope, FunctionScope) and name not in self.scope:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
505 # for each function or module scope above us
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
506 for scope in self.scopeStack[:-1]:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
507 if not isinstance(scope, (FunctionScope, ModuleScope)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
508 continue
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
509 # if the name was defined in that scope, and the name has
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
510 # been accessed already in the current scope, and hasn't
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
511 # been declared global
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
512 used = name in scope and scope[name].used
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
513 if used and used[0] is self.scope and name not in self.scope.globals:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
514 # then it's probably a mistake
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
515 self.report(messages.UndefinedLocal,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
516 scope[name].used[1], name, scope[name].source)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
517 break
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
518
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
519 parent = getattr(node, 'parent', None)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
520 if isinstance(parent, (ast.For, ast.comprehension, ast.Tuple, ast.List)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
521 binding = Binding(name, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
522 elif (parent is not None and name == '__all__' and
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
523 isinstance(self.scope, ModuleScope)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
524 binding = ExportBinding(name, parent.value)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
525 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
526 binding = Assignment(name, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
527 if name in self.scope:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
528 binding.used = self.scope[name].used
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
529 self.addBinding(node, binding)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
530
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
531 def handleNodeDelete(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
532 name = getNodeName(node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
533 if not name:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
534 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
535 if isinstance(self.scope, FunctionScope) and name in self.scope.globals:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
536 self.scope.globals.remove(name)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
537 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
538 try:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
539 del self.scope[name]
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
540 except KeyError:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
541 self.report(messages.UndefinedName, node, name)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
542
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 def handleChildren(self, tree):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
544 for node in iter_child_nodes(tree):
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545 self.handleNode(node, tree)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
547 def isDocstring(self, node):
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
548 """
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
549 Determine if the given node is a docstring, as long as it is at the
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
550 correct place in the node tree.
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
551 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
552 return isinstance(node, ast.Str) or (isinstance(node, ast.Expr) and
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
553 isinstance(node.value, ast.Str))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
554
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
555 def getDocstring(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
556 if isinstance(node, ast.Expr):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
557 node = node.value
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
558 if not isinstance(node, ast.Str):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
559 return (None, None)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
560 # Computed incorrectly if the docstring has backslash
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
561 doctest_lineno = node.lineno - node.s.count('\n') - 1
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
562 return (node.s, doctest_lineno)
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
563
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564 def handleNode(self, node, parent):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
565 if node is None:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
566 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
567 if self.offset and getattr(node, 'lineno', None) is not None:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
568 node.lineno += self.offset[0]
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
569 node.col_offset += self.offset[1]
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
570 if self.traceTree:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
571 print(' ' * self.nodeDepth + node.__class__.__name__)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
572 if self.futuresAllowed and not (isinstance(node, ast.ImportFrom) or
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
573 self.isDocstring(node)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
574 self.futuresAllowed = False
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
575 self.nodeDepth += 1
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
576 node.level = self.nodeDepth
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
577 node.parent = parent
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
578 try:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
579 handler = self.getNodeHandler(node.__class__)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
580 handler(node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
581 finally:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
582 self.nodeDepth -= 1
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
583 if self.traceTree:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
584 print(' ' * self.nodeDepth + 'end ' + node.__class__.__name__)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
585
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
586 _getDoctestExamples = doctest.DocTestParser().get_examples
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
587
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
588 def handleDoctests(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
589 try:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
590 docstring, node_lineno = self.getDocstring(node.body[0])
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
591 if not docstring:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
592 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
593 examples = self._getDoctestExamples(docstring)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
594 except (ValueError, IndexError):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
595 # e.g. line 6 of the docstring for <string> has inconsistent
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
596 # leading whitespace: ...
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
597 return
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
598 node_offset = self.offset or (0, 0)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
599 self.pushScope()
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
600 for example in examples:
2088
73a2ca4ac409 Added code to handle unknown node types to the pyflakes checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1544
diff changeset
601 try:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
602 tree = compile(example.source, "<doctest>", "exec", ast.PyCF_ONLY_AST)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
603 except SyntaxError:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
604 e = sys.exc_info()[1]
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
605 position = (node_lineno + example.lineno + e.lineno,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
606 example.indent + 4 + e.offset)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
607 self.report(messages.DoctestSyntaxError, node, position)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
608 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
609 self.offset = (node_offset[0] + node_lineno + example.lineno,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
610 node_offset[1] + example.indent + 4)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
611 self.handleChildren(tree)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
612 self.offset = node_offset
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
613 self.popScope()
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
614
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
615 def ignore(self, node):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
616 pass
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
617
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
618 # "stmt" type nodes
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
619 RETURN = DELETE = PRINT = WHILE = IF = WITH = WITHITEM = RAISE = \
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
620 TRYFINALLY = ASSERT = EXEC = EXPR = handleChildren
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
621
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
622 CONTINUE = BREAK = PASS = ignore
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
623
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
624 # "expr" type nodes
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
625 BOOLOP = BINOP = UNARYOP = IFEXP = DICT = SET = YIELD = YIELDFROM = \
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
626 COMPARE = CALL = REPR = ATTRIBUTE = SUBSCRIPT = LIST = TUPLE = \
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
627 STARRED = handleChildren
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
628
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
629 NUM = STR = BYTES = ELLIPSIS = ignore
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
630
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
631 # "slice" type nodes
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
632 SLICE = EXTSLICE = INDEX = handleChildren
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
633
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
634 # expression contexts are node instances too, though being constants
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
635 LOAD = STORE = DEL = AUGLOAD = AUGSTORE = PARAM = ignore
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
636
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
637 # same for operators
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
638 AND = OR = ADD = SUB = MULT = DIV = MOD = POW = LSHIFT = RSHIFT = \
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
639 BITOR = BITXOR = BITAND = FLOORDIV = INVERT = NOT = UADD = USUB = \
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
640 EQ = NOTEQ = LT = LTE = GT = GTE = IS = ISNOT = IN = NOTIN = ignore
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
641
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
642 # additional node types
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
643 COMPREHENSION = KEYWORD = handleChildren
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
644
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
645 def GLOBAL(self, node):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
646 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
647 Keep track of globals declarations.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
648 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
649 if isinstance(self.scope, FunctionScope):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
650 self.scope.globals.update(node.names)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
651
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
652 NONLOCAL = GLOBAL
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
653
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
654 def LISTCOMP(self, node):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
655 # handle generators before element
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
656 for gen in node.generators:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
657 self.handleNode(gen, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
658 self.handleNode(node.elt, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
659
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
660 def GENERATOREXP(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
661 self.pushScope(GeneratorScope)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
662 # handle generators before element
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
663 for gen in node.generators:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
664 self.handleNode(gen, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
665 self.handleNode(node.elt, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
666 self.popScope()
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
667
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
668 SETCOMP = GENERATOREXP
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
669
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
670 def DICTCOMP(self, node):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
671 self.pushScope(GeneratorScope)
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
672 for gen in node.generators:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
673 self.handleNode(gen, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
674 self.handleNode(node.key, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
675 self.handleNode(node.value, node)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
676 self.popScope()
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
677
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
678 def FOR(self, node):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
679 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
680 Process bindings for loop variables.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
681 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
682 vars = []
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
683
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
684 def collectLoopVars(n):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
685 if isinstance(n, ast.Name):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
686 vars.append(n.id)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
687 elif isinstance(n, ast.expr_context):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
688 return
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
689 else:
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
690 for c in iter_child_nodes(n):
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
691 collectLoopVars(c)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
692
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
693 collectLoopVars(node.target)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
694 for varn in vars:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
695 if (isinstance(self.scope.get(varn), Importation)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
696 # unused ones will get an unused import warning
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
697 and self.scope[varn].used):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
698 self.report(messages.ImportShadowedByLoopVar,
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
699 node, varn, self.scope[varn].source)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
700
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
701 self.handleChildren(node)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
702
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
703 def NAME(self, node):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
704 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
705 Handle occurrence of Name (which can be a load/store/delete access.)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
706 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
707 # Locate the name in locals / function / globals scopes.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
708 if isinstance(node.ctx, (ast.Load, ast.AugLoad)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
709 self.handleNodeLoad(node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
710 if (node.id == 'locals' and isinstance(self.scope, FunctionScope)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
711 and isinstance(node.parent, ast.Call)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
712 # we are doing locals() call in current scope
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
713 self.scope.usesLocals = True
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
714 elif isinstance(node.ctx, (ast.Store, ast.AugStore)):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
715 self.handleNodeStore(node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
716 elif isinstance(node.ctx, ast.Del):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
717 self.handleNodeDelete(node)
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
718 else:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
719 # must be a Param context -- this only happens for names in function
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
720 # arguments, but these aren't dispatched through here
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
721 raise RuntimeError("Got impossible expression context: %r" % (node.ctx,))
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
722
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
723 def FUNCTIONDEF(self, node):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
724 for deco in node.decorator_list:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
725 self.handleNode(deco, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
726 self.addBinding(node, FunctionDefinition(node.name, node))
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
727 self.LAMBDA(node)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
728 if self.withDoctest:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
729 self.deferFunction(lambda: self.handleDoctests(node))
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
730
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
731 def LAMBDA(self, node):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
732 args = []
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
733
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
734 if PY2:
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
735 def addArgs(arglist):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
736 for arg in arglist:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
737 if isinstance(arg, ast.Tuple):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
738 addArgs(arg.elts)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
739 else:
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
740 if arg.id in args:
2998
95581102e03e Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
741 self.report(messages.DuplicateArgument,
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
742 node, arg.id)
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
743 args.append(arg.id)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
744 addArgs(node.args.args)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
745 defaults = node.args.defaults
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
746 else:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
747 for arg in node.args.args + node.args.kwonlyargs:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
748 if arg.arg in args:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
749 self.report(messages.DuplicateArgument,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
750 node, arg.arg)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
751 args.append(arg.arg)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
752 self.handleNode(arg.annotation, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
753 if hasattr(node, 'returns'): # Only for FunctionDefs
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
754 for annotation in (node.args.varargannotation,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
755 node.args.kwargannotation, node.returns):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
756 self.handleNode(annotation, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
757 defaults = node.args.defaults + node.args.kw_defaults
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
758
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
759 # vararg/kwarg identifiers are not Name nodes
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
760 for wildcard in (node.args.vararg, node.args.kwarg):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
761 if not wildcard:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
762 continue
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
763 if wildcard in args:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
764 self.report(messages.DuplicateArgument, node, wildcard)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
765 args.append(wildcard)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
766 for default in defaults:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
767 self.handleNode(default, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
768
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
769 def runFunction():
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
770
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
771 self.pushScope()
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
772 for name in args:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
773 self.addBinding(node, Argument(name, node), reportRedef=False)
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
774 if isinstance(node.body, list):
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
775 # case for FunctionDefs
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
776 for stmt in node.body:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
777 self.handleNode(stmt, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
778 else:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
779 # case for Lambdas
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
780 self.handleNode(node.body, node)
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
781
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
782 def checkUnusedAssignments():
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
783 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
784 Check to see if any assignments have not been used.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
785 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
786 for name, binding in self.scope.unusedAssignments():
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
787 self.report(messages.UnusedVariable, binding.source, name)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
788 self.deferAssignment(checkUnusedAssignments)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
789 self.popScope()
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
790
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
791 self.deferFunction(runFunction)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
792
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
793 def CLASSDEF(self, node):
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
794 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
795 Check names used in a class definition, including its decorators, base
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
796 classes, and the body of its definition. Additionally, add its name to
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
797 the current scope.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
798 """
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
799 for deco in node.decorator_list:
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
800 self.handleNode(deco, node)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
801 for baseNode in node.bases:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
802 self.handleNode(baseNode, node)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
803 if not PY2:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
804 for keywordNode in node.keywords:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
805 self.handleNode(keywordNode, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
806 self.pushScope(ClassScope)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
807 if self.withDoctest:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
808 self.deferFunction(lambda: self.handleDoctests(node))
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
809 for stmt in node.body:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
810 self.handleNode(stmt, node)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
811 self.popScope()
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
812 self.addBinding(node, ClassDefinition(node.name, node))
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
813
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
814 def ASSIGN(self, node):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
815 self.handleNode(node.value, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
816 for target in node.targets:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
817 self.handleNode(target, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
818
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
819 def AUGASSIGN(self, node):
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
820 self.handleNodeLoad(node.target)
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
821 self.handleNode(node.value, node)
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
822 self.handleNode(node.target, node)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
823
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
824 def IMPORT(self, node):
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
825 for alias in node.names:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
826 name = alias.asname or alias.name
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
827 importation = Importation(name, node)
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
828 self.addBinding(node, importation)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
829
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
830 def IMPORTFROM(self, node):
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
831 if node.module == '__future__':
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
832 if not self.futuresAllowed:
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
833 self.report(messages.LateFutureImport,
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
834 node, [n.name for n in node.names])
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
835 else:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
836 self.futuresAllowed = False
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
837
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
838 for alias in node.names:
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
839 if alias.name == '*':
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
840 self.scope.importStarred = True
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
841 self.report(messages.ImportStarUsed, node, node.module)
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
842 continue
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
843 name = alias.asname or alias.name
802
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
844 importation = Importation(name, node)
1535
f2650ea19bb8 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
845 if node.module == '__future__':
3212
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
846 importation.used = (self.scope, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
847 self.addBinding(node, importation)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
848
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
849 def TRY(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
850 handler_names = []
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
851 # List the exception handlers
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
852 for handler in node.handlers:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
853 if isinstance(handler.type, ast.Tuple):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
854 for exc_type in handler.type.elts:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
855 handler_names.append(getNodeName(exc_type))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
856 elif handler.type:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
857 handler_names.append(getNodeName(handler.type))
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
858 # Memorize the except handlers and process the body
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
859 self.exceptHandlers.append(handler_names)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
860 for child in node.body:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
861 self.handleNode(child, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
862 self.exceptHandlers.pop()
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
863 # Process the other nodes: "except:", "else:", "finally:"
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
864 for child in iter_child_nodes(node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
865 if child not in node.body:
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
866 self.handleNode(child, node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
867
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
868 TRYEXCEPT = TRY
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
869
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
870 def EXCEPTHANDLER(self, node):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
871 # 3.x: in addition to handling children, we must handle the name of
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
872 # the exception, which is not a Name node, but a simple string.
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
873 if isinstance(node.name, str):
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
874 self.handleNodeStore(node)
27a73942b8c8 Upgraded pyflakes for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
875 self.handleChildren(node)

eric ide

mercurial