UtilitiesPython2/py2flakes/checker.py

Fri, 13 Jan 2012 18:30:27 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 13 Jan 2012 18:30:27 +0100
changeset 1544
d06ffad32855
parent 1535
f2650ea19bb8
child 2088
73a2ca4ac409
permissions
-rw-r--r--

Fixed a source docu in py2flakes.

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
1509
c0b5e693b0eb Updated copyright for 2012.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
3 # Copyright (c) 2011 - 2012 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 #
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 # This module is based on pyflakes for Python2 but was heavily hacked 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
8 # work within eric5
e8882d16384c Added a 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
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import __builtin__
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import os.path
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
12 import _ast
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
13
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from py2flakes import 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
15
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
16
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
17 # utility function to iterate over an AST node's children, adapted
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
18 # from Python 2.6's standard ast module
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
19 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
20 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
21 iter_child_nodes = ast.iter_child_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
22 except (ImportError, AttributeError):
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 def iter_child_nodes(node, astcls=_ast.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
24 """
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 Yield all direct child nodes of *node*, that is, all fields that are 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
26 and all items of fields that are lists of 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
27 """
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
28 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
29 field = getattr(node, name, None)
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
30 if isinstance(field, astcls):
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
31 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
32 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
33 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
34 yield item
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
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
36
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
37 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
38 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 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
40
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 The checker uses this to keep track of which names have been bound 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
42 which names have not. See L{Assignment} for a special type of binding that
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 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
44 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 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
46 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
47 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
48 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
49
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 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
51 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
52
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 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
54 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
55 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
56 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
57 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
58 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
59
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
60
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
61 class UnBinding(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
62 '''
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Created by the 'del' operator.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 '''
e8882d16384c Added a 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
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
66
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
67 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
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 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
70 """
e8882d16384c Added a 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 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
72 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
73 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
74 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
75
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
76
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
77 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
78 """
e8882d16384c Added a 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 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
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
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
82
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
83 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
84 """
e8882d16384c Added a 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 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
86
e8882d16384c Added a 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 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
88 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
89 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
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
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
92
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
93 class FunctionDefinition(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
94 """
e8882d16384c Added a 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 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
96 """
e8882d16384c Added a 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 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
98
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
99
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
100 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
101 """
e8882d16384c Added a 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 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
103 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
104 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
105
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 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
107 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
108
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 __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
110
e8882d16384c Added a 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 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
112 __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
113 """
e8882d16384c Added a 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 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
115 """
e8882d16384c Added a 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 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
117 """
e8882d16384c Added a 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 names = []
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
119 if isinstance(self.source, _ast.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
120 for node in self.source.elts:
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
121 if isinstance(node, _ast.Str):
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
122 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
123 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
124
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
125
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
126 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
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 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
129 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 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
131
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 def __repr__(self):
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
133 return '<%s at 0x%x %s>' % (
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
134 self.__class__.__name__, 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
135
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 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
137 super(Scope, self).__init__()
e8882d16384c Added a 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
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
139
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
140 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
141 """
e8882d16384c Added a 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 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
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 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
145
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
146
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
147 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
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 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
150 """
e8882d16384c Added a 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 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
152 super(FunctionScope, self).__init__()
e8882d16384c Added a 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 self.globals = {}
e8882d16384c Added a 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
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
155
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
156 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
157 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 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
159 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 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
161
e8882d16384c Added a 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 # Globally defined names which are not attributes of the __builtin__ 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
163 _MAGIC_GLOBALS = ['__file__', '__builtins__']
e8882d16384c Added a 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
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
diff changeset
165
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
166 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
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 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
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 nodeDepth = 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
171 traceTree = 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
172
e8882d16384c Added a 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 def __init__(self, module, filename='(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
174 """
e8882d16384c Added a 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 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
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 @param module parsed module tree or module source 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
178 @param filename name of the module file (string)
e8882d16384c Added a 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 """
e8882d16384c Added a 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 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
181 self._deferredAssignments = []
e8882d16384c Added a 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 self.dead_scopes = []
e8882d16384c Added a 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 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
184 self.filename = filename
e8882d16384c Added a 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 self.scopeStack = [ModuleScope()]
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 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
187
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 if isinstance(module, 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
189 module = ast.parse(module, filename, "exec")
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 self.handleChildren(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
191 self._runDeferred(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
192 # 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
193 # 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
194 self._deferredFunctions = 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
195 self._runDeferred(self._deferredAssignments)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 # Set _deferredAssignments to None so that deferAssignment 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
197 # noisly if called after we've run through the deferred assignments.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 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
199 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
200 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
201 self.check_dead_scopes()
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 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
204 '''
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 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
206
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 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
208 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
209 `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
210 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
211 '''
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 self._deferredFunctions.append((callable, self.scopeStack[:]))
e8882d16384c Added a 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
e8882d16384c Added a 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 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
215 """
e8882d16384c Added a 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 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
217 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
218 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 self._deferredAssignments.append((callable, self.scopeStack[:]))
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 def _runDeferred(self, 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
222 """
1544
d06ffad32855 Fixed a source docu in py2flakes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1535
diff changeset
223 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
224 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 for handler, scope in 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
226 self.scopeStack = 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
227 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
228
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 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
230 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
231 scope = property(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
232
e8882d16384c Added a 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 def popScope(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
234 self.dead_scopes.append(self.scopeStack.pop())
e8882d16384c Added a 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
e8882d16384c Added a 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 def check_dead_scopes(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
237 """
e8882d16384c Added a 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 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
239 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
240 """
e8882d16384c Added a 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 for scope in self.dead_scopes:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 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
243 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
244 all = scope['__all__'].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
245 if os.path.split(self.filename)[1] != '__init__.py':
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 # 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
247 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
248 for name in undefined:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 self.report(
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 messages.UndefinedExport,
e8882d16384c Added a 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 scope['__all__'].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
252 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
253 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
254 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
255
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 # Look for imported names that aren't 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
257 for importation in scope.itervalues():
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 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
259 if not importation.used and importation.name not in 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
260 self.report(
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 messages.UnusedImport,
e8882d16384c Added a 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 importation.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
263 importation.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
264
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 def pushFunctionScope(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
266 self.scopeStack.append(FunctionScope())
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267
e8882d16384c Added a 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 def pushClassScope(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
269 self.scopeStack.append(ClassScope())
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 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
272 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
273
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 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
275 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
276 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
277
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
278 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
279 """
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
280 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
281 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
282 """
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
283 return isinstance(node, _ast.Str) or \
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
284 (isinstance(node, _ast.Expr) and
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
285 isinstance(node.value, _ast.Str))
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
286
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
287 def handleNode(self, node, parent):
e8882d16384c Added a 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 node.parent = parent
e8882d16384c Added a 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 if self.traceTree:
e8882d16384c Added a 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 print ' ' * self.nodeDepth + node.__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
291 self.nodeDepth += 1
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
292 if self.futuresAllowed and not \
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
293 (isinstance(node, _ast.ImportFrom) or self.isDocstring(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
294 self.futuresAllowed = False
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
295 nodeType = node.__class__.__name__.upper()
e8882d16384c Added a 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 try:
e8882d16384c Added a 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 handler = getattr(self, nodeType)
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 handler(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
299 finally:
e8882d16384c Added a 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 self.nodeDepth -= 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
301 if self.traceTree:
e8882d16384c Added a 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 print ' ' * self.nodeDepth + 'end ' + node.__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
303
e8882d16384c Added a 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 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
305 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
306
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
307 # "stmt" 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
308 RETURN = DELETE = PRINT = WHILE = IF = WITH = RAISE = TRYEXCEPT = \
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
309 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
310
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
311 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
312
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
313 # "expr" 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
314 BOOLOP = BINOP = UNARYOP = IFEXP = DICT = SET = YIELD = COMPARE = \
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
315 CALL = REPR = ATTRIBUTE = SUBSCRIPT = LIST = TUPLE = 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
316
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
317 NUM = STR = 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
318
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
319 # "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
320 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
321
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
322 # 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
323 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
324
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
325 # 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
326 AND = OR = ADD = SUB = MULT = DIV = MOD = POW = LSHIFT = RSHIFT = \
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
327 BITOR = BITXOR = BITAND = FLOORDIV = INVERT = NOT = UADD = USUB = \
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
328 EQ = NOTEQ = LT = LTE = GT = GTE = IS = ISNOT = IN = NOTIN = 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
329
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
330 # additional node types
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
331 COMPREHENSION = EXCEPTHANDLER = 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
332
e8882d16384c Added a 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 def addBinding(self, lineno, value, reportRedef=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
334 '''
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 Called when a binding is altered.
e8882d16384c Added a 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
e8882d16384c Added a 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 @param lineno line of the statement responsible for the change (integer)
e8882d16384c Added a 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 @param value the optional new value, a Binding instance, associated
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 with the binding; if None, the binding is deleted if it exists
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 @param reportRedef flag indicating if rebinding while unused 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
341 reported (boolean)
e8882d16384c Added a 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 '''
e8882d16384c Added a 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 if (isinstance(self.scope.get(value.name), FunctionDefinition)
e8882d16384c Added a 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 and isinstance(value, FunctionDefinition)):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 self.report(messages.RedefinedFunction,
e8882d16384c Added a 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 lineno, value.name, self.scope[value.name].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
347
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 if not isinstance(self.scope, ClassScope):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 for scope in 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
350 existing = scope.get(value.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
351 if (isinstance(existing, Importation)
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
352 and not existing.used
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
353 and (not isinstance(value, Importation) or
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
354 value.fullName == existing.fullName)
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
355 and reportRedef):
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
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 self.report(messages.RedefinedWhileUnused,
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 lineno, value.name, scope[value.name].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
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 if isinstance(value, UnBinding):
e8882d16384c Added a 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 try:
e8882d16384c Added a 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 del self.scope[value.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
363 except KeyError:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 self.report(messages.UndefinedName, lineno, value.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
365 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
366 self.scope[value.name] = value
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 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
369 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 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
371 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 if isinstance(self.scope, FunctionScope):
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 self.scope.globals.update(dict.fromkeys(node.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
374
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 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
376 # 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
377 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
378 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
379 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
380
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
381 GENERATOREXP = SETCOMP = LISTCOMP
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
382
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
383 # dictionary comprehensions; introduced in Python 2.7
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
384 def DICTCOMP(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
385 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
386 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
387 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
388 self.handleNode(node.value, 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
389
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 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
391 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 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
393 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 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
395
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
396 def collectLoopVars(n):
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
397 if isinstance(n, _ast.Name):
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
398 vars.append(n.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
399 elif isinstance(n, _ast.expr_context):
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
400 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
401 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
402 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
403 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
404
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
405 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
406 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
407 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
408 # 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
409 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
410 self.report(messages.ImportShadowedByLoopVar,
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 node.lineno, varn, self.scope[varn].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
412
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 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
414
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 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
416 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 Locate the name in locals / function / globals scopes.
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 """
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
419 if isinstance(node.ctx, (_ast.Load, _ast.AugLoad)):
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
420 # try local scope
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
421 importStarred = self.scope.importStarred
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
422 try:
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
423 self.scope[node.id].used = (self.scope, node.lineno)
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
424 except KeyError:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 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
426 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
427 return
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428
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
429 # try enclosing function scopes
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
430
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
431 for scope in self.scopeStack[-2:0:-1]:
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
432 importStarred = importStarred or scope.importStarred
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
433 if not isinstance(scope, FunctionScope):
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
434 continue
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
435 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
436 scope[node.id].used = (self.scope, node.lineno)
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
437 except KeyError:
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
438 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
439 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
440 return
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
441
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
442 # try global scope
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
443
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
444 importStarred = importStarred or self.scopeStack[0].importStarred
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
445 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
446 self.scopeStack[0][node.id].used = (self.scope, node.lineno)
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
447 except KeyError:
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
448 if ((not hasattr(__builtin__, node.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
449 and node.id not in _MAGIC_GLOBALS
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
450 and not importStarred):
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
451 if (os.path.basename(self.filename) == '__init__.py' and
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
452 node.id == '__path__'):
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
453 # the special name __path__ is valid only in packages
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
454 pass
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
455 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
456 self.report(messages.UndefinedName, node.lineno, node.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
457 elif isinstance(node.ctx, (_ast.Store, _ast.AugStore)):
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
458 # if the name hasn't already been defined in the current scope
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
459 if isinstance(self.scope, FunctionScope) and node.id not in self.scope:
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
460 # for each function or module scope above us
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
461 for scope in self.scopeStack[:-1]:
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
462 if not isinstance(scope, (FunctionScope, ModuleScope)):
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
463 continue
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
464 # if the name was defined in that scope, and the name has
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
465 # been accessed already in the current scope, and hasn't
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
466 # been declared global
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
467 if (node.id in scope
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
468 and scope[node.id].used
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
469 and scope[node.id].used[0] is self.scope
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
470 and node.id not in self.scope.globals):
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
471 # then it's probably a mistake
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
472 self.report(messages.UndefinedLocal,
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
473 scope[node.id].used[1],
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
474 node.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
475 scope[node.id].source.lineno)
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
476 break
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
477
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
478 if isinstance(node.parent,
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
479 (_ast.For, _ast.comprehension, _ast.Tuple, _ast.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
480 binding = Binding(node.id, 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
481 elif (node.id == '__all__' and
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
482 isinstance(self.scope, ModuleScope)):
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
483 binding = ExportBinding(node.id, node.parent.value)
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
484 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
485 binding = Assignment(node.id, 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
486 if node.id in self.scope:
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
487 binding.used = self.scope[node.id].used
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
488 self.addBinding(node.lineno, binding)
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
489 elif isinstance(node.ctx, _ast.Del):
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
490 if isinstance(self.scope, FunctionScope) and \
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
491 node.id in self.scope.globals:
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
492 del self.scope.globals[node.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
493 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
494 self.addBinding(node.lineno, UnBinding(node.id, 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
495 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
496 # must be a Param context -- this only happens for names in function
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
497 # arguments, but these aren't dispatched through here
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
498 raise RuntimeError(
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
499 "Got impossible expression context: %r" % (node.ctx,))
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
500
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
501 def FUNCTIONDEF(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
502 if hasattr(node, 'decorators'):
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
503 for deco in node.decorators:
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
504 self.handleNode(deco, 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
505 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
506 for deco in node.decorator_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
507 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
508 self.addBinding(node.lineno, FunctionDefinition(node.name, 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
509 self.LAMBDA(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
510
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511 def LAMBDA(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
512 for default in node.args.defaults:
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
513 self.handleNode(default, 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
514
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 def 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
516 args = []
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518 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
519 for arg in arglist:
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
520 if isinstance(arg, _ast.Tuple):
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
521 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
522 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
523 if arg.id in args:
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
524 self.report(messages.DuplicateArgument, node.lineno, 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
525 args.append(arg.id)
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
526
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 self.pushFunctionScope()
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
528 addArgs(node.args.args)
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
529 # vararg/kwarg identifiers are not Name 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
530 if node.args.vararg:
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
531 args.append(node.args.vararg)
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
532 if node.args.kwarg:
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
533 args.append(node.args.kwarg)
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
534 for name in args:
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535 self.addBinding(node.lineno, 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
536 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
537 # 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
538 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
539 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
540 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
541 # 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
542 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
543
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
544 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
545 """
e8882d16384c Added a 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 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
547 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 for name, binding in self.scope.iteritems():
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 if (not binding.used and not name in self.scope.globals
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 and isinstance(binding, 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
551 self.report(messages.UnusedVariable,
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 binding.source.lineno, 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
553 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
554 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
555
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 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
557
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
558 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
559 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 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
561 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
562 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
563 """
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
564 # decorator_list is present as of Python 2.6
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
565 for deco in getattr(node, 'decorator_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
566 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
567 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
568 self.handleNode(baseNode, 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
569 self.pushClassScope()
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
570 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
571 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
572 self.popScope()
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
573 self.addBinding(node.lineno, Binding(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
574
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
575 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
576 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
577 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
578 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
579
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
580 def AUGASSIGN(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
581 # AugAssign is awkward: must set the context explicitly and visit twice,
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
582 # once with AugLoad context, once with AugStore context
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
583 node.target.ctx = _ast.AugLoad()
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
584 self.handleNode(node.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
585 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
586 node.target.ctx = _ast.AugStore()
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
587 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
588
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589 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
590 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
591 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
592 importation = Importation(name, 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
593 self.addBinding(node.lineno, 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
594
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
595 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
596 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
597 if not self.futuresAllowed:
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
598 self.report(messages.LateFutureImport, node.lineno,
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
599 [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
600 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
601 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
602
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
603 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
604 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
605 self.scope.importStarred = True
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
606 self.report(messages.ImportStarUsed, node.lineno, 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
607 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
608 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
609 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
610 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
611 importation.used = (self.scope, node.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
612 self.addBinding(node.lineno, 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
613
e8882d16384c Added a 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 # eflag: FileType = Python2

eric ide

mercurial