UtilitiesPython2/py2flakes/checker.py

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

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 13 Jan 2012 18:31:27 +0100
branch
5_1_x
changeset 1545
2738022ed226
parent 1537
acae49c8d343
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
1510
e75ecf2bd9dd Updated copyright for 2012.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 802
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 #
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
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
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
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
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
16 # utility function to iterate over an AST node's children, adapted
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
17 # from Python 2.6's standard ast module
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
18 try:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
19 import ast
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
20 iter_child_nodes = ast.iter_child_nodes
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
21 except (ImportError, AttributeError):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
22 def iter_child_nodes(node, astcls=_ast.AST):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
23 """
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
24 Yield all direct child nodes of *node*, that is, all fields that are nodes
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
25 and all items of fields that are lists of nodes.
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
26 """
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
27 for name in node._fields:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
28 field = getattr(node, name, None)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
29 if isinstance(field, astcls):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
30 yield field
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
31 elif isinstance(field, list):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
32 for item in field:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
33 yield item
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
34
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
35
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
36 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
37 """
e8882d16384c Added a 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 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
39
e8882d16384c Added a 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 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
41 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
42 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
43 """
e8882d16384c Added a 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 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
45 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
46 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
47 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
48
e8882d16384c Added a 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 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
50 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
51
e8882d16384c Added a 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 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
53 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
54 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
55 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
56 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
57 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
58
e8882d16384c Added a 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 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
60 '''
e8882d16384c Added a 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 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
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
e8882d16384c Added a 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 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
65 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 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
67 """
e8882d16384c Added a 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 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
69 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
70 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
71 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
72
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 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
74 """
e8882d16384c Added a 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 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
76 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 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
79 """
e8882d16384c Added a 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 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
81
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 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
83 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
84 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
85 """
e8882d16384c Added a 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 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
88 """
e8882d16384c Added a 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 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
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 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
92
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 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
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 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
96 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
97 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
98
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 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
100 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
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 __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
103
e8882d16384c Added a 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 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
105 __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
106 """
e8882d16384c Added a 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 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
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 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
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 = []
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
112 if isinstance(self.source, _ast.List):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
113 for node in self.source.elts:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
114 if isinstance(node, _ast.Str):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
115 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
116 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
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 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
119 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 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
121 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 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
123
e8882d16384c Added a 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 def __repr__(self):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
125 return '<%s at 0x%x %s>' % (
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
126 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
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 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
129 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
130
e8882d16384c Added a 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 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
132 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 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
134 """
e8882d16384c Added a 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 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
136
e8882d16384c Added a 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 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
138 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 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
140 """
e8882d16384c Added a 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 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
142 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
143 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
144
e8882d16384c Added a 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 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
146 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 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
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 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
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 # 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
152 _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
153
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 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
155 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 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
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 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
159 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
160
e8882d16384c Added a 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 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
162 """
e8882d16384c Added a 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 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
164
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 @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
166 @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
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 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
169 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
170 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
171 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
172 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
173 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
174 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
175
e8882d16384c Added a 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 if isinstance(module, str):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
177 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
178 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
179 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
180 # 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
181 # 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
182 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
183 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
184 # 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
185 # 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
186 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
187 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
188 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
189 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
190
e8882d16384c Added a 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 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
192 '''
e8882d16384c Added a 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 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
194
e8882d16384c Added a 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 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
196 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
197 `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
198 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
199 '''
e8882d16384c Added a 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._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
201
e8882d16384c Added a 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 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
203 """
e8882d16384c Added a 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 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
205 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
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 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
208
e8882d16384c Added a 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 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
210 """
1545
2738022ed226 Fixed a source docu in py2flakes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1537
diff changeset
211 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
212 """
e8882d16384c Added a 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 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
214 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
215 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
216
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 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
218 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
219 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
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 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
222 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
223
e8882d16384c Added a 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 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
225 """
e8882d16384c Added a 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 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
227 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
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 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
230 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
231 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
232 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
233 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
234 # 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
235 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
236 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
237 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
238 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
239 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
240 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
241 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
242 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
243
e8882d16384c Added a 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 # 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
245 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
246 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
247 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
248 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
249 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
250 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
251 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
252
e8882d16384c Added a 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 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
254 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
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 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
257 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
258
e8882d16384c Added a 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 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
260 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
261
e8882d16384c Added a 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 def handleChildren(self, tree):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
263 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
264 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
265
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
266 def isDocstring(self, node):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
267 """
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
268 Determine if the given node is a docstring, as long as it is at the
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
269 correct place in the node tree.
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
270 """
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
271 return isinstance(node, _ast.Str) or \
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
272 (isinstance(node, _ast.Expr) and
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
273 isinstance(node.value, _ast.Str))
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
274
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
275 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
276 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
277 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
278 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
279 self.nodeDepth += 1
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
280 if self.futuresAllowed and not \
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
281 (isinstance(node, _ast.ImportFrom) or self.isDocstring(node)):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
282 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
283 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
284 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
285 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
286 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
287 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
288 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
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 + '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
291
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 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
293 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
294
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
295 # "stmt" type nodes
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
296 RETURN = DELETE = PRINT = WHILE = IF = WITH = RAISE = TRYEXCEPT = \
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
297 TRYFINALLY = ASSERT = EXEC = EXPR = handleChildren
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
298
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
299 CONTINUE = BREAK = PASS = ignore
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
300
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
301 # "expr" type nodes
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
302 BOOLOP = BINOP = UNARYOP = IFEXP = DICT = SET = YIELD = COMPARE = \
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
303 CALL = REPR = ATTRIBUTE = SUBSCRIPT = LIST = TUPLE = handleChildren
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
304
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
305 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
306
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
307 # "slice" type nodes
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
308 SLICE = EXTSLICE = INDEX = handleChildren
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
309
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
310 # expression contexts are node instances too, though being constants
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
311 LOAD = STORE = DEL = AUGLOAD = AUGSTORE = PARAM = ignore
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
312
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
313 # same for operators
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
314 AND = OR = ADD = SUB = MULT = DIV = MOD = POW = LSHIFT = RSHIFT = \
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
315 BITOR = BITXOR = BITAND = FLOORDIV = INVERT = NOT = UADD = USUB = \
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
316 EQ = NOTEQ = LT = LTE = GT = GTE = IS = ISNOT = IN = NOTIN = ignore
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
317
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
318 # additional node types
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
319 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
320
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 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
322 '''
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 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
324
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 @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
326 @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
327 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
328 @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
329 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
330 '''
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 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
332 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
333 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
334 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
335
e8882d16384c Added a 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 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
337 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
338 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
339 if (isinstance(existing, Importation)
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
340 and not existing.used
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
341 and (not isinstance(value, Importation) or
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
342 value.fullName == existing.fullName)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
343 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
344
e8882d16384c Added a 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.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
346 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
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 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
349 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
350 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
351 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
352 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
353 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
354 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
355
e8882d16384c Added a 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 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
357 """
e8882d16384c Added a 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 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
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(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
361 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
362
e8882d16384c Added a 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 def LISTCOMP(self, node):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
364 # handle generators before element
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
365 for gen in node.generators:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
366 self.handleNode(gen, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
367 self.handleNode(node.elt, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
368
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
369 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
370
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
371 # dictionary comprehensions; introduced in Python 2.7
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
372 def DICTCOMP(self, node):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
373 for gen in node.generators:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
374 self.handleNode(gen, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
375 self.handleNode(node.key, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
376 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
377
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 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
379 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 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
381 """
e8882d16384c Added a 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 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
383 def collectLoopVars(n):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
384 if isinstance(n, _ast.Name):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
385 vars.append(n.id)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
386 elif isinstance(n, _ast.expr_context):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
387 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
388 else:
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
389 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
390 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
391
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
392 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
393 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
394 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
395 # 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
396 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
397 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
398 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
399
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 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
401
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 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
403 """
e8882d16384c Added a 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 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
405 """
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
406 if isinstance(node.ctx, (_ast.Load, _ast.AugLoad)):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
407 # try local scope
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
408 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
409 try:
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
410 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
411 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
412 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
413 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
414 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
415
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
416 # 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
417
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
418 for scope in self.scopeStack[-2:0:-1]:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
419 importStarred = importStarred or scope.importStarred
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
420 if not isinstance(scope, FunctionScope):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
421 continue
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
422 try:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
423 scope[node.id].used = (self.scope, node.lineno)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
424 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
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:
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
427 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
428
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
430 # try global scope
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
431
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
432 importStarred = importStarred or self.scopeStack[0].importStarred
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
433 try:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
434 self.scopeStack[0][node.id].used = (self.scope, node.lineno)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
435 except KeyError:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
436 if ((not hasattr(__builtin__, node.id))
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
437 and node.id not in _MAGIC_GLOBALS
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
438 and not importStarred):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
439 if (os.path.basename(self.filename) == '__init__.py' and
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
440 node.id == '__path__'):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
441 # the special name __path__ is valid only in packages
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
442 pass
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
443 else:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
444 self.report(messages.UndefinedName, node.lineno, node.id)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
445 elif isinstance(node.ctx, (_ast.Store, _ast.AugStore)):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
446 # if the name hasn't already been defined in the current scope
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
447 if isinstance(self.scope, FunctionScope) and node.id not in self.scope:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
448 # for each function or module scope above us
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
449 for scope in self.scopeStack[:-1]:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
450 if not isinstance(scope, (FunctionScope, ModuleScope)):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
451 continue
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
452 # if the name was defined in that scope, and the name has
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
453 # been accessed already in the current scope, and hasn't
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
454 # been declared global
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
455 if (node.id in scope
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
456 and scope[node.id].used
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
457 and scope[node.id].used[0] is self.scope
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
458 and node.id not in self.scope.globals):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
459 # then it's probably a mistake
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
460 self.report(messages.UndefinedLocal,
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
461 scope[node.id].used[1],
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
462 node.id,
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
463 scope[node.id].source.lineno)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
464 break
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
465
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
466 if isinstance(node.parent,
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
467 (_ast.For, _ast.comprehension, _ast.Tuple, _ast.List)):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
468 binding = Binding(node.id, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
469 elif (node.id == '__all__' and
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
470 isinstance(self.scope, ModuleScope)):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
471 binding = ExportBinding(node.id, node.parent.value)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
472 else:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
473 binding = Assignment(node.id, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
474 if node.id in self.scope:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
475 binding.used = self.scope[node.id].used
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
476 self.addBinding(node.lineno, binding)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
477 elif isinstance(node.ctx, _ast.Del):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
478 if isinstance(self.scope, FunctionScope) and \
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
479 node.id in self.scope.globals:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
480 del self.scope.globals[node.id]
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
481 else:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
482 self.addBinding(node.lineno, UnBinding(node.id, node))
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
483 else:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
484 # must be a Param context -- this only happens for names in function
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
485 # arguments, but these aren't dispatched through here
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
486 raise RuntimeError(
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
487 "Got impossible expression context: %r" % (node.ctx,))
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
488
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
489 def FUNCTIONDEF(self, node):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
490 if hasattr(node, 'decorators'):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
491 for deco in node.decorators:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
492 self.handleNode(deco, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
493 else:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
494 for deco in node.decorator_list:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
495 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
496 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
497 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
498
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
499 def LAMBDA(self, node):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
500 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
501 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
502
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 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
504 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
505
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506 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
507 for arg in arglist:
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
508 if isinstance(arg, _ast.Tuple):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
509 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
510 else:
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
511 if arg.id in args:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
512 self.report(messages.DuplicateArgument, node.lineno, arg.id)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
513 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
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 self.pushFunctionScope()
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
516 addArgs(node.args.args)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
517 # vararg/kwarg identifiers are not Name nodes
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
518 if node.args.vararg:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
519 args.append(node.args.vararg)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
520 if node.args.kwarg:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
521 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
522 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
523 self.addBinding(node.lineno, Argument(name, node), reportRedef=False)
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
524 if isinstance(node.body, list):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
525 # case for FunctionDefs
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
526 for stmt in node.body:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
527 self.handleNode(stmt, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
528 else:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
529 # case for Lambdas
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
530 self.handleNode(node.body, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
531
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
532 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
533 """
e8882d16384c Added a 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 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
535 """
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 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
537 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
538 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
539 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
540 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
541 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
542 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
543
e8882d16384c Added a 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 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
545
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
546 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
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 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
549 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
550 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
551 """
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
552 # decorator_list is present as of Python 2.6
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
553 for deco in getattr(node, 'decorator_list', []):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
554 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
555 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
556 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
557 self.pushClassScope()
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
558 for stmt in node.body:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
559 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
560 self.popScope()
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
561 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
562
e8882d16384c Added a 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 def ASSIGN(self, node):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
564 self.handleNode(node.value, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
565 for target in node.targets:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
566 self.handleNode(target, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
567
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
568 def AUGASSIGN(self, node):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
569 # AugAssign is awkward: must set the context explicitly and visit twice,
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
570 # once with AugLoad context, once with AugStore context
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
571 node.target.ctx = _ast.AugLoad()
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
572 self.handleNode(node.target, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
573 self.handleNode(node.value, node)
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
574 node.target.ctx = _ast.AugStore()
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
575 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
576
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
577 def IMPORT(self, node):
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
578 for alias in node.names:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
579 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
580 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
581 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
582
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
583 def IMPORTFROM(self, node):
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
584 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
585 if not self.futuresAllowed:
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
586 self.report(messages.LateFutureImport, node.lineno,
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
587 [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
588 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
589 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
590
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
591 for alias in node.names:
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
592 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
593 self.scope.importStarred = True
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
594 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
595 continue
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
596 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
597 importation = Importation(name, node)
1537
acae49c8d343 Migrated py2flakes to v0.5.0 in order to fix issues for Python 2.7+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1510
diff changeset
598 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
599 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
600 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
601
e8882d16384c Added a 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 #
e8882d16384c Added a pyflakes checker function for Python 2 files and made some additional Python 2 related changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
603 # eflag: FileType = Python2

eric ide

mercurial