Thu, 07 Jan 2021 17:22:16 +0100
SyntaxChecker: fixed an issue in the pyflakes messages module causing an exception when trying to report back the result later on.
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2 | |
7923
91e843545d9a
Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7639
diff
changeset
|
3 | # Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
4 | # |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
5 | # Original (c) 2005-2010 Divmod, Inc. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
6 | # |
7960
e8fc383322f7
Harmonized some user visible strings and changed the term 'eric6' to the more generic 'eric'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
7 | # This module is based on pyflakes but was modified to work with eric |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
8 | """ |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
9 | Main module. |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
10 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
11 | Implement the central Checker class. |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
12 | Also, it models the Bindings and Scopes. |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
13 | """ |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
14 | import __future__ |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
15 | import ast |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
16 | import bisect |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
17 | import collections |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
18 | import contextlib |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
19 | import doctest |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
20 | import functools |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
21 | import os |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
22 | import re |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
23 | import string |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
24 | import sys |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
25 | import tokenize |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
26 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
27 | from . import messages |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
28 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
29 | PY2 = sys.version_info < (3, 0) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
30 | PY35_PLUS = sys.version_info >= (3, 5) # Python 3.5 and above |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
31 | PY36_PLUS = sys.version_info >= (3, 6) # Python 3.6 and above |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
32 | PY38_PLUS = sys.version_info >= (3, 8) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
33 | try: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
34 | sys.pypy_version_info |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
35 | PYPY = True |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
36 | except AttributeError: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
37 | PYPY = False |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
38 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
39 | builtin_vars = dir(__import__('__builtin__' if PY2 else 'builtins')) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
40 | |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
41 | parse_format_string = string.Formatter().parse |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
42 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
43 | if PY2: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
44 | tokenize_tokenize = tokenize.generate_tokens |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
45 | else: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
46 | tokenize_tokenize = tokenize.tokenize |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
47 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
48 | if PY2: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
49 | def getNodeType(node_class): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
50 | # workaround str.upper() which is locale-dependent |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
51 | return str(unicode(node_class.__name__).upper()) # __IGNORE_WARNING__ |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
52 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
53 | def get_raise_argument(node): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
54 | return node.type |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
55 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
56 | else: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
57 | def getNodeType(node_class): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
58 | return node_class.__name__.upper() |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
59 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
60 | def get_raise_argument(node): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
61 | return node.exc |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
62 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
63 | # Silence `pyflakes` from reporting `undefined name 'unicode'` in Python 3. |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
64 | unicode = str |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
65 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
66 | # Python >= 3.3 uses ast.Try instead of (ast.TryExcept + ast.TryFinally) |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
67 | if PY2: |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
68 | def getAlternatives(n): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
69 | if isinstance(n, (ast.If, ast.TryFinally)): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
70 | return [n.body] |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
71 | if isinstance(n, ast.TryExcept): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
72 | return [n.body + n.orelse] + [[hdl] for hdl in n.handlers] |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
73 | else: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
74 | def getAlternatives(n): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
75 | if isinstance(n, ast.If): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
76 | return [n.body] |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
77 | if isinstance(n, ast.Try): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
78 | return [n.body + n.orelse] + [[hdl] for hdl in n.handlers] |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
79 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
80 | if PY35_PLUS: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
81 | FOR_TYPES = (ast.For, ast.AsyncFor) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
82 | LOOP_TYPES = (ast.While, ast.For, ast.AsyncFor) |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
83 | FUNCTION_TYPES = (ast.FunctionDef, ast.AsyncFunctionDef) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
84 | else: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
85 | FOR_TYPES = (ast.For,) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
86 | LOOP_TYPES = (ast.While, ast.For) |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
87 | FUNCTION_TYPES = (ast.FunctionDef,) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
88 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
89 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
90 | if PY38_PLUS: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
91 | def _is_singleton(node): # type: (ast.AST) -> bool |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
92 | return ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
93 | isinstance(node, ast.Constant) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
94 | isinstance(node.value, (bool, type(Ellipsis), type(None))) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
95 | ) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
96 | elif not PY2: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
97 | def _is_singleton(node): # type: (ast.AST) -> bool |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
98 | return isinstance(node, (ast.NameConstant, ast.Ellipsis)) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
99 | else: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
100 | def _is_singleton(node): # type: (ast.AST) -> bool |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
101 | return ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
102 | isinstance(node, ast.Name) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
103 | node.id in {'True', 'False', 'Ellipsis', 'None'} |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
104 | ) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
105 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
106 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
107 | def _is_tuple_constant(node): # type: (ast.AST) -> bool |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
108 | return ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
109 | isinstance(node, ast.Tuple) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
110 | all(_is_constant(elt) for elt in node.elts) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
111 | ) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
112 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
113 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
114 | if PY38_PLUS: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
115 | def _is_constant(node): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
116 | return isinstance(node, ast.Constant) or _is_tuple_constant(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
117 | else: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
118 | _const_tps = (ast.Str, ast.Num) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
119 | if not PY2: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
120 | _const_tps += (ast.Bytes,) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
121 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
122 | def _is_constant(node): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
123 | return ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
124 | isinstance(node, _const_tps) or |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
125 | _is_singleton(node) or |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
126 | _is_tuple_constant(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
127 | ) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
128 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
129 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
130 | def _is_const_non_singleton(node): # type: (ast.AST) -> bool |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
131 | return _is_constant(node) and not _is_singleton(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
132 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
133 | |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
134 | # https://github.com/python/typed_ast/blob/1.4.0/ast27/Parser/tokenizer.c#L102-L104 |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
135 | TYPE_COMMENT_RE = re.compile(r'^#\s*type:\s*') |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
136 | # https://github.com/python/typed_ast/blob/1.4.0/ast27/Parser/tokenizer.c#L1408-L1413 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
137 | ASCII_NON_ALNUM = ''.join([chr(i) for i in range(128) if not chr(i).isalnum()]) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
138 | TYPE_IGNORE_RE = re.compile( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
139 | TYPE_COMMENT_RE.pattern + r'ignore([{}]|$)'.format(ASCII_NON_ALNUM)) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
140 | # https://github.com/python/typed_ast/blob/1.4.0/ast27/Grammar/Grammar#L147 |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
141 | TYPE_FUNC_RE = re.compile(r'^(\(.*?\))\s*->\s*(.*)$') |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
142 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
143 | |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
144 | MAPPING_KEY_RE = re.compile(r'\(([^()]*)\)') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
145 | CONVERSION_FLAG_RE = re.compile('[#0+ -]*') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
146 | WIDTH_RE = re.compile(r'(?:\*|\d*)') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
147 | PRECISION_RE = re.compile(r'(?:\.(?:\*|\d*))?') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
148 | LENGTH_RE = re.compile('[hlL]?') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
149 | # https://docs.python.org/3/library/stdtypes.html#old-string-formatting |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
150 | VALID_CONVERSIONS = frozenset('diouxXeEfFgGcrsa%') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
151 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
152 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
153 | def _must_match(regex, string, pos): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
154 | # type: (Pattern[str], str, int) -> Match[str] |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
155 | match = regex.match(string, pos) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
156 | assert match is not None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
157 | return match |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
158 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
159 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
160 | def parse_percent_format(s): # type: (str) -> Tuple[PercentFormat, ...] |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
161 | """Parses the string component of a `'...' % ...` format call |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
162 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
163 | Copied from https://github.com/asottile/pyupgrade at v1.20.1 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
164 | """ |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
165 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
166 | def _parse_inner(): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
167 | # type: () -> Generator[PercentFormat, None, None] |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
168 | string_start = 0 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
169 | string_end = 0 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
170 | in_fmt = False |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
171 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
172 | i = 0 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
173 | while i < len(s): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
174 | if not in_fmt: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
175 | try: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
176 | i = s.index('%', i) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
177 | except ValueError: # no more % fields! |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
178 | yield s[string_start:], None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
179 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
180 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
181 | string_end = i |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
182 | i += 1 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
183 | in_fmt = True |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
184 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
185 | key_match = MAPPING_KEY_RE.match(s, i) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
186 | if key_match: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
187 | key = key_match.group(1) # type: Optional[str] |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
188 | i = key_match.end() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
189 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
190 | key = None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
191 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
192 | conversion_flag_match = _must_match(CONVERSION_FLAG_RE, s, i) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
193 | conversion_flag = conversion_flag_match.group() or None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
194 | i = conversion_flag_match.end() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
195 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
196 | width_match = _must_match(WIDTH_RE, s, i) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
197 | width = width_match.group() or None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
198 | i = width_match.end() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
199 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
200 | precision_match = _must_match(PRECISION_RE, s, i) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
201 | precision = precision_match.group() or None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
202 | i = precision_match.end() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
203 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
204 | # length modifier is ignored |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
205 | i = _must_match(LENGTH_RE, s, i).end() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
206 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
207 | try: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
208 | conversion = s[i] |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
209 | except IndexError: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
210 | raise ValueError('end-of-string while parsing format') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
211 | i += 1 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
212 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
213 | fmt = (key, conversion_flag, width, precision, conversion) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
214 | yield s[string_start:string_end], fmt |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
215 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
216 | in_fmt = False |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
217 | string_start = i |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
218 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
219 | if in_fmt: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
220 | raise ValueError('end-of-string while parsing format') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
221 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
222 | return tuple(_parse_inner()) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
223 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
224 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
225 | class _FieldsOrder(dict): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
226 | """Fix order of AST node fields.""" |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
227 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
228 | def _get_fields(self, node_class): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
229 | # handle iter before target, and generators before element |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
230 | fields = node_class._fields |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
231 | if 'iter' in fields: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
232 | key_first = 'iter'.find |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
233 | elif 'generators' in fields: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
234 | key_first = 'generators'.find |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
235 | else: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
236 | key_first = 'value'.find |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
237 | return tuple(sorted(fields, key=key_first, reverse=True)) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
238 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
239 | def __missing__(self, node_class): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
240 | self[node_class] = fields = self._get_fields(node_class) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
241 | return fields |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
242 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
243 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
244 | def counter(items): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
245 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
246 | Simplest required implementation of collections.Counter. Required as 2.6 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
247 | does not have Counter in collections. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
248 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
249 | results = {} |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
250 | for item in items: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
251 | results[item] = results.get(item, 0) + 1 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
252 | return results |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
253 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
254 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
255 | def iter_child_nodes(node, omit=None, _fields_order=_FieldsOrder()): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
256 | """ |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
257 | Yield all direct child nodes of *node*, that is, all fields that |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
258 | are nodes and all items of fields that are lists of nodes. |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
259 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
260 | :param node: AST node to be iterated upon |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
261 | :param omit: String or tuple of strings denoting the |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
262 | attributes of the node to be omitted from |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
263 | further parsing |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
264 | :param _fields_order: Order of AST node fields |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
265 | """ |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
266 | for name in _fields_order[node.__class__]: |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
267 | if omit and name in omit: |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
268 | continue |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
269 | field = getattr(node, name, None) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
270 | if isinstance(field, ast.AST): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
271 | yield field |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
272 | elif isinstance(field, list): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
273 | for item in field: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
274 | yield item |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
275 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
276 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
277 | def convert_to_value(item): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
278 | if isinstance(item, ast.Str): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
279 | return item.s |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
280 | elif hasattr(ast, 'Bytes') and isinstance(item, ast.Bytes): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
281 | return item.s |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
282 | elif isinstance(item, ast.Tuple): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
283 | return tuple(convert_to_value(i) for i in item.elts) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
284 | elif isinstance(item, ast.Num): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
285 | return item.n |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
286 | elif isinstance(item, ast.Name): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
287 | result = VariableKey(item=item) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
288 | constants_lookup = { |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
289 | 'True': True, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
290 | 'False': False, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
291 | 'None': None, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
292 | } |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
293 | return constants_lookup.get( |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
294 | result.name, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
295 | result, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
296 | ) |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
297 | elif (not PY2) and isinstance(item, ast.NameConstant): |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
298 | # None, True, False are nameconstants in python3, but names in 2 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
299 | return item.value |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
300 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
301 | return UnhandledKeyType() |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
302 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
303 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
304 | def is_notimplemented_name_node(node): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
305 | return isinstance(node, ast.Name) and getNodeName(node) == 'NotImplemented' |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
306 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
307 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
308 | class Binding(object): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
309 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
310 | Represents the binding of a value to a name. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
311 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
312 | The checker uses this to keep track of which names have been bound and |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
313 | which names have not. See L{Assignment} for a special type of binding that |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
314 | is checked with stricter rules. |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
315 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
316 | @ivar used: pair of (L{Scope}, node) indicating the scope and |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
317 | the node that this binding was last used. |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
318 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
319 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
320 | def __init__(self, name, source): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
321 | self.name = name |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
322 | self.source = source |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
323 | self.used = False |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
324 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
325 | def __str__(self): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
326 | return self.name |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
327 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
328 | def __repr__(self): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
329 | return '<%s object %r from line %r at 0x%x>' % (self.__class__.__name__, |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
330 | self.name, |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
331 | self.source.lineno, |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
332 | id(self)) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
333 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
334 | def redefines(self, other): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
335 | return isinstance(other, Definition) and self.name == other.name |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
336 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
337 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
338 | class Definition(Binding): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
339 | """ |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
340 | A binding that defines a function or a class. |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
341 | """ |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
342 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
343 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
344 | class Builtin(Definition): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
345 | """A definition created for all Python builtins.""" |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
346 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
347 | def __init__(self, name): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
348 | super(Builtin, self).__init__(name, None) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
349 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
350 | def __repr__(self): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
351 | return '<%s object %r at 0x%x>' % (self.__class__.__name__, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
352 | self.name, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
353 | id(self)) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
354 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
355 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
356 | class UnhandledKeyType(object): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
357 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
358 | A dictionary key of a type that we cannot or do not check for duplicates. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
359 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
360 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
361 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
362 | class VariableKey(object): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
363 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
364 | A dictionary key which is a variable. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
365 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
366 | @ivar item: The variable AST object. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
367 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
368 | def __init__(self, item): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
369 | self.name = item.id |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
370 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
371 | def __eq__(self, compare): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
372 | return ( |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
373 | compare.__class__ == self.__class__ and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
374 | compare.name == self.name |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
375 | ) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
376 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
377 | def __hash__(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
378 | return hash(self.name) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
379 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
380 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
381 | class Importation(Definition): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
382 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
383 | A binding created by an import statement. |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
384 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
385 | @ivar fullName: The complete name given to the import statement, |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
386 | possibly including multiple dotted components. |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
387 | @type fullName: C{str} |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
388 | """ |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
389 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
390 | def __init__(self, name, source, full_name=None): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
391 | self.fullName = full_name or name |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
392 | self.redefined = [] |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
393 | super(Importation, self).__init__(name, source) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
394 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
395 | def redefines(self, other): |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
396 | if isinstance(other, SubmoduleImportation): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
397 | # See note in SubmoduleImportation about RedefinedWhileUnused |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
398 | return self.fullName == other.fullName |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
399 | return isinstance(other, Definition) and self.name == other.name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
400 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
401 | def _has_alias(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
402 | """Return whether importation needs an as clause.""" |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
403 | return not self.fullName.split('.')[-1] == self.name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
404 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
405 | @property |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
406 | def source_statement(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
407 | """Generate a source statement equivalent to the import.""" |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
408 | if self._has_alias(): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
409 | return 'import %s as %s' % (self.fullName, self.name) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
410 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
411 | return 'import %s' % self.fullName |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
412 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
413 | def __str__(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
414 | """Return import full name with alias.""" |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
415 | if self._has_alias(): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
416 | return self.fullName + ' as ' + self.name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
417 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
418 | return self.fullName |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
419 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
420 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
421 | class SubmoduleImportation(Importation): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
422 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
423 | A binding created by a submodule import statement. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
424 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
425 | A submodule import is a special case where the root module is implicitly |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
426 | imported, without an 'as' clause, and the submodule is also imported. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
427 | Python does not restrict which attributes of the root module may be used. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
428 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
429 | This class is only used when the submodule import is without an 'as' clause. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
430 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
431 | pyflakes handles this case by registering the root module name in the scope, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
432 | allowing any attribute of the root module to be accessed. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
433 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
434 | RedefinedWhileUnused is suppressed in `redefines` unless the submodule |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
435 | name is also the same, to avoid false positives. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
436 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
437 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
438 | def __init__(self, name, source): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
439 | # A dot should only appear in the name when it is a submodule import |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
440 | assert '.' in name and (not source or isinstance(source, ast.Import)) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
441 | package_name = name.split('.')[0] |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
442 | super(SubmoduleImportation, self).__init__(package_name, source) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
443 | self.fullName = name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
444 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
445 | def redefines(self, other): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
446 | if isinstance(other, Importation): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
447 | return self.fullName == other.fullName |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
448 | return super(SubmoduleImportation, self).redefines(other) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
449 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
450 | def __str__(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
451 | return self.fullName |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
452 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
453 | @property |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
454 | def source_statement(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
455 | return 'import ' + self.fullName |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
456 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
457 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
458 | class ImportationFrom(Importation): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
459 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
460 | def __init__(self, name, source, module, real_name=None): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
461 | self.module = module |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
462 | self.real_name = real_name or name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
463 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
464 | if module.endswith('.'): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
465 | full_name = module + self.real_name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
466 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
467 | full_name = module + '.' + self.real_name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
468 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
469 | super(ImportationFrom, self).__init__(name, source, full_name) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
470 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
471 | def __str__(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
472 | """Return import full name with alias.""" |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
473 | if self.real_name != self.name: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
474 | return self.fullName + ' as ' + self.name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
475 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
476 | return self.fullName |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
477 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
478 | @property |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
479 | def source_statement(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
480 | if self.real_name != self.name: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
481 | return 'from %s import %s as %s' % (self.module, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
482 | self.real_name, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
483 | self.name) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
484 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
485 | return 'from %s import %s' % (self.module, self.name) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
486 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
487 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
488 | class StarImportation(Importation): |
5510
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
489 | """A binding created by a 'from x import *' statement.""" |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
490 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
491 | def __init__(self, name, source): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
492 | super(StarImportation, self).__init__('*', source) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
493 | # Each star importation needs a unique name, and |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
494 | # may not be the module name otherwise it will be deemed imported |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
495 | self.name = name + '.*' |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
496 | self.fullName = name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
497 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
498 | @property |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
499 | def source_statement(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
500 | return 'from ' + self.fullName + ' import *' |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
501 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
502 | def __str__(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
503 | # When the module ends with a ., avoid the ambiguous '..*' |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
504 | if self.fullName.endswith('.'): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
505 | return self.source_statement |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
506 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
507 | return self.name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
508 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
509 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
510 | class FutureImportation(ImportationFrom): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
511 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
512 | A binding created by a from `__future__` import statement. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
513 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
514 | `__future__` imports are implicitly used. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
515 | """ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
516 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
517 | def __init__(self, name, source, scope): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
518 | super(FutureImportation, self).__init__(name, source, '__future__') |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
519 | self.used = (scope, source) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
520 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
521 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
522 | class Argument(Binding): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
523 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
524 | Represents binding a name as an argument. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
525 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
526 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
527 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
528 | class Assignment(Binding): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
529 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
530 | Represents binding a name with an explicit assignment. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
531 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
532 | The checker will raise warnings for any Assignment that isn't used. Also, |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
533 | the checker does not consider assignments in tuple/list unpacking to be |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
534 | Assignments, rather it treats them as simple Bindings. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
535 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
536 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
537 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
538 | class FunctionDefinition(Definition): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
539 | pass |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
540 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
541 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
542 | class ClassDefinition(Definition): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
543 | pass |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
544 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
545 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
546 | class ExportBinding(Binding): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
547 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
548 | A binding created by an C{__all__} assignment. If the names in the list |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
549 | can be determined statically, they will be treated as names for export and |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
550 | additional checking applied to them. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
551 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
552 | The only recognized C{__all__} assignment via list concatenation is in the |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
553 | following format: |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
554 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
555 | __all__ = ['a'] + ['b'] + ['c'] |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
556 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
557 | Names which are imported and not otherwise used but appear in the value of |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
558 | C{__all__} will not have an unused import warning reported for them. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
559 | """ |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
560 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
561 | def __init__(self, name, source, scope): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
562 | if '__all__' in scope and isinstance(source, ast.AugAssign): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
563 | self.names = list(scope['__all__'].names) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
564 | else: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
565 | self.names = [] |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
566 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
567 | def _add_to_names(container): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
568 | for node in container.elts: |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
569 | if isinstance(node, ast.Str): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
570 | self.names.append(node.s) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
571 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
572 | if isinstance(source.value, (ast.List, ast.Tuple)): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
573 | _add_to_names(source.value) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
574 | # If concatenating lists |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
575 | elif isinstance(source.value, ast.BinOp): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
576 | currentValue = source.value |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
577 | while isinstance(currentValue.right, ast.List): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
578 | left = currentValue.left |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
579 | right = currentValue.right |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
580 | _add_to_names(right) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
581 | # If more lists are being added |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
582 | if isinstance(left, ast.BinOp): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
583 | currentValue = left |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
584 | # If just two lists are being added |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
585 | elif isinstance(left, ast.List): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
586 | _add_to_names(left) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
587 | # All lists accounted for - done |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
588 | break |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
589 | # If not list concatenation |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
590 | else: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
591 | break |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
592 | super(ExportBinding, self).__init__(name, source) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
593 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
594 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
595 | class Scope(dict): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
596 | importStarred = False # set to True when import * is found |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
597 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
598 | def __repr__(self): |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
599 | scope_cls = self.__class__.__name__ |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
600 | return '<%s at 0x%x %s>' % (scope_cls, id(self), dict.__repr__(self)) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
601 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
602 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
603 | class ClassScope(Scope): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
604 | pass |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
605 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
606 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
607 | class FunctionScope(Scope): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
608 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
609 | I represent a name scope for a function. |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
610 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
611 | @ivar globals: Names declared 'global' in this function. |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
612 | """ |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
613 | usesLocals = False |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
614 | alwaysUsed = {'__tracebackhide__', '__traceback_info__', |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
615 | '__traceback_supplement__'} |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
616 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
617 | def __init__(self): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
618 | super(FunctionScope, self).__init__() |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
619 | # Simplify: manage the special locals as globals |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
620 | self.globals = self.alwaysUsed.copy() |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
621 | self.returnValue = None # First non-empty return |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
622 | self.isGenerator = False # Detect a generator |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
623 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
624 | def unusedAssignments(self): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
625 | """ |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
626 | Return a generator for the assignments which have not been used. |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
627 | """ |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
628 | for name, binding in self.items(): |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
629 | if (not binding.used and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
630 | name != '_' and # see issue #202 |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
631 | name not in self.globals and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
632 | not self.usesLocals and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
633 | isinstance(binding, Assignment)): |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
634 | yield name, binding |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
635 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
636 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
637 | class GeneratorScope(Scope): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
638 | pass |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
639 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
640 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
641 | class ModuleScope(Scope): |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
642 | """Scope for a module.""" |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
643 | _futures_allowed = True |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
644 | _annotations_future_enabled = False |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
645 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
646 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
647 | class DoctestScope(ModuleScope): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
648 | """Scope for a doctest.""" |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
649 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
650 | |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
651 | class DummyNode(object): |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
652 | """Used in place of an `ast.AST` to set error message positions""" |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
653 | def __init__(self, lineno, col_offset): |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
654 | self.lineno = lineno |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
655 | self.col_offset = col_offset |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
656 | |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
657 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
658 | # Globally defined names which are not attributes of the builtins module, or |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
659 | # are only present on some platforms. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
660 | _MAGIC_GLOBALS = ['__file__', '__builtins__', 'WindowsError'] |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
661 | # module scope annotation will store in `__annotations__`, see also PEP 526. |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
662 | if PY36_PLUS: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
663 | _MAGIC_GLOBALS.append('__annotations__') |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
664 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
665 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
666 | def getNodeName(node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
667 | # Returns node.id, or node.name, or None |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
668 | if hasattr(node, 'id'): # One of the many nodes with an id |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
669 | return node.id |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
670 | if hasattr(node, 'name'): # an ExceptHandler node |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
671 | return node.name |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
672 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
673 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
674 | TYPING_MODULES = frozenset(('typing', 'typing_extensions')) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
675 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
676 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
677 | def _is_typing_helper(node, is_name_match_fn, scope_stack): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
678 | """ |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
679 | Internal helper to determine whether or not something is a member of a |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
680 | typing module. This is used as part of working out whether we are within a |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
681 | type annotation context. |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
682 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
683 | Note: you probably don't want to use this function directly. Instead see the |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
684 | utils below which wrap it (`_is_typing` and `_is_any_typing_member`). |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
685 | """ |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
686 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
687 | def _bare_name_is_attr(name): |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
688 | for scope in reversed(scope_stack): |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
689 | if name in scope: |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
690 | return ( |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
691 | isinstance(scope[name], ImportationFrom) and |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
692 | scope[name].module in TYPING_MODULES and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
693 | is_name_match_fn(scope[name].real_name) |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
694 | ) |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
695 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
696 | return False |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
697 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
698 | return ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
699 | ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
700 | isinstance(node, ast.Name) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
701 | _bare_name_is_attr(node.id) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
702 | ) or ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
703 | isinstance(node, ast.Attribute) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
704 | isinstance(node.value, ast.Name) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
705 | node.value.id in TYPING_MODULES and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
706 | is_name_match_fn(node.attr) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
707 | ) |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
708 | ) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
709 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
710 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
711 | def _is_typing(node, typing_attr, scope_stack): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
712 | """ |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
713 | Determine whether `node` represents the member of a typing module specified |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
714 | by `typing_attr`. |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
715 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
716 | This is used as part of working out whether we are within a type annotation |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
717 | context. |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
718 | """ |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
719 | return _is_typing_helper(node, lambda x: x == typing_attr, scope_stack) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
720 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
721 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
722 | def _is_any_typing_member(node, scope_stack): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
723 | """ |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
724 | Determine whether `node` represents any member of a typing module. |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
725 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
726 | This is used as part of working out whether we are within a type annotation |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
727 | context. |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
728 | """ |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
729 | return _is_typing_helper(node, lambda x: True, scope_stack) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
730 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
731 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
732 | def is_typing_overload(value, scope_stack): |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
733 | return ( |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
734 | isinstance(value.source, FUNCTION_TYPES) and |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
735 | any( |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
736 | _is_typing(dec, 'overload', scope_stack) |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
737 | for dec in value.source.decorator_list |
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
738 | ) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
739 | ) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
740 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
741 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
742 | def in_annotation(func): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
743 | @functools.wraps(func) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
744 | def in_annotation_func(self, *args, **kwargs): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
745 | with self._enter_annotation(): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
746 | return func(self, *args, **kwargs) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
747 | return in_annotation_func |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
748 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
749 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
750 | def make_tokens(code): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
751 | # PY3: tokenize.tokenize requires readline of bytes |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
752 | if not isinstance(code, bytes): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
753 | code = code.encode('UTF-8') |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
754 | lines = iter(code.splitlines(True)) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
755 | # next(lines, b'') is to prevent an error in pypy3 |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
756 | return tuple(tokenize_tokenize(lambda: next(lines, b''))) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
757 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
758 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
759 | class _TypeableVisitor(ast.NodeVisitor): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
760 | """Collect the line number and nodes which are deemed typeable by |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
761 | PEP 484 |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
762 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
763 | https://www.python.org/dev/peps/pep-0484/#type-comments |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
764 | """ |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
765 | def __init__(self): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
766 | self.typeable_lines = [] # type: List[int] |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
767 | self.typeable_nodes = {} # type: Dict[int, ast.AST] |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
768 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
769 | def _typeable(self, node): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
770 | # if there is more than one typeable thing on a line last one wins |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
771 | self.typeable_lines.append(node.lineno) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
772 | self.typeable_nodes[node.lineno] = node |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
773 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
774 | self.generic_visit(node) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
775 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
776 | visit_Assign = visit_For = visit_FunctionDef = visit_With = _typeable |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
777 | visit_AsyncFor = visit_AsyncFunctionDef = visit_AsyncWith = _typeable |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
778 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
779 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
780 | def _collect_type_comments(tree, tokens): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
781 | visitor = _TypeableVisitor() |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
782 | visitor.visit(tree) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
783 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
784 | type_comments = collections.defaultdict(list) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
785 | for tp, text, start, _, _ in tokens: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
786 | if ( |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
787 | tp != tokenize.COMMENT or # skip non comments |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
788 | not TYPE_COMMENT_RE.match(text) or # skip non-type comments |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
789 | TYPE_IGNORE_RE.match(text) # skip ignores |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
790 | ): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
791 | continue |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
792 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
793 | # search for the typeable node at or before the line number of the |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
794 | # type comment. |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
795 | # if the bisection insertion point is before any nodes this is an |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
796 | # invalid type comment which is ignored. |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
797 | lineno, _ = start |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
798 | idx = bisect.bisect_right(visitor.typeable_lines, lineno) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
799 | if idx == 0: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
800 | continue |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
801 | node = visitor.typeable_nodes[visitor.typeable_lines[idx - 1]] |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
802 | type_comments[node].append((start, text)) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
803 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
804 | return type_comments |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
805 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
806 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
807 | class Checker(object): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
808 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
809 | I check the cleanliness and sanity of Python code. |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
810 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
811 | @ivar _deferredFunctions: Tracking list used by L{deferFunction}. Elements |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
812 | of the list are two-tuples. The first element is the callable passed |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
813 | to L{deferFunction}. The second element is a copy of the scope stack |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
814 | at the time L{deferFunction} was called. |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
815 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
816 | @ivar _deferredAssignments: Similar to C{_deferredFunctions}, but for |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
817 | callables which are deferred assignment checks. |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
818 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
819 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
820 | _ast_node_scope = { |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
821 | ast.Module: ModuleScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
822 | ast.ClassDef: ClassScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
823 | ast.FunctionDef: FunctionScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
824 | ast.Lambda: FunctionScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
825 | ast.ListComp: GeneratorScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
826 | ast.SetComp: GeneratorScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
827 | ast.GeneratorExp: GeneratorScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
828 | ast.DictComp: GeneratorScope, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
829 | } |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
830 | if PY35_PLUS: |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
831 | _ast_node_scope[ast.AsyncFunctionDef] = FunctionScope |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
832 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
833 | nodeDepth = 0 |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
834 | offset = None |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
835 | traceTree = False |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
836 | _in_annotation = False |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
837 | _in_typing_literal = False |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
838 | _in_deferred = False |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
839 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
840 | builtIns = set(builtin_vars).union(_MAGIC_GLOBALS) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
841 | _customBuiltIns = os.environ.get('PYFLAKES_BUILTINS') |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
842 | if _customBuiltIns: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
843 | builtIns.update(_customBuiltIns.split(',')) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
844 | del _customBuiltIns |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
845 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
846 | # TODO: file_tokens= is required to perform checks on type comments, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
847 | # eventually make this a required positional argument. For now it |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
848 | # is defaulted to `()` for api compatibility. |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
849 | def __init__(self, tree, filename='(none)', builtins=None, |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
850 | withDoctest='PYFLAKES_DOCTEST' in os.environ, file_tokens=()): |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
851 | self._nodeHandlers = {} |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
852 | self._deferredFunctions = [] |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
853 | self._deferredAssignments = [] |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
854 | self.deadScopes = [] |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
855 | self.messages = [] |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
856 | self.filename = filename |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
857 | if builtins: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
858 | self.builtIns = self.builtIns.union(builtins) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
859 | self.withDoctest = withDoctest |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
860 | try: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
861 | self.scopeStack = [Checker._ast_node_scope[type(tree)]()] |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
862 | except KeyError: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
863 | raise RuntimeError('No scope implemented for the node %r' % tree) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
864 | self.exceptHandlers = [()] |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
865 | self.root = tree |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
866 | self._type_comments = _collect_type_comments(tree, file_tokens) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
867 | for builtin in self.builtIns: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
868 | self.addBinding(None, Builtin(builtin)) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
869 | self.handleChildren(tree) |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
870 | self._in_deferred = True |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
871 | self.runDeferred(self._deferredFunctions) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
872 | # Set _deferredFunctions to None so that deferFunction will fail |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
873 | # noisily if called after we've run through the deferred functions. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
874 | self._deferredFunctions = None |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
875 | self.runDeferred(self._deferredAssignments) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
876 | # Set _deferredAssignments to None so that deferAssignment will fail |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
877 | # noisily if called after we've run through the deferred assignments. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
878 | self._deferredAssignments = None |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
879 | del self.scopeStack[1:] |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
880 | self.popScope() |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
881 | self.checkDeadScopes() |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
882 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
883 | def deferFunction(self, callable): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
884 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
885 | Schedule a function handler to be called just before completion. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
886 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
887 | This is used for handling function bodies, which must be deferred |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
888 | because code later in the file might modify the global scope. When |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
889 | `callable` is called, the scope at the time this is called will be |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
890 | restored, however it will contain any new bindings added to it. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
891 | """ |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
892 | self._deferredFunctions.append((callable, self.scopeStack[:], self.offset)) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
893 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
894 | def deferAssignment(self, callable): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
895 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
896 | Schedule an assignment handler to be called just after deferred |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
897 | function handlers. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
898 | """ |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
899 | self._deferredAssignments.append((callable, self.scopeStack[:], self.offset)) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
900 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
901 | def runDeferred(self, deferred): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
902 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
903 | Run the callables in C{deferred} using their associated scope stack. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
904 | """ |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
905 | for handler, scope, offset in deferred: |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
906 | self.scopeStack = scope |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
907 | self.offset = offset |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
908 | handler() |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
909 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
910 | def _in_doctest(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
911 | return (len(self.scopeStack) >= 2 and |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
912 | isinstance(self.scopeStack[1], DoctestScope)) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
913 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
914 | @property |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
915 | def futuresAllowed(self): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
916 | if not all(isinstance(scope, ModuleScope) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
917 | for scope in self.scopeStack): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
918 | return False |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
919 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
920 | return self.scope._futures_allowed |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
921 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
922 | @futuresAllowed.setter |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
923 | def futuresAllowed(self, value): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
924 | assert value is False |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
925 | if isinstance(self.scope, ModuleScope): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
926 | self.scope._futures_allowed = False |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
927 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
928 | @property |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
929 | def annotationsFutureEnabled(self): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
930 | scope = self.scopeStack[0] |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
931 | if not isinstance(scope, ModuleScope): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
932 | return False |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
933 | return scope._annotations_future_enabled |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
934 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
935 | @annotationsFutureEnabled.setter |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
936 | def annotationsFutureEnabled(self, value): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
937 | assert value is True |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
938 | assert isinstance(self.scope, ModuleScope) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
939 | self.scope._annotations_future_enabled = True |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
940 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
941 | @property |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
942 | def scope(self): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
943 | return self.scopeStack[-1] |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
944 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
945 | def popScope(self): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
946 | self.deadScopes.append(self.scopeStack.pop()) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
947 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
948 | def checkDeadScopes(self): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
949 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
950 | Look at scopes which have been fully examined and report names in them |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
951 | which were imported but unused. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
952 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
953 | for scope in self.deadScopes: |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
954 | # imports in classes are public members |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
955 | if isinstance(scope, ClassScope): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
956 | continue |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
957 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
958 | all_binding = scope.get('__all__') |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
959 | if all_binding and not isinstance(all_binding, ExportBinding): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
960 | all_binding = None |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
961 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
962 | if all_binding: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
963 | all_names = set(all_binding.names) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
964 | undefined = all_names.difference(scope) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
965 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
966 | all_names = undefined = [] |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
967 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
968 | if undefined: |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
969 | if not scope.importStarred and \ |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
970 | os.path.basename(self.filename) != '__init__.py': |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
971 | # Look for possible mistakes in the export list |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
972 | for name in undefined: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
973 | self.report(messages.UndefinedExport, |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
974 | scope['__all__'].source, name) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
975 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
976 | # mark all import '*' as used by the undefined in __all__ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
977 | if scope.importStarred: |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
978 | from_list = [] |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
979 | for binding in scope.values(): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
980 | if isinstance(binding, StarImportation): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
981 | binding.used = all_binding |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
982 | from_list.append(binding.fullName) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
983 | # report * usage, with a list of possible sources |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
984 | from_list = ', '.join(sorted(from_list)) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
985 | for name in undefined: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
986 | self.report(messages.ImportStarUsage, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
987 | scope['__all__'].source, name, from_list) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
988 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
989 | # Look for imported names that aren't used. |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
990 | for value in scope.values(): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
991 | if isinstance(value, Importation): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
992 | used = value.used or value.name in all_names |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
993 | if not used: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
994 | messg = messages.UnusedImport |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
995 | self.report(messg, value.source, str(value)) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
996 | for node in value.redefined: |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
997 | if isinstance(self.getParent(node), FOR_TYPES): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
998 | messg = messages.ImportShadowedByLoopVar |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
999 | elif used: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1000 | continue |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1001 | else: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1002 | messg = messages.RedefinedWhileUnused |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1003 | self.report(messg, node, value.name, value.source) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1004 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1005 | def pushScope(self, scopeClass=FunctionScope): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1006 | self.scopeStack.append(scopeClass()) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1007 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1008 | def report(self, messageClass, *args, **kwargs): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1009 | self.messages.append(messageClass(self.filename, *args, **kwargs)) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1010 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1011 | def getParent(self, node): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1012 | # Lookup the first parent which is not Tuple, List or Starred |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1013 | while True: |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1014 | node = node._pyflakes_parent |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1015 | if not hasattr(node, 'elts') and not hasattr(node, 'ctx'): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1016 | return node |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1017 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1018 | def getCommonAncestor(self, lnode, rnode, stop): |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1019 | if ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1020 | stop in (lnode, rnode) or |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1021 | not ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1022 | hasattr(lnode, '_pyflakes_parent') and |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1023 | hasattr(rnode, '_pyflakes_parent') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1024 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1025 | ): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1026 | return None |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1027 | if lnode is rnode: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1028 | return lnode |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1029 | |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1030 | if (lnode._pyflakes_depth > rnode._pyflakes_depth): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1031 | return self.getCommonAncestor(lnode._pyflakes_parent, rnode, stop) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1032 | if (lnode._pyflakes_depth < rnode._pyflakes_depth): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1033 | return self.getCommonAncestor(lnode, rnode._pyflakes_parent, stop) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1034 | return self.getCommonAncestor( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1035 | lnode._pyflakes_parent, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1036 | rnode._pyflakes_parent, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1037 | stop, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1038 | ) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1039 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1040 | def descendantOf(self, node, ancestors, stop): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1041 | for a in ancestors: |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1042 | if self.getCommonAncestor(node, a, stop): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1043 | return True |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1044 | return False |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1045 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1046 | def _getAncestor(self, node, ancestor_type): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1047 | parent = node |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1048 | while True: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1049 | if parent is self.root: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1050 | return None |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1051 | parent = self.getParent(parent) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1052 | if isinstance(parent, ancestor_type): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1053 | return parent |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1054 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1055 | def getScopeNode(self, node): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1056 | return self._getAncestor(node, tuple(Checker._ast_node_scope.keys())) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1057 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1058 | def differentForks(self, lnode, rnode): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1059 | """True, if lnode and rnode are located on different forks of IF/TRY""" |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1060 | ancestor = self.getCommonAncestor(lnode, rnode, self.root) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1061 | parts = getAlternatives(ancestor) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1062 | if parts: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1063 | for items in parts: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1064 | if self.descendantOf(lnode, items, ancestor) ^ \ |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1065 | self.descendantOf(rnode, items, ancestor): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1066 | return True |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1067 | return False |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1068 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1069 | def addBinding(self, node, value): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1070 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1071 | Called when a binding is altered. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1072 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1073 | - `node` is the statement responsible for the change |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1074 | - `value` is the new value, a Binding instance |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1075 | """ |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1076 | # assert value.source in (node, node._pyflakes_parent): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1077 | for scope in self.scopeStack[::-1]: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1078 | if value.name in scope: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1079 | break |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1080 | existing = scope.get(value.name) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1081 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1082 | if (existing and not isinstance(existing, Builtin) and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1083 | not self.differentForks(node, existing.source)): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1084 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1085 | parent_stmt = self.getParent(value.source) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1086 | if isinstance(existing, Importation) and isinstance(parent_stmt, FOR_TYPES): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1087 | self.report(messages.ImportShadowedByLoopVar, |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1088 | node, value.name, existing.source) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1089 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1090 | elif scope is self.scope: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1091 | if (isinstance(parent_stmt, ast.comprehension) and |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1092 | not isinstance(self.getParent(existing.source), |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1093 | (FOR_TYPES, ast.comprehension))): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1094 | self.report(messages.RedefinedInListComp, |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1095 | node, value.name, existing.source) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1096 | elif not existing.used and value.redefines(existing): |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1097 | if value.name != '_' or isinstance(existing, Importation): |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
1098 | if not is_typing_overload(existing, self.scopeStack): |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1099 | self.report(messages.RedefinedWhileUnused, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1100 | node, value.name, existing.source) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1101 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1102 | elif isinstance(existing, Importation) and value.redefines(existing): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1103 | existing.redefined.append(node) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1104 | |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1105 | if value.name in self.scope: |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1106 | # then assume the rebound name is used as a global or within a loop |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1107 | value.used = self.scope[value.name].used |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1108 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1109 | self.scope[value.name] = value |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1110 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1111 | def _unknown_handler(self, node): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1112 | # this environment variable configures whether to error on unknown |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1113 | # ast types. |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1114 | # |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1115 | # this is silent by default but the error is enabled for the pyflakes |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1116 | # testsuite. |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1117 | # |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1118 | # this allows new syntax to be added to python without *requiring* |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1119 | # changes from the pyflakes side. but will still produce an error |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1120 | # in the pyflakes testsuite (so more specific handling can be added if |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1121 | # needed). |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1122 | if os.environ.get('PYFLAKES_ERROR_UNKNOWN'): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1123 | raise NotImplementedError('Unexpected type: {}'.format(type(node))) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1124 | else: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1125 | self.handleChildren(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1126 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1127 | def getNodeHandler(self, node_class): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1128 | try: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1129 | return self._nodeHandlers[node_class] |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1130 | except KeyError: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1131 | nodeType = getNodeType(node_class) |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1132 | self._nodeHandlers[node_class] = handler = getattr( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1133 | self, nodeType, self._unknown_handler, |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1134 | ) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1135 | return handler |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1136 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1137 | def handleNodeLoad(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1138 | name = getNodeName(node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1139 | if not name: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1140 | return |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1141 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1142 | in_generators = None |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1143 | importStarred = None |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1144 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1145 | # try enclosing function scopes and global scope |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1146 | for scope in self.scopeStack[-1::-1]: |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1147 | if isinstance(scope, ClassScope): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1148 | if not PY2 and name == '__class__': |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1149 | return |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1150 | elif in_generators is False: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1151 | # only generators used in a class scope can access the |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1152 | # names of the class. this is skipped during the first |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1153 | # iteration |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1154 | continue |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1155 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1156 | if (name == 'print' and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1157 | isinstance(scope.get(name, None), Builtin)): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1158 | parent = self.getParent(node) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1159 | if (isinstance(parent, ast.BinOp) and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1160 | isinstance(parent.op, ast.RShift)): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1161 | self.report(messages.InvalidPrintSyntax, node) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1162 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1163 | try: |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1164 | scope[name].used = (self.scope, node) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1165 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1166 | # if the name of SubImportation is same as |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1167 | # alias of other Importation and the alias |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1168 | # is used, SubImportation also should be marked as used. |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1169 | n = scope[name] |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1170 | if isinstance(n, Importation) and n._has_alias(): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1171 | try: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1172 | scope[n.fullName].used = (self.scope, node) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1173 | except KeyError: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1174 | pass |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1175 | except KeyError: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1176 | pass |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1177 | else: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1178 | return |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1179 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1180 | importStarred = importStarred or scope.importStarred |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1181 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1182 | if in_generators is not False: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1183 | in_generators = isinstance(scope, GeneratorScope) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1184 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1185 | if importStarred: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1186 | from_list = [] |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1187 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1188 | for scope in self.scopeStack[-1::-1]: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1189 | for binding in scope.values(): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1190 | if isinstance(binding, StarImportation): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1191 | # mark '*' imports as used for each scope |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1192 | binding.used = (self.scope, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1193 | from_list.append(binding.fullName) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1194 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1195 | # report * usage, with a list of possible sources |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1196 | from_list = ', '.join(sorted(from_list)) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1197 | self.report(messages.ImportStarUsage, node, name, from_list) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1198 | return |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1199 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1200 | if name == '__path__' and os.path.basename(self.filename) == '__init__.py': |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1201 | # the special name __path__ is valid only in packages |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1202 | return |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1203 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1204 | if name == '__module__' and isinstance(self.scope, ClassScope): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1205 | return |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1206 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1207 | # protected with a NameError handler? |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1208 | if 'NameError' not in self.exceptHandlers[-1]: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1209 | self.report(messages.UndefinedName, node, name) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1210 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1211 | def handleNodeStore(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1212 | name = getNodeName(node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1213 | if not name: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1214 | return |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1215 | # if the name hasn't already been defined in the current scope |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1216 | if isinstance(self.scope, FunctionScope) and name not in self.scope: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1217 | # for each function or module scope above us |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1218 | for scope in self.scopeStack[:-1]: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1219 | if not isinstance(scope, (FunctionScope, ModuleScope)): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1220 | continue |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1221 | # if the name was defined in that scope, and the name has |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1222 | # been accessed already in the current scope, and hasn't |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1223 | # been declared global |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1224 | used = name in scope and scope[name].used |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1225 | if used and used[0] is self.scope and name not in self.scope.globals: |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1226 | # then it's probably a mistake |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1227 | self.report(messages.UndefinedLocal, |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1228 | scope[name].used[1], name, scope[name].source) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1229 | break |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1230 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1231 | parent_stmt = self.getParent(node) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1232 | if isinstance(parent_stmt, (FOR_TYPES, ast.comprehension)) or ( |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1233 | parent_stmt != node._pyflakes_parent and |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1234 | not self.isLiteralTupleUnpacking(parent_stmt)): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1235 | binding = Binding(name, node) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1236 | elif name == '__all__' and isinstance(self.scope, ModuleScope): |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1237 | binding = ExportBinding(name, node._pyflakes_parent, self.scope) |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1238 | elif PY2 and isinstance(getattr(node, 'ctx', None), ast.Param): |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1239 | binding = Argument(name, self.getScopeNode(node)) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1240 | else: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1241 | binding = Assignment(name, node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1242 | self.addBinding(node, binding) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1243 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1244 | def handleNodeDelete(self, node): |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1245 | |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1246 | def on_conditional_branch(): |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1247 | """ |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1248 | Return `True` if node is part of a conditional body. |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1249 | """ |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1250 | current = getattr(node, '_pyflakes_parent', None) |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1251 | while current: |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1252 | if isinstance(current, (ast.If, ast.While, ast.IfExp)): |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1253 | return True |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1254 | current = getattr(current, '_pyflakes_parent', None) |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1255 | return False |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1256 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1257 | name = getNodeName(node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1258 | if not name: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1259 | return |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1260 | |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1261 | if on_conditional_branch(): |
5510
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
1262 | # We cannot predict if this conditional branch is going to |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1263 | # be executed. |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1264 | return |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1265 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1266 | if isinstance(self.scope, FunctionScope) and name in self.scope.globals: |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1267 | self.scope.globals.remove(name) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1268 | else: |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1269 | try: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1270 | del self.scope[name] |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1271 | except KeyError: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1272 | self.report(messages.UndefinedName, node, name) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1273 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1274 | @contextlib.contextmanager |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1275 | def _enter_annotation(self): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1276 | orig, self._in_annotation = self._in_annotation, True |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1277 | try: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1278 | yield |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1279 | finally: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1280 | self._in_annotation = orig |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1281 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1282 | def _handle_type_comments(self, node): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1283 | for (lineno, col_offset), comment in self._type_comments.get(node, ()): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1284 | comment = comment.split(':', 1)[1].strip() |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1285 | func_match = TYPE_FUNC_RE.match(comment) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1286 | if func_match: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1287 | parts = ( |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1288 | func_match.group(1).replace('*', ''), |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1289 | func_match.group(2).strip(), |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1290 | ) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1291 | else: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1292 | parts = (comment,) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1293 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1294 | for part in parts: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1295 | if PY2: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1296 | part = part.replace('...', 'Ellipsis') |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1297 | self.deferFunction(functools.partial( |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1298 | self.handleStringAnnotation, |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
1299 | part, DummyNode(lineno, col_offset), lineno, col_offset, |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1300 | messages.CommentAnnotationSyntaxError, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1301 | )) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1302 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1303 | def handleChildren(self, tree, omit=None): |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1304 | self._handle_type_comments(tree) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1305 | for node in iter_child_nodes(tree, omit=omit): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1306 | self.handleNode(node, tree) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1307 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1308 | def isLiteralTupleUnpacking(self, node): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1309 | if isinstance(node, ast.Assign): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1310 | for child in node.targets + [node.value]: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1311 | if not hasattr(child, 'elts'): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1312 | return False |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1313 | return True |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1314 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1315 | def isDocstring(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1316 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1317 | Determine if the given node is a docstring, as long as it is at the |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1318 | correct place in the node tree. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1319 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1320 | return isinstance(node, ast.Str) or (isinstance(node, ast.Expr) and |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1321 | isinstance(node.value, ast.Str)) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1322 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1323 | def getDocstring(self, node): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1324 | if isinstance(node, ast.Expr): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1325 | node = node.value |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1326 | if not isinstance(node, ast.Str): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1327 | return (None, None) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1328 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1329 | if PYPY or PY38_PLUS: |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1330 | doctest_lineno = node.lineno - 1 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1331 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1332 | # Computed incorrectly if the docstring has backslash |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1333 | doctest_lineno = node.lineno - node.s.count('\n') - 1 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1334 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1335 | return (node.s, doctest_lineno) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1336 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1337 | def handleNode(self, node, parent): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1338 | if node is None: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1339 | return |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1340 | if self.offset and getattr(node, 'lineno', None) is not None: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1341 | node.lineno += self.offset[0] |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1342 | node.col_offset += self.offset[1] |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1343 | if self.traceTree: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1344 | print(' ' * self.nodeDepth + node.__class__.__name__) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1345 | if self.futuresAllowed and not (isinstance(node, ast.ImportFrom) or |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1346 | self.isDocstring(node)): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1347 | self.futuresAllowed = False |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1348 | self.nodeDepth += 1 |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1349 | node._pyflakes_depth = self.nodeDepth |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1350 | node._pyflakes_parent = parent |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1351 | try: |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1352 | handler = self.getNodeHandler(node.__class__) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1353 | handler(node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1354 | finally: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1355 | self.nodeDepth -= 1 |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1356 | if self.traceTree: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1357 | print(' ' * self.nodeDepth + 'end ' + node.__class__.__name__) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1358 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1359 | _getDoctestExamples = doctest.DocTestParser().get_examples |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1360 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1361 | def handleDoctests(self, node): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1362 | try: |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1363 | if hasattr(node, 'docstring'): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1364 | docstring = node.docstring |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1365 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1366 | # This is just a reasonable guess. In Python 3.7, docstrings no |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1367 | # longer have line numbers associated with them. This will be |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1368 | # incorrect if there are empty lines between the beginning |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1369 | # of the function and the docstring. |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1370 | node_lineno = node.lineno |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1371 | if hasattr(node, 'args'): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1372 | node_lineno = max([node_lineno] + |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1373 | [arg.lineno for arg in node.args.args]) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1374 | else: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1375 | (docstring, node_lineno) = self.getDocstring(node.body[0]) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1376 | examples = docstring and self._getDoctestExamples(docstring) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1377 | except (ValueError, IndexError): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1378 | # e.g. line 6 of the docstring for <string> has inconsistent |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1379 | # leading whitespace: ... |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1380 | return |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1381 | if not examples: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1382 | return |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1383 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1384 | # Place doctest in module scope |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1385 | saved_stack = self.scopeStack |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1386 | self.scopeStack = [self.scopeStack[0]] |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1387 | node_offset = self.offset or (0, 0) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1388 | self.pushScope(DoctestScope) |
7060
d04e8965af91
checker.py: added a fix taken from pyflakes (2019-07-09)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
1389 | if '_' not in self.scopeStack[0]: |
d04e8965af91
checker.py: added a fix taken from pyflakes (2019-07-09)
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
1390 | self.addBinding(None, Builtin('_')) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1391 | for example in examples: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1392 | try: |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1393 | tree = ast.parse(example.source, "<doctest>") |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1394 | except SyntaxError: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1395 | e = sys.exc_info()[1] |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1396 | if PYPY: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1397 | e.offset += 1 |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1398 | position = (node_lineno + example.lineno + e.lineno, |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1399 | example.indent + 4 + (e.offset or 0)) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1400 | self.report(messages.DoctestSyntaxError, node, position) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1401 | else: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1402 | self.offset = (node_offset[0] + node_lineno + example.lineno, |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1403 | node_offset[1] + example.indent + 4) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1404 | self.handleChildren(tree) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1405 | self.offset = node_offset |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1406 | self.popScope() |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1407 | self.scopeStack = saved_stack |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1408 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1409 | @in_annotation |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1410 | def handleStringAnnotation(self, s, node, ref_lineno, ref_col_offset, err): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1411 | try: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1412 | tree = ast.parse(s) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1413 | except SyntaxError: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1414 | self.report(err, node, s) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1415 | return |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1416 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1417 | body = tree.body |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1418 | if len(body) != 1 or not isinstance(body[0], ast.Expr): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1419 | self.report(err, node, s) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1420 | return |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1421 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1422 | parsed_annotation = tree.body[0].value |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1423 | for descendant in ast.walk(parsed_annotation): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1424 | if ( |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1425 | 'lineno' in descendant._attributes and |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1426 | 'col_offset' in descendant._attributes |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1427 | ): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1428 | descendant.lineno = ref_lineno |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1429 | descendant.col_offset = ref_col_offset |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1430 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1431 | self.handleNode(parsed_annotation, node) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1432 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1433 | @in_annotation |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1434 | def handleAnnotation(self, annotation, node): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1435 | if isinstance(annotation, ast.Str): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1436 | # Defer handling forward annotation. |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1437 | self.deferFunction(functools.partial( |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1438 | self.handleStringAnnotation, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1439 | annotation.s, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1440 | node, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1441 | annotation.lineno, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1442 | annotation.col_offset, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1443 | messages.ForwardAnnotationSyntaxError, |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1444 | )) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1445 | elif self.annotationsFutureEnabled: |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1446 | fn = in_annotation(Checker.handleNode) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1447 | self.deferFunction(lambda: fn(self, annotation, node)) |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1448 | else: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1449 | self.handleNode(annotation, node) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1450 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1451 | def ignore(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1452 | pass |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1453 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1454 | # "stmt" type nodes |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1455 | DELETE = PRINT = FOR = ASYNCFOR = WHILE = WITH = WITHITEM = \ |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1456 | ASYNCWITH = ASYNCWITHITEM = TRYFINALLY = EXEC = \ |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1457 | EXPR = ASSIGN = handleChildren |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1458 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1459 | PASS = ignore |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1460 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1461 | # "expr" type nodes |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1462 | BOOLOP = UNARYOP = SET = \ |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1463 | REPR = ATTRIBUTE = \ |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1464 | STARRED = NAMECONSTANT = NAMEDEXPR = handleChildren |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1465 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1466 | def SUBSCRIPT(self, node): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1467 | if ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1468 | ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1469 | isinstance(node.value, ast.Name) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1470 | node.value.id == 'Literal' |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1471 | ) or ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1472 | isinstance(node.value, ast.Attribute) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1473 | node.value.attr == 'Literal' |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1474 | ) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1475 | ): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1476 | orig, self._in_typing_literal = self._in_typing_literal, True |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1477 | try: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1478 | self.handleChildren(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1479 | finally: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1480 | self._in_typing_literal = orig |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1481 | else: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1482 | if _is_any_typing_member(node.value, self.scopeStack): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1483 | with self._enter_annotation(): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1484 | self.handleChildren(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1485 | else: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1486 | self.handleChildren(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1487 | |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1488 | def _handle_string_dot_format(self, node): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1489 | try: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1490 | placeholders = tuple(parse_format_string(node.func.value.s)) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1491 | except ValueError as e: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1492 | self.report(messages.StringDotFormatInvalidFormat, node, e) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1493 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1494 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1495 | class state: # py2-compatible `nonlocal` |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1496 | auto = None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1497 | next_auto = 0 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1498 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1499 | placeholder_positional = set() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1500 | placeholder_named = set() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1501 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1502 | def _add_key(fmtkey): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1503 | """Returns True if there is an error which should early-exit""" |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1504 | if fmtkey is None: # end of string or `{` / `}` escapes |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1505 | return False |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1506 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1507 | # attributes / indices are allowed in `.format(...)` |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1508 | fmtkey, _, _ = fmtkey.partition('.') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1509 | fmtkey, _, _ = fmtkey.partition('[') |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1510 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1511 | try: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1512 | fmtkey = int(fmtkey) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1513 | except ValueError: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1514 | pass |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1515 | else: # fmtkey was an integer |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1516 | if state.auto is True: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1517 | self.report(messages.StringDotFormatMixingAutomatic, node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1518 | return True |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1519 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1520 | state.auto = False |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1521 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1522 | if fmtkey == '': |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1523 | if state.auto is False: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1524 | self.report(messages.StringDotFormatMixingAutomatic, node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1525 | return True |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1526 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1527 | state.auto = True |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1528 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1529 | fmtkey = state.next_auto |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1530 | state.next_auto += 1 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1531 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1532 | if isinstance(fmtkey, int): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1533 | placeholder_positional.add(fmtkey) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1534 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1535 | placeholder_named.add(fmtkey) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1536 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1537 | return False |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1538 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1539 | for _, fmtkey, spec, _ in placeholders: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1540 | if _add_key(fmtkey): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1541 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1542 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1543 | # spec can also contain format specifiers |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1544 | if spec is not None: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1545 | try: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1546 | spec_placeholders = tuple(parse_format_string(spec)) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1547 | except ValueError as e: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1548 | self.report(messages.StringDotFormatInvalidFormat, node, e) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1549 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1550 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1551 | for _, spec_fmtkey, spec_spec, _ in spec_placeholders: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1552 | # can't recurse again |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1553 | if spec_spec is not None and '{' in spec_spec: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1554 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1555 | messages.StringDotFormatInvalidFormat, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1556 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1557 | 'Max string recursion exceeded', |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1558 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1559 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1560 | if _add_key(spec_fmtkey): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1561 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1562 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1563 | # bail early if there is *args or **kwargs |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1564 | if ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1565 | # python 2.x *args / **kwargs |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1566 | getattr(node, 'starargs', None) or |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1567 | getattr(node, 'kwargs', None) or |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1568 | # python 3.x *args |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1569 | any( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1570 | isinstance(arg, getattr(ast, 'Starred', ())) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1571 | for arg in node.args |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1572 | ) or |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1573 | # python 3.x **kwargs |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1574 | any(kwd.arg is None for kwd in node.keywords) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1575 | ): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1576 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1577 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1578 | substitution_positional = set(range(len(node.args))) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1579 | substitution_named = {kwd.arg for kwd in node.keywords} |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1580 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1581 | extra_positional = substitution_positional - placeholder_positional |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1582 | extra_named = substitution_named - placeholder_named |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1583 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1584 | missing_arguments = ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1585 | (placeholder_positional | placeholder_named) - |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1586 | (substitution_positional | substitution_named) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1587 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1588 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1589 | if extra_positional: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1590 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1591 | messages.StringDotFormatExtraPositionalArguments, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1592 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1593 | ', '.join(sorted(str(x) for x in extra_positional)), |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1594 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1595 | if extra_named: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1596 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1597 | messages.StringDotFormatExtraNamedArguments, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1598 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1599 | ', '.join(sorted(extra_named)), |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1600 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1601 | if missing_arguments: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1602 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1603 | messages.StringDotFormatMissingArgument, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1604 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1605 | ', '.join(sorted(str(x) for x in missing_arguments)), |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1606 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1607 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1608 | def CALL(self, node): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1609 | if ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1610 | isinstance(node.func, ast.Attribute) and |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1611 | isinstance(node.func.value, ast.Str) and |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1612 | node.func.attr == 'format' |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1613 | ): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1614 | self._handle_string_dot_format(node) |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1615 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1616 | if ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1617 | _is_typing(node.func, 'cast', self.scopeStack) and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1618 | len(node.args) >= 1 and |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1619 | isinstance(node.args[0], ast.Str) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1620 | ): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1621 | with self._enter_annotation(): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1622 | self.handleNode(node.args[0], node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1623 | |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1624 | self.handleChildren(node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1625 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1626 | def _handle_percent_format(self, node): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1627 | try: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1628 | placeholders = parse_percent_format(node.left.s) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1629 | except ValueError: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1630 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1631 | messages.PercentFormatInvalidFormat, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1632 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1633 | 'incomplete format', |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1634 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1635 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1636 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1637 | named = set() |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1638 | positional_count = 0 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1639 | positional = None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1640 | for _, placeholder in placeholders: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1641 | if placeholder is None: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1642 | continue |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1643 | name, _, width, precision, conversion = placeholder |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1644 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1645 | if conversion == '%': |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1646 | continue |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1647 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1648 | if conversion not in VALID_CONVERSIONS: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1649 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1650 | messages.PercentFormatUnsupportedFormatCharacter, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1651 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1652 | conversion, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1653 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1654 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1655 | if positional is None and conversion: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1656 | positional = name is None |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1657 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1658 | for part in (width, precision): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1659 | if part is not None and '*' in part: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1660 | if not positional: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1661 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1662 | messages.PercentFormatStarRequiresSequence, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1663 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1664 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1665 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1666 | positional_count += 1 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1667 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1668 | if positional and name is not None: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1669 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1670 | messages.PercentFormatMixedPositionalAndNamed, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1671 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1672 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1673 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1674 | elif not positional and name is None: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1675 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1676 | messages.PercentFormatMixedPositionalAndNamed, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1677 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1678 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1679 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1680 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1681 | if positional: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1682 | positional_count += 1 |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1683 | else: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1684 | named.add(name) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1685 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1686 | if ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1687 | isinstance(node.right, (ast.List, ast.Tuple)) and |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1688 | # does not have any *splats (py35+ feature) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1689 | not any( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1690 | isinstance(elt, getattr(ast, 'Starred', ())) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1691 | for elt in node.right.elts |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1692 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1693 | ): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1694 | substitution_count = len(node.right.elts) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1695 | if positional and positional_count != substitution_count: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1696 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1697 | messages.PercentFormatPositionalCountMismatch, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1698 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1699 | positional_count, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1700 | substitution_count, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1701 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1702 | elif not positional: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1703 | self.report(messages.PercentFormatExpectedMapping, node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1704 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1705 | if ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1706 | isinstance(node.right, ast.Dict) and |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1707 | all(isinstance(k, ast.Str) for k in node.right.keys) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1708 | ): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1709 | if positional and positional_count > 1: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1710 | self.report(messages.PercentFormatExpectedSequence, node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1711 | return |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1712 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1713 | substitution_keys = {k.s for k in node.right.keys} |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1714 | extra_keys = substitution_keys - named |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1715 | missing_keys = named - substitution_keys |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1716 | if not positional and extra_keys: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1717 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1718 | messages.PercentFormatExtraNamedArguments, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1719 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1720 | ', '.join(sorted(extra_keys)), |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1721 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1722 | if not positional and missing_keys: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1723 | self.report( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1724 | messages.PercentFormatMissingArgument, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1725 | node, |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1726 | ', '.join(sorted(missing_keys)), |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1727 | ) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1728 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1729 | def BINOP(self, node): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1730 | if ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1731 | isinstance(node.op, ast.Mod) and |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1732 | isinstance(node.left, ast.Str) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1733 | ): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1734 | self._handle_percent_format(node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1735 | self.handleChildren(node) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1736 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1737 | def STR(self, node): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1738 | if self._in_annotation and not self._in_typing_literal: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1739 | fn = functools.partial( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1740 | self.handleStringAnnotation, |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1741 | node.s, |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1742 | node, |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1743 | node.lineno, |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1744 | node.col_offset, |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1745 | messages.ForwardAnnotationSyntaxError, |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1746 | ) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1747 | if self._in_deferred: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1748 | fn() |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1749 | else: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1750 | self.deferFunction(fn) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1751 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1752 | if PY38_PLUS: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1753 | def CONSTANT(self, node): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1754 | if isinstance(node.value, str): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1755 | return self.STR(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1756 | else: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1757 | NUM = BYTES = ELLIPSIS = CONSTANT = ignore |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1758 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1759 | # "slice" type nodes |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1760 | SLICE = EXTSLICE = INDEX = handleChildren |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1761 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1762 | # expression contexts are node instances too, though being constants |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1763 | LOAD = STORE = DEL = AUGLOAD = AUGSTORE = PARAM = ignore |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1764 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1765 | # same for operators |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1766 | AND = OR = ADD = SUB = MULT = DIV = MOD = POW = LSHIFT = RSHIFT = \ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1767 | BITOR = BITXOR = BITAND = FLOORDIV = INVERT = NOT = UADD = USUB = \ |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1768 | EQ = NOTEQ = LT = LTE = GT = GTE = IS = ISNOT = IN = NOTIN = \ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1769 | MATMULT = ignore |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1770 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1771 | def RAISE(self, node): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1772 | self.handleChildren(node) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1773 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1774 | arg = get_raise_argument(node) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1775 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1776 | if isinstance(arg, ast.Call): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1777 | if is_notimplemented_name_node(arg.func): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1778 | # Handle "raise NotImplemented(...)" |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1779 | self.report(messages.RaiseNotImplemented, node) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1780 | elif is_notimplemented_name_node(arg): |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1781 | # Handle "raise NotImplemented" |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1782 | self.report(messages.RaiseNotImplemented, node) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
1783 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1784 | # additional node types |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1785 | COMPREHENSION = KEYWORD = FORMATTEDVALUE = handleChildren |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1786 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1787 | _in_fstring = False |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1788 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1789 | def JOINEDSTR(self, node): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1790 | if ( |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1791 | # the conversion / etc. flags are parsed as f-strings without |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1792 | # placeholders |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1793 | not self._in_fstring and |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1794 | not any(isinstance(x, ast.FormattedValue) for x in node.values) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1795 | ): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1796 | self.report(messages.FStringMissingPlaceholders, node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1797 | |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1798 | self._in_fstring, orig = True, self._in_fstring |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1799 | try: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1800 | self.handleChildren(node) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1801 | finally: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1802 | self._in_fstring = orig |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1803 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1804 | def DICT(self, node): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1805 | # Complain if there are duplicate keys with different values |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1806 | # If they have the same value it's not going to cause potentially |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1807 | # unexpected behaviour so we'll not complain. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1808 | keys = [ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1809 | convert_to_value(key) for key in node.keys |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1810 | ] |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1811 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1812 | key_counts = counter(keys) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1813 | duplicate_keys = [ |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1814 | key for key, count in key_counts.items() |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1815 | if count > 1 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1816 | ] |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1817 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1818 | for key in duplicate_keys: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1819 | key_indices = [i for i, i_key in enumerate(keys) if i_key == key] |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1820 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1821 | values = counter( |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1822 | convert_to_value(node.values[index]) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1823 | for index in key_indices |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1824 | ) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1825 | if any(count == 1 for value, count in values.items()): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1826 | for key_index in key_indices: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1827 | key_node = node.keys[key_index] |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1828 | if isinstance(key, VariableKey): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1829 | self.report(messages.MultiValueRepeatedKeyVariable, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1830 | key_node, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1831 | key.name) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1832 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1833 | self.report( |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1834 | messages.MultiValueRepeatedKeyLiteral, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1835 | key_node, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1836 | key, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1837 | ) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1838 | self.handleChildren(node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1839 | |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1840 | def IF(self, node): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1841 | if isinstance(node.test, ast.Tuple) and node.test.elts != []: |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1842 | self.report(messages.IfTuple, node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1843 | self.handleChildren(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1844 | |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1845 | IFEXP = IF |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1846 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1847 | def ASSERT(self, node): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1848 | if isinstance(node.test, ast.Tuple) and node.test.elts != []: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1849 | self.report(messages.AssertTuple, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1850 | self.handleChildren(node) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1851 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1852 | def GLOBAL(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1853 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1854 | Keep track of globals declarations. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1855 | """ |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1856 | global_scope_index = 1 if self._in_doctest() else 0 |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1857 | global_scope = self.scopeStack[global_scope_index] |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1858 | |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1859 | # Ignore 'global' statement in global scope. |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1860 | if self.scope is not global_scope: |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1861 | |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1862 | # One 'global' statement can bind multiple (comma-delimited) names. |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1863 | for node_name in node.names: |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1864 | node_value = Assignment(node_name, node) |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1865 | |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1866 | # Remove UndefinedName messages already reported for this name. |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
1867 | # TODO: if the global is not used in this scope, it does not |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1868 | # become a globally defined name. See test_unused_global. |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1869 | self.messages = [ |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1870 | m for m in self.messages if not |
5065
39f27a2a2ea3
Little fix in the pyflakes checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
1871 | isinstance(m, messages.UndefinedName) or |
39f27a2a2ea3
Little fix in the pyflakes checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
1872 | m.message_args[0] != node_name] |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1873 | |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1874 | # Bind name to global scope if it doesn't exist already. |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1875 | global_scope.setdefault(node_name, node_value) |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1876 | |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1877 | # Bind name to non-global scopes, but as already "used". |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1878 | node_value.used = (global_scope, node) |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1879 | for scope in self.scopeStack[global_scope_index + 1:]: |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1880 | scope[node_name] = node_value |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1881 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1882 | NONLOCAL = GLOBAL |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1883 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1884 | def GENERATOREXP(self, node): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1885 | self.pushScope(GeneratorScope) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1886 | self.handleChildren(node) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1887 | self.popScope() |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1888 | |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1889 | LISTCOMP = handleChildren if PY2 else GENERATOREXP |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1890 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1891 | DICTCOMP = SETCOMP = GENERATOREXP |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1892 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1893 | def NAME(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1894 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1895 | Handle occurrence of Name (which can be a load/store/delete access.) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1896 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1897 | # Locate the name in locals / function / globals scopes. |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1898 | if isinstance(node.ctx, ast.Load): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1899 | self.handleNodeLoad(node) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1900 | if (node.id == 'locals' and isinstance(self.scope, FunctionScope) and |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1901 | isinstance(node._pyflakes_parent, ast.Call)): |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1902 | # we are doing locals() call in current scope |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1903 | self.scope.usesLocals = True |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1904 | elif isinstance(node.ctx, ast.Store): |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1905 | self.handleNodeStore(node) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
1906 | elif PY2 and isinstance(node.ctx, ast.Param): |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1907 | self.handleNodeStore(node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1908 | elif isinstance(node.ctx, ast.Del): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1909 | self.handleNodeDelete(node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1910 | else: |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
1911 | # Unknown context |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1912 | raise RuntimeError("Got impossible expression context: %r" % (node.ctx,)) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1913 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1914 | def CONTINUE(self, node): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1915 | # Walk the tree up until we see a loop (OK), a function or class |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1916 | # definition (not OK), for 'continue', a finally block (not OK), or |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1917 | # the top module scope (not OK) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1918 | n = node |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1919 | while hasattr(n, '_pyflakes_parent'): |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1920 | n, n_child = n._pyflakes_parent, n |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1921 | if isinstance(n, LOOP_TYPES): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1922 | # Doesn't apply unless it's in the loop itself |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1923 | if n_child not in n.orelse: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1924 | return |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1925 | if isinstance(n, (ast.FunctionDef, ast.ClassDef)): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1926 | break |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1927 | # Handle Try/TryFinally difference in Python < and >= 3.3 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1928 | if hasattr(n, 'finalbody') and isinstance(node, ast.Continue): |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1929 | if n_child in n.finalbody and not PY38_PLUS: |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1930 | self.report(messages.ContinueInFinally, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1931 | return |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1932 | if isinstance(node, ast.Continue): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1933 | self.report(messages.ContinueOutsideLoop, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1934 | else: # ast.Break |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1935 | self.report(messages.BreakOutsideLoop, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1936 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1937 | BREAK = CONTINUE |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1938 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1939 | def RETURN(self, node): |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1940 | if isinstance(self.scope, (ClassScope, ModuleScope)): |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1941 | self.report(messages.ReturnOutsideFunction, node) |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1942 | return |
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1943 | |
3889
9357550095a1
Fixed an issue in the pyflakes checker module (taken from Github).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3670
diff
changeset
|
1944 | if ( |
9357550095a1
Fixed an issue in the pyflakes checker module (taken from Github).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3670
diff
changeset
|
1945 | node.value and |
9357550095a1
Fixed an issue in the pyflakes checker module (taken from Github).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3670
diff
changeset
|
1946 | hasattr(self.scope, 'returnValue') and |
9357550095a1
Fixed an issue in the pyflakes checker module (taken from Github).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3670
diff
changeset
|
1947 | not self.scope.returnValue |
9357550095a1
Fixed an issue in the pyflakes checker module (taken from Github).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3670
diff
changeset
|
1948 | ): |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1949 | self.scope.returnValue = node.value |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1950 | self.handleNode(node.value, node) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1951 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1952 | def YIELD(self, node): |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1953 | if isinstance(self.scope, (ClassScope, ModuleScope)): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1954 | self.report(messages.YieldOutsideFunction, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1955 | return |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1956 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1957 | self.scope.isGenerator = True |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1958 | self.handleNode(node.value, node) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1959 | |
4502
76f2b46437a6
Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4465
diff
changeset
|
1960 | AWAIT = YIELDFROM = YIELD |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1961 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1962 | def FUNCTIONDEF(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1963 | for deco in node.decorator_list: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1964 | self.handleNode(deco, node) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1965 | self.LAMBDA(node) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1966 | self.addBinding(node, FunctionDefinition(node.name, node)) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1967 | # doctest does not process doctest within a doctest, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1968 | # or in nested functions. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1969 | if (self.withDoctest and |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1970 | not self._in_doctest() and |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
1971 | not isinstance(self.scope, FunctionScope)): |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
1972 | self.deferFunction(lambda: self.handleDoctests(node)) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1973 | |
4465
2fbb5bdb8ddf
Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
1974 | ASYNCFUNCTIONDEF = FUNCTIONDEF |
2fbb5bdb8ddf
Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
1975 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1976 | def LAMBDA(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1977 | args = [] |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1978 | annotations = [] |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1979 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1980 | if PY2: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1981 | def addArgs(arglist): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1982 | for arg in arglist: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1983 | if isinstance(arg, ast.Tuple): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1984 | addArgs(arg.elts) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1985 | else: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1986 | args.append(arg.id) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1987 | addArgs(node.args.args) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1988 | defaults = node.args.defaults |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1989 | else: |
7395
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1990 | if PY38_PLUS: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1991 | for arg in node.args.posonlyargs: |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1992 | args.append(arg.arg) |
dd50d0f4c588
pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
1993 | annotations.append(arg.annotation) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1994 | for arg in node.args.args + node.args.kwonlyargs: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1995 | args.append(arg.arg) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1996 | annotations.append(arg.annotation) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1997 | defaults = node.args.defaults + node.args.kw_defaults |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1998 | |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
1999 | # Only for Python3 FunctionDefs |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2000 | is_py3_func = hasattr(node, 'returns') |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2001 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2002 | for arg_name in ('vararg', 'kwarg'): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2003 | wildcard = getattr(node.args, arg_name) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2004 | if not wildcard: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2005 | continue |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2006 | args.append(wildcard if PY2 else wildcard.arg) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2007 | if is_py3_func: |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2008 | if PY2: # Python 2.7 |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2009 | argannotation = arg_name + 'annotation' |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2010 | annotations.append(getattr(node.args, argannotation)) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2011 | else: # Python >= 3.4 |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2012 | annotations.append(wildcard.annotation) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2013 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2014 | if is_py3_func: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2015 | annotations.append(node.returns) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2016 | |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2017 | if len(set(args)) < len(args): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2018 | for (idx, arg) in enumerate(args): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2019 | if arg in args[:idx]: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2020 | self.report(messages.DuplicateArgument, node, arg) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2021 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2022 | for annotation in annotations: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2023 | self.handleAnnotation(annotation, node) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2024 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2025 | for default in defaults: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2026 | self.handleNode(default, node) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2027 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2028 | def runFunction(): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2029 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2030 | self.pushScope() |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2031 | |
7064
1010f737def2
pyflakes: upgraded to version 2.1.1 plus repository changes to fix some issues (until 2019-07-09).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7060
diff
changeset
|
2032 | self.handleChildren(node, omit=['decorator_list', 'returns']) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2033 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2034 | def checkUnusedAssignments(): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2035 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2036 | Check to see if any assignments have not been used. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2037 | """ |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2038 | for name, binding in self.scope.unusedAssignments(): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2039 | self.report(messages.UnusedVariable, binding.source, name) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2040 | self.deferAssignment(checkUnusedAssignments) |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2041 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2042 | if PY2: |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2043 | def checkReturnWithArgumentInsideGenerator(): |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2044 | """ |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2045 | Check to see if there is any return statement with |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2046 | arguments but the function is a generator. |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2047 | """ |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2048 | if self.scope.isGenerator and self.scope.returnValue: |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2049 | self.report(messages.ReturnWithArgsInsideGenerator, |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2050 | self.scope.returnValue) |
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2051 | self.deferAssignment(checkReturnWithArgumentInsideGenerator) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2052 | self.popScope() |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2053 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2054 | self.deferFunction(runFunction) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2055 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2056 | def ARGUMENTS(self, node): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2057 | self.handleChildren(node, omit=('defaults', 'kw_defaults')) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2058 | if PY2: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2059 | scope_node = self.getScopeNode(node) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2060 | if node.vararg: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2061 | self.addBinding(node, Argument(node.vararg, scope_node)) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2062 | if node.kwarg: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2063 | self.addBinding(node, Argument(node.kwarg, scope_node)) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2064 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2065 | def ARG(self, node): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2066 | self.addBinding(node, Argument(node.arg, self.getScopeNode(node))) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2067 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2068 | def CLASSDEF(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2069 | """ |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2070 | Check names used in a class definition, including its decorators, base |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2071 | classes, and the body of its definition. Additionally, add its name to |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2072 | the current scope. |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2073 | """ |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2074 | for deco in node.decorator_list: |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2075 | self.handleNode(deco, node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2076 | for baseNode in node.bases: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2077 | self.handleNode(baseNode, node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2078 | if not PY2: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2079 | for keywordNode in node.keywords: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2080 | self.handleNode(keywordNode, node) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2081 | self.pushScope(ClassScope) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2082 | # doctest does not process doctest within a doctest |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2083 | # classes within classes are processed. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2084 | if (self.withDoctest and |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2085 | not self._in_doctest() and |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2086 | not isinstance(self.scope, FunctionScope)): |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2087 | self.deferFunction(lambda: self.handleDoctests(node)) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2088 | for stmt in node.body: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2089 | self.handleNode(stmt, node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2090 | self.popScope() |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2091 | self.addBinding(node, ClassDefinition(node.name, node)) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2092 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2093 | def AUGASSIGN(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2094 | self.handleNodeLoad(node.target) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2095 | self.handleNode(node.value, node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2096 | self.handleNode(node.target, node) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2097 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2098 | def TUPLE(self, node): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2099 | if not PY2 and isinstance(node.ctx, ast.Store): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2100 | # Python 3 advanced tuple unpacking: a, *b, c = d. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2101 | # Only one starred expression is allowed, and no more than 1<<8 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2102 | # assignments are allowed before a stared expression. There is |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2103 | # also a limit of 1<<24 expressions after the starred expression, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2104 | # which is impossible to test due to memory restrictions, but we |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2105 | # add it here anyway |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2106 | has_starred = False |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2107 | star_loc = -1 |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2108 | for i, n in enumerate(node.elts): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2109 | if isinstance(n, ast.Starred): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2110 | if has_starred: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2111 | self.report(messages.TwoStarredExpressions, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2112 | # The SyntaxError doesn't distinguish two from more |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2113 | # than two. |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2114 | break |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2115 | has_starred = True |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2116 | star_loc = i |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2117 | if star_loc >= 1 << 8 or len(node.elts) - star_loc - 1 >= 1 << 24: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2118 | self.report(messages.TooManyExpressionsInStarredAssignment, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2119 | self.handleChildren(node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2120 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2121 | LIST = TUPLE |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2122 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2123 | def IMPORT(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2124 | for alias in node.names: |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2125 | if '.' in alias.name and not alias.asname: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2126 | importation = SubmoduleImportation(alias.name, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2127 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2128 | name = alias.asname or alias.name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2129 | importation = Importation(name, node, alias.name) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2130 | self.addBinding(node, importation) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2131 | |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2132 | def IMPORTFROM(self, node): |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2133 | if node.module == '__future__': |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2134 | if not self.futuresAllowed: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2135 | self.report(messages.LateFutureImport, |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2136 | node, [n.name for n in node.names]) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2137 | else: |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2138 | self.futuresAllowed = False |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2139 | |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2140 | module = ('.' * node.level) + (node.module or '') |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2141 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2142 | for alias in node.names: |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2143 | name = alias.asname or alias.name |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2144 | if node.module == '__future__': |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2145 | importation = FutureImportation(name, node, self.scope) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2146 | if alias.name not in __future__.all_feature_names: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2147 | self.report(messages.FutureFeatureNotDefined, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2148 | node, alias.name) |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2149 | if alias.name == 'annotations': |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2150 | self.annotationsFutureEnabled = True |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2151 | elif alias.name == '*': |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2152 | # Only Python 2, local import * is a SyntaxWarning |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2153 | if not PY2 and not isinstance(self.scope, ModuleScope): |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2154 | self.report(messages.ImportStarNotPermitted, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2155 | node, module) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2156 | continue |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2157 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2158 | self.scope.importStarred = True |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2159 | self.report(messages.ImportStarUsed, node, module) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2160 | importation = StarImportation(module, node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2161 | else: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2162 | importation = ImportationFrom(name, node, |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2163 | module, alias.name) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2164 | self.addBinding(node, importation) |
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2165 | |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2166 | def TRY(self, node): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2167 | handler_names = [] |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2168 | # List the exception handlers |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2169 | for i, handler in enumerate(node.handlers): |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2170 | if isinstance(handler.type, ast.Tuple): |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2171 | for exc_type in handler.type.elts: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2172 | handler_names.append(getNodeName(exc_type)) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2173 | elif handler.type: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2174 | handler_names.append(getNodeName(handler.type)) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2175 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2176 | if handler.type is None and i < len(node.handlers) - 1: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2177 | self.report(messages.DefaultExceptNotLast, handler) |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2178 | # Memorize the except handlers and process the body |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2179 | self.exceptHandlers.append(handler_names) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2180 | for child in node.body: |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2181 | self.handleNode(child, node) |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2182 | self.exceptHandlers.pop() |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2183 | # Process the other nodes: "except:", "else:", "finally:" |
3544
431c842fd09a
updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3456
diff
changeset
|
2184 | self.handleChildren(node, omit='body') |
3177
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2185 | |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2186 | TRYEXCEPT = TRY |
5af61402d74d
Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
3159
diff
changeset
|
2187 | |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2188 | def EXCEPTHANDLER(self, node): |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2189 | if PY2 or node.name is None: |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2190 | self.handleChildren(node) |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2191 | return |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2192 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2193 | # If the name already exists in the scope, modify state of existing |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2194 | # binding. |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2195 | if node.name in self.scope: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2196 | self.handleNodeStore(node) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2197 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2198 | # 3.x: the name of the exception, which is not a Name node, but a |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2199 | # simple string, creates a local that is only bound within the scope of |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2200 | # the except: block. As such, temporarily remove the existing binding |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2201 | # to more accurately determine if the name is used in the except: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2202 | # block. |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2203 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2204 | try: |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2205 | prev_definition = self.scope.pop(node.name) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2206 | except KeyError: |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2207 | prev_definition = None |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2208 | |
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2209 | self.handleNodeStore(node) |
2571
e6bb19eb87ea
Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
2210 | self.handleChildren(node) |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2211 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2212 | # See discussion on https://github.com/PyCQA/pyflakes/pull/59 |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2213 | |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2214 | # We're removing the local name since it's being unbound after leaving |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2215 | # the except: block and it's always unbound if the except: block is |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2216 | # never entered. This will cause an "undefined name" error raised if |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2217 | # the checked code tries to use the name afterwards. |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2218 | # |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2219 | # Unless it's been removed already. Then do nothing. |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2220 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2221 | try: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2222 | binding = self.scope.pop(node.name) |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2223 | except KeyError: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2224 | pass |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2225 | else: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2226 | if not binding.used: |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2227 | self.report(messages.UnusedVariable, node, node.name) |
5067
e2f171f08af8
Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5065
diff
changeset
|
2228 | |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2229 | # Restore. |
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2230 | if prev_definition: |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2231 | self.scope[node.name] = prev_definition |
4555
861e1741985c
Adjustments to future imports for Python 2 compatibility.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
4502
diff
changeset
|
2232 | |
5510
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2233 | def ANNASSIGN(self, node): |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2234 | if node.value: |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2235 | # Only bind the *targets* if the assignment has a value. |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2236 | # Otherwise it's not really ast.Store and shouldn't silence |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2237 | # UndefinedLocal warnings. |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2238 | self.handleNode(node.target, node) |
6353
6a0f3abd6878
upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6048
diff
changeset
|
2239 | self.handleAnnotation(node.annotation, node) |
5510
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2240 | if node.value: |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2241 | # If the assignment has value, handle the *value* now. |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2242 | self.handleNode(node.value, node) |
cdcd0cd34e79
Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5389
diff
changeset
|
2243 | |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2244 | def COMPARE(self, node): |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2245 | left = node.left |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2246 | for op, right in zip(node.ops, node.comparators): |
7617
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
2247 | if ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
2248 | isinstance(op, (ast.Is, ast.IsNot)) and ( |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
2249 | _is_const_non_singleton(left) or |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
2250 | _is_const_non_singleton(right) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
2251 | ) |
a0e162a50ad7
Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7395
diff
changeset
|
2252 | ): |
6742
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2253 | self.report(messages.IsLiteral, node) |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2254 | left = right |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2255 | |
7cb30f7f94f6
Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
6645
diff
changeset
|
2256 | self.handleChildren(node) |