src/eric7/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py

Mon, 22 Apr 2024 18:23:20 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 22 Apr 2024 18:23:20 +0200
branch
eric7
changeset 10690
fab36645aa7d
parent 10508
a20222f2d8a2
child 11090
f5f5f5803935
permissions
-rw-r--r--

Changed the source code and the source code documentation to improve the indication of unused method/function arguments.

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
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10164
diff changeset
3 # Copyright (c) 2010 - 2024 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__
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
15 import builtins
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
16 import ast
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
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
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
25 import warnings
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
26
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
27 from pyflakes 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
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
29 PYPY = hasattr(sys, 'pypy_version_info')
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
30
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
31 builtin_vars = dir(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
32
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
33 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
34
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
35
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
36 def getAlternatives(n):
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
37 if isinstance(n, ast.If):
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38 return [n.body]
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
39 elif isinstance(n, ast.Try):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
40 return [n.body + n.orelse] + [[hdl] for hdl in n.handlers]
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
41 elif sys.version_info >= (3, 10) and isinstance(n, ast.Match):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
42 return [mc.body for mc in n.cases]
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
43
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
44
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
45 FOR_TYPES = (ast.For, ast.AsyncFor)
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
46
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
47
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
48 def _is_singleton(node): # type: (ast.AST) -> bool
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
49 return (
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
50 isinstance(node, ast.Constant) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
51 isinstance(node.value, (bool, type(Ellipsis), type(None)))
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
52 )
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
53
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
54
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
55 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
56 return (
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
57 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
58 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
59 )
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
60
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
61
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
62 def _is_constant(node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
63 return isinstance(node, ast.Constant) or _is_tuple_constant(node)
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
64
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
65
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
66 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
67 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
68
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
69
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
70 def _is_name_or_attr(node, name): # type: (ast.AST, str) -> bool
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
71 return (
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
72 (isinstance(node, ast.Name) and node.id == name) or
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
73 (isinstance(node, ast.Attribute) and node.attr == name)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
74 )
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
75
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
76
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
77 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
78 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
79 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
80 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
81 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
82 # 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
83 VALID_CONVERSIONS = frozenset('diouxXeEfFgGcrsa%')
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
84
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
85
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
86 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
87 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
88 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
89 return match
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
90
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
91
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
92 def parse_percent_format(s):
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
93 """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
94
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
95 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
96 """
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
97
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
98 def _parse_inner():
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
99 string_start = 0
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
100 string_end = 0
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
101 in_fmt = False
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
102
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
103 i = 0
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
104 while i < len(s):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
105 if not in_fmt:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
106 try:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
107 i = s.index('%', i)
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
108 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
109 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
110 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
111 else:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
112 string_end = i
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
113 i += 1
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
114 in_fmt = True
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
115 else:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
116 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
117 if key_match:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
118 key = key_match.group(1)
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
119 i = key_match.end()
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
120 else:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
121 key = None
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
122
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
123 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
124 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
125 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
126
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
127 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
128 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
129 i = width_match.end()
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
130
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
131 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
132 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
133 i = precision_match.end()
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
134
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
135 # length modifier is ignored
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
136 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
137
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
138 try:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
139 conversion = s[i]
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
140 except IndexError:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
141 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
142 i += 1
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
143
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
144 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
145 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
146
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
147 in_fmt = False
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
148 string_start = i
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
149
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
150 if in_fmt:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
151 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
152
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
153 return tuple(_parse_inner())
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
154
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
155
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
156 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
157 """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
158
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
159 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
160 # 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
161 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
162 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
163 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
164 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
165 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
166 else:
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
167 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
168 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
169
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
170 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
171 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
172 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
173
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
174
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
175 def counter(items):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
176 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
177 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
178 does not have Counter in collections.
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
179 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
180 results = {}
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
181 for item in items:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
182 results[item] = results.get(item, 0) + 1
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
183 return results
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
184
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
185
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
186 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
187 """
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
188 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
189 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
190
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
191 :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
192 :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
193 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
194 further parsing
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
195 :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
196 """
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
197 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
198 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
199 continue
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
200 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
201 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
202 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
203 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
204 for item in field:
8682
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
205 if isinstance(item, ast.AST):
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
206 yield item
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
207
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
208
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
209 def convert_to_value(item):
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
210 if isinstance(item, ast.Constant):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
211 return item.value
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
212 elif isinstance(item, ast.Tuple):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
213 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
214 elif isinstance(item, ast.Name):
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
215 return VariableKey(item=item)
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
216 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
217 return UnhandledKeyType()
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
218
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
219
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
220 def is_notimplemented_name_node(node):
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
221 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
222
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
223
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
224 class Binding:
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
225 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
226 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
227
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
228 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
229 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
230 is checked with stricter rules.
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
231
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
232 @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
233 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
234 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
235
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
236 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
237 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
238 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
239 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
240
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
241 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
242 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
243
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
244 def __repr__(self):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
245 return '<{} object {!r} from line {!r} at 0x{:x}>'.format(
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
246 self.__class__.__name__,
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
247 self.name,
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
248 self.source.lineno,
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
249 id(self),
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
250 )
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
251
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
252 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
253 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
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
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
256 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
257 """
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
258 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
259 """
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
260 def redefines(self, other):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
261 return (
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
262 super().redefines(other) or
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
263 (isinstance(other, Assignment) and self.name == other.name)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
264 )
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
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
267 class Builtin(Definition):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
268 """A definition created for all Python builtins."""
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
269
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
270 def __init__(self, name):
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
271 super().__init__(name, None)
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
272
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
273 def __repr__(self):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
274 return '<{} object {!r} at 0x{:x}>'.format(
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
275 self.__class__.__name__,
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
276 self.name,
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
277 id(self)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
278 )
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
279
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
280
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
281 class UnhandledKeyType:
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
282 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
283 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
284 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
285
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
286
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
287 class VariableKey:
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
288 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
289 A dictionary key which is a variable.
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
290
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
291 @ivar item: The variable AST object.
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 def __init__(self, item):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
294 self.name = item.id
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
295
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
296 def __eq__(self, compare):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
297 return (
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
298 compare.__class__ == self.__class__ and
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
299 compare.name == self.name
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
300 )
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
301
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
302 def __hash__(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
303 return hash(self.name)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
304
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
305
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
306 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
307 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
308 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
309
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
310 @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
311 possibly including multiple dotted components.
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
312 @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
313 """
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
314
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
315 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
316 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
317 self.redefined = []
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
318 super().__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
319
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
320 def redefines(self, other):
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
321 if isinstance(other, SubmoduleImportation):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
322 # See note in SubmoduleImportation about RedefinedWhileUnused
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
323 return self.fullName == other.fullName
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
324 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
325
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
326 def _has_alias(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
327 """Return whether importation needs an as clause."""
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
328 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
329
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
330 @property
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
331 def source_statement(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
332 """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
333 if self._has_alias():
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
334 return f'import {self.fullName} as {self.name}'
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
335 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
336 return 'import %s' % self.fullName
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
337
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
338 def __str__(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
339 """Return import full name with alias."""
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
340 if self._has_alias():
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
341 return self.fullName + ' as ' + self.name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
342 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
343 return self.fullName
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
344
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
345
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
346 class SubmoduleImportation(Importation):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
347 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
348 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
349
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
350 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
351 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
352 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
353
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
354 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
355
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
356 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
357 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
358
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
359 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
360 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
361 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
362
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
363 def __init__(self, name, source):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
364 # 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
365 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
366 package_name = name.split('.')[0]
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
367 super().__init__(package_name, source)
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
368 self.fullName = name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
369
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
370 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
371 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
372 return self.fullName == other.fullName
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
373 return super().redefines(other)
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
374
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
375 def __str__(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
376 return self.fullName
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
377
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
378 @property
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
379 def source_statement(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
380 return 'import ' + self.fullName
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
381
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
382
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
383 class ImportationFrom(Importation):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
384
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
385 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
386 self.module = module
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
387 self.real_name = real_name or name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
388
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
389 if module.endswith('.'):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
390 full_name = module + self.real_name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
391 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
392 full_name = module + '.' + self.real_name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
393
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
394 super().__init__(name, source, full_name)
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
395
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
396 def __str__(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
397 """Return import full name with alias."""
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
398 if self.real_name != self.name:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
399 return self.fullName + ' as ' + self.name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
400 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
401 return self.fullName
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
402
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
403 @property
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
404 def source_statement(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
405 if self.real_name != self.name:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
406 return f'from {self.module} import {self.real_name} as {self.name}'
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
407 else:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
408 return f'from {self.module} import {self.name}'
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
409
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
410
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
411 class StarImportation(Importation):
5510
cdcd0cd34e79 Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5389
diff changeset
412 """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
413
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
414 def __init__(self, name, source):
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
415 super().__init__('*', source)
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
416 # 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
417 # 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
418 self.name = name + '.*'
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
419 self.fullName = name
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 @property
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
422 def source_statement(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
423 return 'from ' + self.fullName + ' import *'
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 def __str__(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
426 # 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
427 if self.fullName.endswith('.'):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
428 return self.source_statement
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
429 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
430 return self.name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
431
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
432
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
433 class FutureImportation(ImportationFrom):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
434 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
435 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
436
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
437 `__future__` imports are implicitly used.
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
438 """
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
439
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
440 def __init__(self, name, source, scope):
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
441 super().__init__(name, source, '__future__')
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
442 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
443
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
444
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
445 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
446 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
447 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
448 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
449
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
450
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
451 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
452 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
453 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
454
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
455 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
456 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
457 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
458 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
459
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
460
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
461 class NamedExprAssignment(Assignment):
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
462 """
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
463 Represents binding a name with an assignment expression.
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
464 """
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
465
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
466
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
467 class Annotation(Binding):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
468 """
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
469 Represents binding a name to a type without an associated value.
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
470
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
471 As long as this name is not assigned a value in another binding, it is considered
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
472 undefined for most purposes. One notable exception is using the name as a type
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
473 annotation.
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
474 """
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
475
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
476 def redefines(self, other):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
477 """An Annotation doesn't define any name, so it cannot redefine one."""
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
478 return False
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
479
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
480
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
481 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
482 pass
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
483
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
484
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
485 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
486 pass
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
487
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
488
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
489 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
490 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
491 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
492 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
493 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
494
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
495 The only recognized C{__all__} assignment via list/tuple concatenation is in the
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
496 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
497
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
498 __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
499
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
500 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
501 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
502 """
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
503
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
504 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
505 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
506 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
507 else:
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
508 self.names = []
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
509
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
510 def _add_to_names(container):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
511 for node in container.elts:
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
512 if isinstance(node, ast.Constant) and isinstance(node.value, str):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
513 self.names.append(node.value)
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
514
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
515 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
516 _add_to_names(source.value)
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
517 # If concatenating lists or tuples
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
518 elif isinstance(source.value, ast.BinOp):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
519 currentValue = source.value
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
520 while isinstance(currentValue.right, (ast.List, ast.Tuple)):
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
521 left = currentValue.left
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
522 right = currentValue.right
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
523 _add_to_names(right)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
524 # If more lists are being added
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
525 if isinstance(left, ast.BinOp):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
526 currentValue = left
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
527 # If just two lists are being added
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
528 elif isinstance(left, (ast.List, ast.Tuple)):
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
529 _add_to_names(left)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
530 # All lists accounted for - done
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
531 break
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
532 # If not list concatenation
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
533 else:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
534 break
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
535 super().__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
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 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
539 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
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 def __repr__(self):
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
542 scope_cls = self.__class__.__name__
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
543 return f'<{scope_cls} at 0x{id(self):x} {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
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 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
547 pass
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
548
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
549
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
550 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
551 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
552 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
553
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
554 @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
555 """
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
556 usesLocals = False
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
557 alwaysUsed = {'__tracebackhide__', '__traceback_info__',
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
558 '__traceback_supplement__'}
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
559
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
560 def __init__(self):
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8208
diff changeset
561 super().__init__()
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
562 # Simplify: manage the special locals as globals
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
563 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
564 self.returnValue = None # First non-empty return
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
565
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
566 def unused_assignments(self):
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
567 """
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
568 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
569 """
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
570 for name, binding in self.items():
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
571 if (not binding.used and
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
572 name != '_' and # see issue #202
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
573 name not in self.globals and
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
574 not self.usesLocals and
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
575 isinstance(binding, Assignment)):
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
576 yield name, binding
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
577
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
578 def unused_annotations(self):
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
579 """
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
580 Return a generator for the annotations which have not been used.
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
581 """
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
582 for name, binding in self.items():
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
583 if not binding.used and isinstance(binding, Annotation):
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
584 yield name, binding
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
585
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
586
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
587 class TypeScope(Scope):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
588 pass
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
589
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
590
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
591 class GeneratorScope(Scope):
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
592 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
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 ModuleScope(Scope):
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
596 """Scope for a module."""
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
597 _futures_allowed = True
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
598 _annotations_future_enabled = False
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
599
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
600
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
601 class DoctestScope(ModuleScope):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
602 """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
603
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
604
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
605 class DetectClassScopedMagic:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
606 names = dir()
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
607
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
608
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
609 # 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
610 # are only present on some platforms.
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
611 _MAGIC_GLOBALS = ['__file__', '__builtins__', '__annotations__', 'WindowsError']
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
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
613
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
614 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
615 # 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
616 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
617 return node.id
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
618 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
619 return node.name
8682
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
620 if hasattr(node, 'rest'): # a MatchMapping node
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
621 return node.rest
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
622
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
623
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
624 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
625
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
626
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
627 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
628 """
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
629 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
630 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
631 type annotation context.
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
632
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
633 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
634 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
635 """
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
636
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
637 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
638 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
639 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
640 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
641 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
642 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
643 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
644 )
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
645
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
646 return False
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
647
8682
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
648 def _module_scope_is_typing(name):
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
649 for scope in reversed(scope_stack):
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
650 if name in scope:
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
651 return (
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
652 isinstance(scope[name], Importation) and
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
653 scope[name].fullName in TYPING_MODULES
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
654 )
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
655
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
656 return False
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
657
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
658 return (
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
659 (
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
660 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
661 _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
662 ) or (
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
663 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
664 isinstance(node.value, ast.Name) and
8682
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
665 _module_scope_is_typing(node.value.id) and
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
666 is_name_match_fn(node.attr)
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
667 )
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
668 )
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
669
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
670
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
671 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
672 """
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
673 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
674 by `typing_attr`.
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 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
677 context.
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 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
680
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
681
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
682 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
683 """
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
684 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
685
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
686 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
687 context.
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
688 """
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
689 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
690
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
691
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
692 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
693 return (
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
694 isinstance(value.source, (ast.FunctionDef, ast.AsyncFunctionDef)) 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
695 any(
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
696 _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
697 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
698 )
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
699 )
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
700
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
701
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
702 class AnnotationState:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
703 NONE = 0
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
704 STRING = 1
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
705 BARE = 2
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
706
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
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 def in_annotation(func):
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
709 @functools.wraps(func)
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
710 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
711 with self._enter_annotation():
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
712 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
713 return in_annotation_func
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
714
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
715
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
716 def in_string_annotation(func):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
717 @functools.wraps(func)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
718 def in_annotation_func(self, *args, **kwargs):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
719 with self._enter_annotation(AnnotationState.STRING):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
720 return func(self, *args, **kwargs)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
721 return in_annotation_func
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
722
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
723
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
724 class Checker:
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
725 """I check the cleanliness and sanity of Python code."""
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
726
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
727 _ast_node_scope = {
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
728 ast.Module: ModuleScope,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
729 ast.ClassDef: ClassScope,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
730 ast.FunctionDef: FunctionScope,
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
731 ast.AsyncFunctionDef: FunctionScope,
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
732 ast.Lambda: FunctionScope,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
733 ast.ListComp: GeneratorScope,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
734 ast.SetComp: GeneratorScope,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
735 ast.GeneratorExp: GeneratorScope,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
736 ast.DictComp: GeneratorScope,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
737 }
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
738
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
739 nodeDepth = 0
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
740 offset = None
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
741 _in_annotation = AnnotationState.NONE
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
742
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
743 builtIns = set(builtin_vars).union(_MAGIC_GLOBALS)
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
744 _customBuiltIns = os.environ.get('PYFLAKES_BUILTINS')
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
745 if _customBuiltIns:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
746 builtIns.update(_customBuiltIns.split(','))
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
747 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
748
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
749 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
750 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
751 self._nodeHandlers = {}
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
752 self._deferred = collections.deque()
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
753 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
754 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
755 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
756 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
757 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
758 self.withDoctest = withDoctest
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
759 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
760 self.root = tree
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
761
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
762 self.scopeStack = []
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
763 try:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
764 scope_tp = Checker._ast_node_scope[type(tree)]
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
765 except KeyError:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
766 raise RuntimeError('No scope implemented for the node %r' % tree)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
767
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
768 with self.in_scope(scope_tp):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
769 for builtin in self.builtIns:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
770 self.addBinding(None, Builtin(builtin))
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
771 self.handleChildren(tree)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
772 self._run_deferred()
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
773
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
774 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
775
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
776 if file_tokens:
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
777 warnings.warn(
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
778 '`file_tokens` will be removed in a future version',
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
779 stacklevel=2,
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
780 )
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
781
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
782 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
783 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
784 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
785
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
786 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
787 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
788 `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
789 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
790 """
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
791 self._deferred.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
792
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
793 def _run_deferred(self):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
794 orig = (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
795
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
796 while self._deferred:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
797 handler, scope, offset = self._deferred.popleft()
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
798 self.scopeStack, self.offset = scope, 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
799 handler()
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
800
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
801 self.scopeStack, self.offset = orig
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
802
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
803 def _in_doctest(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
804 return (len(self.scopeStack) >= 2 and
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
805 isinstance(self.scopeStack[1], DoctestScope))
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
806
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
807 @property
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
808 def futuresAllowed(self):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
809 if not all(isinstance(scope, ModuleScope)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
810 for scope in self.scopeStack):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
811 return False
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
812
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
813 return self.scope._futures_allowed
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
814
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
815 @futuresAllowed.setter
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
816 def futuresAllowed(self, value):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
817 assert value is False
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
818 if isinstance(self.scope, ModuleScope):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
819 self.scope._futures_allowed = False
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
820
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
821 @property
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
822 def annotationsFutureEnabled(self):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
823 scope = self.scopeStack[0]
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
824 if not isinstance(scope, ModuleScope):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
825 return False
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
826 return scope._annotations_future_enabled
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
827
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
828 @annotationsFutureEnabled.setter
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
829 def annotationsFutureEnabled(self, value):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
830 assert value is True
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
831 assert isinstance(self.scope, ModuleScope)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
832 self.scope._annotations_future_enabled = True
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
833
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
834 @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
835 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
836 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
837
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
838 @contextlib.contextmanager
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
839 def in_scope(self, cls):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
840 self.scopeStack.append(cls())
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
841 try:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
842 yield
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
843 finally:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
844 self.deadScopes.append(self.scopeStack.pop())
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
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
846 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
847 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
848 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
849 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
850 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
851 for scope in self.deadScopes:
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
852 # imports in classes are public members
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
853 if isinstance(scope, ClassScope):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
854 continue
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
855
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
856 if isinstance(scope, FunctionScope):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
857 for name, binding in scope.unused_assignments():
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
858 self.report(messages.UnusedVariable, binding.source, name)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
859 for name, binding in scope.unused_annotations():
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
860 self.report(messages.UnusedAnnotation, binding.source, name)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
861
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
862 all_binding = scope.get('__all__')
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
863 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
864 all_binding = None
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
865
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
866 if all_binding:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
867 all_names = set(all_binding.names)
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
868 undefined = [
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
869 name for name in all_binding.names
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
870 if name not in scope
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
871 ]
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
872 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
873 all_names = undefined = []
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
874
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
875 if undefined:
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
876 if not scope.importStarred and \
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
877 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
878 # 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
879 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
880 self.report(messages.UndefinedExport,
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
881 scope['__all__'].source, name)
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
882
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
883 # 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
884 if scope.importStarred:
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
885 from_list = []
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
886 for binding in scope.values():
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
887 if isinstance(binding, StarImportation):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
888 binding.used = all_binding
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
889 from_list.append(binding.fullName)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
890 # 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
891 from_list = ', '.join(sorted(from_list))
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
892 for name in undefined:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
893 self.report(messages.ImportStarUsage,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
894 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
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 # 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
897 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
898 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
899 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
900 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
901 messg = messages.UnusedImport
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
902 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
903 for node in value.redefined:
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
904 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
905 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
906 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
907 continue
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
908 else:
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
909 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
910 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
911
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
912 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
913 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
914
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
915 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
916 # 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
917 while True:
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
918 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
919 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
920 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
921
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
922 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
923 if (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
924 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
925 not (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
926 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
927 hasattr(rnode, '_pyflakes_parent')
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
928 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
929 ):
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
930 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
931 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
932 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
933
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
934 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
935 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
936 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
937 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
938 return self.getCommonAncestor(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
939 lnode._pyflakes_parent,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
940 rnode._pyflakes_parent,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
941 stop,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
942 )
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
943
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
944 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
945 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
946 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
947 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
948 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
949
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
950 def _getAncestor(self, node, ancestor_type):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
951 parent = node
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
952 while True:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
953 if parent is self.root:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
954 return None
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
955 parent = self.getParent(parent)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
956 if isinstance(parent, ancestor_type):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
957 return parent
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
958
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
959 def getScopeNode(self, node):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
960 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
961
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
962 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
963 """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
964 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
965 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
966 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
967 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
968 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
969 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
970 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
971 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
972
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
973 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
974 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
975 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
976
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
977 - `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
978 - `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
979 """
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
980 # 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
981 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
982 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
983 break
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
984 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
985
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
986 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
987 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
988
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
989 parent_stmt = self.getParent(value.source)
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
990 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
991 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
992 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
993
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
994 elif scope is self.scope:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
995 if (
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
996 (not existing.used and value.redefines(existing)) and
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
997 (value.name != '_' or isinstance(existing, Importation)) and
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
998 not is_typing_overload(existing, self.scopeStack)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
999 ):
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1000 self.report(messages.RedefinedWhileUnused,
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1001 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
1002
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1003 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
1004 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
1005
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1006 if value.name in self.scope:
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1007 # 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
1008 value.used = self.scope[value.name].used
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1009
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1010 # don't treat annotations as assignments if there is an existing value
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1011 # in scope
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1012 if value.name not in self.scope or not isinstance(value, Annotation):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1013 cur_scope_pos = -1
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1014 # As per PEP 572, use scope in which outermost generator is defined
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1015 while (
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1016 isinstance(value, NamedExprAssignment) and
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1017 isinstance(self.scopeStack[cur_scope_pos], GeneratorScope)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1018 ):
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1019 cur_scope_pos -= 1
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1020 self.scopeStack[cur_scope_pos][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
1021
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1022 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
1023 # 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
1024 # ast types.
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1025 #
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1026 # 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
1027 # testsuite.
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1028 #
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1029 # 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
1030 # 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
1031 # 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
1032 # needed).
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1033 if os.environ.get('PYFLAKES_ERROR_UNKNOWN'):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1034 raise NotImplementedError(f'Unexpected type: {type(node)}')
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1035 else:
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1036 self.handleChildren(node)
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1037
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1038 def getNodeHandler(self, node_class):
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1039 try:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1040 return self._nodeHandlers[node_class]
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1041 except KeyError:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1042 nodeType = node_class.__name__.upper()
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1043 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
1044 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
1045 )
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1046 return handler
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1047
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
1048 def handleNodeLoad(self, node, 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
1049 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
1050 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
1051 return
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1052
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1053 # only the following can access class scoped variables (since classes
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1054 # aren't really a scope)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1055 # - direct accesses (not within a nested scope)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1056 # - generators
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1057 # - type annotations (for generics, etc.)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1058 can_access_class_vars = None
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1059 importStarred = None
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1060
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1061 # 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
1062 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
1063 if isinstance(scope, ClassScope):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1064 if name == '__class__':
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1065 return
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1066 elif can_access_class_vars is False:
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1067 # 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
1068 # 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
1069 # iteration
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1070 continue
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1071
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1072 binding = scope.get(name, None)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1073 if isinstance(binding, Annotation) and not self._in_postponed_annotation:
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1074 scope[name].used = (self.scope, node)
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1075 continue
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1076
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1077 if name == 'print' and isinstance(binding, Builtin):
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1078 if (isinstance(parent, ast.BinOp) and
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1079 isinstance(parent.op, ast.RShift)):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1080 self.report(messages.InvalidPrintSyntax, node)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1081
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1082 try:
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1083 scope[name].used = (self.scope, node)
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1084
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1085 # 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
1086 # alias of other Importation and the alias
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1087 # 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
1088 n = scope[name]
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1089 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
1090 try:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1091 scope[n.fullName].used = (self.scope, node)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1092 except KeyError:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1093 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
1094 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
1095 pass
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1096 else:
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1097 return
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1098
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1099 importStarred = importStarred or scope.importStarred
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1100
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1101 if can_access_class_vars is not False:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1102 can_access_class_vars = isinstance(
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1103 scope, (TypeScope, GeneratorScope),
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1104 )
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1105
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1106 if importStarred:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1107 from_list = []
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1108
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1109 for scope in self.scopeStack[-1::-1]:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1110 for binding in scope.values():
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1111 if isinstance(binding, StarImportation):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1112 # mark '*' imports as used for each scope
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1113 binding.used = (self.scope, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1114 from_list.append(binding.fullName)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1115
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1116 # 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
1117 from_list = ', '.join(sorted(from_list))
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1118 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
1119 return
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1120
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1121 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
1122 # 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
1123 return
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1124
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1125 if name in DetectClassScopedMagic.names and isinstance(self.scope, ClassScope):
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1126 return
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1127
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1128 # protected with a NameError handler?
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1129 if 'NameError' not in self.exceptHandlers[-1]:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1130 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
1131
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1132 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
1133 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
1134 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
1135 return
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1136 # 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
1137 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
1138 # 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
1139 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
1140 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
1141 continue
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1142 # 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
1143 # 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
1144 # been declared global
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1145 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
1146 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
1147 # 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
1148 self.report(messages.UndefinedLocal,
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1149 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
1150 break
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1151
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1152 parent_stmt = self.getParent(node)
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1153 if isinstance(parent_stmt, ast.AnnAssign) and parent_stmt.value is None:
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1154 binding = Annotation(name, node)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1155 elif 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
1156 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
1157 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
1158 binding = Binding(name, node)
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1159 elif (
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1160 name == '__all__' and
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1161 isinstance(self.scope, ModuleScope) and
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1162 isinstance(
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1163 node._pyflakes_parent,
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1164 (ast.Assign, ast.AugAssign, ast.AnnAssign)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1165 )
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1166 ):
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1167 binding = ExportBinding(name, node._pyflakes_parent, self.scope)
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1168 elif isinstance(parent_stmt, ast.NamedExpr):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1169 binding = NamedExprAssignment(name, 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
1170 else:
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1171 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
1172 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
1173
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1174 def handleNodeDelete(self, node):
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1175
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1176 def on_conditional_branch():
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1177 """
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1178 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
1179 """
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1180 current = getattr(node, '_pyflakes_parent', None)
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1181 while current:
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1182 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
1183 return True
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1184 current = getattr(current, '_pyflakes_parent', None)
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1185 return False
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1186
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1187 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
1188 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
1189 return
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1190
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1191 if on_conditional_branch():
5510
cdcd0cd34e79 Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5389
diff changeset
1192 # 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
1193 # be executed.
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1194 return
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1195
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1196 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
1197 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
1198 else:
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1199 try:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1200 del self.scope[name]
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1201 except KeyError:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1202 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
1203
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1204 @contextlib.contextmanager
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1205 def _enter_annotation(self, ann_type=AnnotationState.BARE):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1206 orig, self._in_annotation = self._in_annotation, ann_type
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1207 try:
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1208 yield
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1209 finally:
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1210 self._in_annotation = orig
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1211
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1212 @property
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1213 def _in_postponed_annotation(self):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1214 return (
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1215 self._in_annotation == AnnotationState.STRING or
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1216 self.annotationsFutureEnabled
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1217 )
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1218
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1219 def handleChildren(self, tree, omit=None):
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1220 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
1221 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
1222
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1223 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
1224 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
1225 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
1226 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
1227 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
1228 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
1229
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1230 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
1231 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1232 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
1233 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
1234 """
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1235 return (
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1236 isinstance(node, ast.Expr) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1237 isinstance(node.value, ast.Constant) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1238 isinstance(node.value.value, str)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1239 )
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
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1241 def getDocstring(self, node):
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1242 if (
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1243 isinstance(node, ast.Expr) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1244 isinstance(node.value, ast.Constant) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1245 isinstance(node.value.value, str)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1246 ):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1247 return node.value.value, node.lineno - 1
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1248 else:
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1249 return None, None
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1250
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1251 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
1252 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
1253 return
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1254 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
1255 node.lineno += self.offset[0]
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1256 node.col_offset += self.offset[1]
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1257 if (
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1258 self.futuresAllowed and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1259 self.nodeDepth == 0 and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1260 not isinstance(node, ast.ImportFrom) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1261 not self.isDocstring(node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1262 ):
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1263 self.futuresAllowed = False
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1264 self.nodeDepth += 1
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1265 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
1266 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
1267 try:
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1268 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
1269 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
1270 finally:
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1271 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
1272
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1273 _getDoctestExamples = doctest.DocTestParser().get_examples
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1274
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1275 def handleDoctests(self, node):
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1276 try:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1277 (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
1278 examples = docstring and self._getDoctestExamples(docstring)
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1279 except (ValueError, IndexError):
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1280 # 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
1281 # leading whitespace: ...
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1282 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
1283 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
1284 return
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1285
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1286 # Place doctest in module scope
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1287 saved_stack = self.scopeStack
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1288 self.scopeStack = [self.scopeStack[0]]
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1289 node_offset = self.offset or (0, 0)
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1290 with self.in_scope(DoctestScope):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1291 if '_' not in self.scopeStack[0]:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1292 self.addBinding(None, Builtin('_'))
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1293 for example in examples:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1294 try:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1295 tree = ast.parse(example.source, "<doctest>")
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1296 except SyntaxError as e:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1297 position = (node_lineno + example.lineno + e.lineno,
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1298 example.indent + 4 + (e.offset or 0))
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1299 self.report(messages.DoctestSyntaxError, node, position)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1300 else:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1301 self.offset = (node_offset[0] + node_lineno + example.lineno,
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1302 node_offset[1] + example.indent + 4)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1303 self.handleChildren(tree)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1304 self.offset = node_offset
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1305 self.scopeStack = saved_stack
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1306
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1307 @in_string_annotation
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1308 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
1309 try:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1310 tree = ast.parse(s)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1311 except SyntaxError:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1312 self.report(err, node, s)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1313 return
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1314
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1315 body = tree.body
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1316 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
1317 self.report(err, node, s)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1318 return
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1319
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1320 parsed_annotation = tree.body[0].value
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1321 for descendant in ast.walk(parsed_annotation):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1322 if (
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1323 'lineno' in descendant._attributes and
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1324 'col_offset' in descendant._attributes
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1325 ):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1326 descendant.lineno = ref_lineno
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1327 descendant.col_offset = ref_col_offset
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1328
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1329 self.handleNode(parsed_annotation, node)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1330
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1331 def handle_annotation_always_deferred(self, annotation, parent):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1332 fn = in_annotation(Checker.handleNode)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1333 self.deferFunction(lambda: fn(self, annotation, parent))
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1334
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1335 @in_annotation
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1336 def handleAnnotation(self, annotation, node):
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1337 if (
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1338 isinstance(annotation, ast.Constant) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1339 isinstance(annotation.value, str)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1340 ):
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1341 # Defer handling forward annotation.
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1342 self.deferFunction(functools.partial(
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1343 self.handleStringAnnotation,
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1344 annotation.value,
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1345 node,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1346 annotation.lineno,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1347 annotation.col_offset,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1348 messages.ForwardAnnotationSyntaxError,
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1349 ))
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1350 elif self.annotationsFutureEnabled:
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1351 self.handle_annotation_always_deferred(annotation, node)
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1352 else:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1353 self.handleNode(annotation, node)
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1354
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1355 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
1356 pass
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1357
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1358 # "stmt" type nodes
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1359 DELETE = FOR = ASYNCFOR = WHILE = WITH = WITHITEM = ASYNCWITH = \
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1360 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
1361
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1362 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
1363
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1364 # "expr" type nodes
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1365 BOOLOP = UNARYOP = SET = ATTRIBUTE = STARRED = NAMECONSTANT = \
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1366 NAMEDEXPR = handleChildren
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1367
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1368 def SUBSCRIPT(self, node):
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1369 if _is_name_or_attr(node.value, 'Literal'):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1370 with self._enter_annotation(AnnotationState.NONE):
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1371 self.handleChildren(node)
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1372 elif _is_name_or_attr(node.value, 'Annotated'):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1373 self.handleNode(node.value, node)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1374
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1375 # py39+
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1376 if isinstance(node.slice, ast.Tuple):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1377 slice_tuple = node.slice
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1378 # <py39
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1379 elif (
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1380 isinstance(node.slice, ast.Index) and
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1381 isinstance(node.slice.value, ast.Tuple)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1382 ):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1383 slice_tuple = node.slice.value
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1384 else:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1385 slice_tuple = None
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1386
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1387 # not a multi-arg `Annotated`
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1388 if slice_tuple is None or len(slice_tuple.elts) < 2:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1389 self.handleNode(node.slice, node)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1390 else:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1391 # the first argument is the type
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1392 self.handleNode(slice_tuple.elts[0], node)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1393 # the rest of the arguments are not
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1394 with self._enter_annotation(AnnotationState.NONE):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1395 for arg in slice_tuple.elts[1:]:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1396 self.handleNode(arg, node)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1397
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1398 self.handleNode(node.ctx, node)
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1399 else:
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1400 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
1401 with self._enter_annotation():
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1402 self.handleChildren(node)
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1403 else:
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1404 self.handleChildren(node)
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1405
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1406 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
1407 try:
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1408 placeholders = tuple(parse_format_string(node.func.value.value))
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1409 except ValueError as e:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1410 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
1411 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1412
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1413 auto = None
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1414 next_auto = 0
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1415
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1416 placeholder_positional = set()
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1417 placeholder_named = set()
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1418
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1419 def _add_key(fmtkey):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1420 """Returns True if there is an error which should early-exit"""
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1421 nonlocal auto, next_auto
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1422
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1423 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
1424 return False
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1425
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1426 # 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
1427 fmtkey, _, _ = fmtkey.partition('.')
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1428 fmtkey, _, _ = fmtkey.partition('[')
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1429
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1430 try:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1431 fmtkey = int(fmtkey)
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1432 except ValueError:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1433 pass
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1434 else: # fmtkey was an integer
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1435 if auto is True:
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1436 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
1437 return True
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1438 else:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1439 auto = False
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1440
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1441 if fmtkey == '':
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1442 if auto is False:
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1443 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
1444 return True
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1445 else:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1446 auto = True
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1447
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1448 fmtkey = next_auto
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1449 next_auto += 1
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1450
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1451 if isinstance(fmtkey, int):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1452 placeholder_positional.add(fmtkey)
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1453 else:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1454 placeholder_named.add(fmtkey)
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1455
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1456 return False
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1457
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1458 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
1459 if _add_key(fmtkey):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1460 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1461
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1462 # 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
1463 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
1464 try:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1465 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
1466 except ValueError as e:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1467 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
1468 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1469
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1470 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
1471 # can't recurse again
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1472 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
1473 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1474 messages.StringDotFormatInvalidFormat,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1475 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1476 'Max string recursion exceeded',
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1477 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1478 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1479 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
1480 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1481
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1482 # 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
1483 if (
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1484 # *args
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1485 any(isinstance(arg, ast.Starred) for arg in node.args) or
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1486 # **kwargs
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1487 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
1488 ):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1489 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1490
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1491 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
1492 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
1493
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1494 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
1495 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
1496
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1497 missing_arguments = (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1498 (placeholder_positional | placeholder_named) -
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1499 (substitution_positional | substitution_named)
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1500 )
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 if extra_positional:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1503 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1504 messages.StringDotFormatExtraPositionalArguments,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1505 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1506 ', '.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
1507 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1508 if extra_named:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1509 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1510 messages.StringDotFormatExtraNamedArguments,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1511 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1512 ', '.join(sorted(extra_named)),
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1513 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1514 if missing_arguments:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1515 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1516 messages.StringDotFormatMissingArgument,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1517 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1518 ', '.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
1519 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1520
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1521 def CALL(self, node):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1522 if (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1523 isinstance(node.func, ast.Attribute) and
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1524 isinstance(node.func.value, ast.Constant) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1525 isinstance(node.func.value.value, str) and
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1526 node.func.attr == 'format'
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1527 ):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1528 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
1529
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1530 omit = []
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1531 annotated = []
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1532 not_annotated = []
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1533
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1534 if (
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1535 _is_typing(node.func, 'cast', self.scopeStack) and
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1536 len(node.args) >= 1
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1537 ):
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1538 with self._enter_annotation():
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1539 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
1540
8208
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1541 elif _is_typing(node.func, 'TypeVar', self.scopeStack):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1542
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1543 # TypeVar("T", "int", "str")
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1544 omit += ["args"]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1545 annotated += [arg for arg in node.args[1:]]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1546
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1547 # TypeVar("T", bound="str")
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1548 omit += ["keywords"]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1549 annotated += [k.value for k in node.keywords if k.arg == "bound"]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1550 not_annotated += [
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1551 (k, ["value"] if k.arg == "bound" else None)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1552 for k in node.keywords
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1553 ]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1554
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1555 elif _is_typing(node.func, "TypedDict", self.scopeStack):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1556 # TypedDict("a", {"a": int})
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1557 if len(node.args) > 1 and isinstance(node.args[1], ast.Dict):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1558 omit += ["args"]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1559 annotated += node.args[1].values
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1560 not_annotated += [
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1561 (arg, ["values"] if i == 1 else None)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1562 for i, arg in enumerate(node.args)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1563 ]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1564
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1565 # TypedDict("a", a=int)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1566 omit += ["keywords"]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1567 annotated += [k.value for k in node.keywords]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1568 not_annotated += [(k, ["value"]) for k in node.keywords]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1569
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1570 elif _is_typing(node.func, "NamedTuple", self.scopeStack):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1571 # NamedTuple("a", [("a", int)])
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1572 if (
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1573 len(node.args) > 1 and
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1574 isinstance(node.args[1], (ast.Tuple, ast.List)) and
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1575 all(isinstance(x, (ast.Tuple, ast.List)) and
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1576 len(x.elts) == 2 for x in node.args[1].elts)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1577 ):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1578 omit += ["args"]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1579 annotated += [elt.elts[1] for elt in node.args[1].elts]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1580 not_annotated += [(elt.elts[0], None) for elt in node.args[1].elts]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1581 not_annotated += [
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1582 (arg, ["elts"] if i == 1 else None)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1583 for i, arg in enumerate(node.args)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1584 ]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1585 not_annotated += [(elt, "elts") for elt in node.args[1].elts]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1586
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1587 # NamedTuple("a", a=int)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1588 omit += ["keywords"]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1589 annotated += [k.value for k in node.keywords]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1590 not_annotated += [(k, ["value"]) for k in node.keywords]
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1591
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1592 if omit:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1593 with self._enter_annotation(AnnotationState.NONE):
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1594 for na_node, na_omit in not_annotated:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1595 self.handleChildren(na_node, omit=na_omit)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1596 self.handleChildren(node, omit=omit)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1597
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1598 with self._enter_annotation():
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1599 for annotated_node in annotated:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1600 self.handleNode(annotated_node, node)
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1601 else:
37836fa8e4ea Updated pyflakes to 2.3.1 and pycodestyle to 2.7.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 7960
diff changeset
1602 self.handleChildren(node)
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1603
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1604 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
1605 try:
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1606 placeholders = parse_percent_format(node.left.value)
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1607 except ValueError:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1608 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1609 messages.PercentFormatInvalidFormat,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1610 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1611 'incomplete format',
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1612 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1613 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1614
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1615 named = set()
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1616 positional_count = 0
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1617 positional = None
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1618 for _, placeholder in placeholders:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1619 if placeholder is None:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1620 continue
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1621 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
1622
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1623 if conversion == '%':
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1624 continue
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 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
1627 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1628 messages.PercentFormatUnsupportedFormatCharacter,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1629 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1630 conversion,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1631 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1632
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1633 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
1634 positional = name is None
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1635
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1636 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
1637 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
1638 if not positional:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1639 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1640 messages.PercentFormatStarRequiresSequence,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1641 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1642 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1643 else:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1644 positional_count += 1
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1645
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1646 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
1647 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1648 messages.PercentFormatMixedPositionalAndNamed,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1649 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1650 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1651 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1652 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
1653 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1654 messages.PercentFormatMixedPositionalAndNamed,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1655 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1656 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1657 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1658
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1659 if positional:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1660 positional_count += 1
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1661 else:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1662 named.add(name)
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1663
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1664 if (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1665 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
1666 # 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
1667 not any(
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1668 isinstance(elt, ast.Starred)
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1669 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
1670 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1671 ):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1672 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
1673 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
1674 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1675 messages.PercentFormatPositionalCountMismatch,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1676 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1677 positional_count,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1678 substitution_count,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1679 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1680 elif not positional:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1681 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
1682
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1683 if (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1684 isinstance(node.right, ast.Dict) and
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1685 all(
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1686 isinstance(k, ast.Constant) and isinstance(k.value, str)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1687 for k in node.right.keys
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1688 )
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1689 ):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1690 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
1691 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
1692 return
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1693
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1694 substitution_keys = {k.value for k in node.right.keys}
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1695 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
1696 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
1697 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
1698 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1699 messages.PercentFormatExtraNamedArguments,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1700 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1701 ', '.join(sorted(extra_keys)),
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1702 )
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1703 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
1704 self.report(
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1705 messages.PercentFormatMissingArgument,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1706 node,
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1707 ', '.join(sorted(missing_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
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1710 def BINOP(self, node):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1711 if (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1712 isinstance(node.op, ast.Mod) and
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1713 isinstance(node.left, ast.Constant) and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1714 isinstance(node.left.value, str)
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1715 ):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1716 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
1717 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
1718
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1719 def CONSTANT(self, node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1720 if isinstance(node.value, str) and self._in_annotation:
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1721 fn = functools.partial(
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1722 self.handleStringAnnotation,
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1723 node.value,
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1724 node,
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1725 node.lineno,
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1726 node.col_offset,
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1727 messages.ForwardAnnotationSyntaxError,
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1728 )
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1729 self.deferFunction(fn)
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1730
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1731 # "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
1732 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
1733
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1734 # 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
1735 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
1736
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1737 # 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
1738 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
1739 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
1740 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
1741 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
1742
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1743 def RAISE(self, node):
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1744 self.handleChildren(node)
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1745
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1746 arg = node.exc
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1747
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1748 if isinstance(arg, ast.Call):
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1749 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
1750 # Handle "raise NotImplemented(...)"
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1751 self.report(messages.RaiseNotImplemented, node)
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1752 elif is_notimplemented_name_node(arg):
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1753 # Handle "raise NotImplemented"
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1754 self.report(messages.RaiseNotImplemented, node)
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1755
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1756 # additional node types
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1757 COMPREHENSION = KEYWORD = FORMATTEDVALUE = handleChildren
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1758
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1759 _in_fstring = False
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1760
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1761 def JOINEDSTR(self, node):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1762 if (
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1763 # 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
1764 # placeholders
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1765 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
1766 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
1767 ):
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1768 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
1769
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1770 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
1771 try:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1772 self.handleChildren(node)
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1773 finally:
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1774 self._in_fstring = orig
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1775
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1776 def DICT(self, node):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1777 # 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
1778 # 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
1779 # unexpected behaviour so we'll not complain.
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1780 keys = [
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1781 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
1782 ]
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1783
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1784 key_counts = counter(keys)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1785 duplicate_keys = [
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1786 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
1787 if count > 1
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1788 ]
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1789
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1790 for key in duplicate_keys:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1791 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
1792
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1793 values = counter(
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1794 convert_to_value(node.values[index])
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1795 for index in key_indices
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1796 )
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1797 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
1798 for key_index in key_indices:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1799 key_node = node.keys[key_index]
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1800 if isinstance(key, VariableKey):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1801 self.report(messages.MultiValueRepeatedKeyVariable,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1802 key_node,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1803 key.name)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1804 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1805 self.report(
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1806 messages.MultiValueRepeatedKeyLiteral,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1807 key_node,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1808 key,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1809 )
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1810 self.handleChildren(node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1811
7617
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1812 def IF(self, node):
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1813 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
1814 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
1815 self.handleChildren(node)
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1816
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1817 IFEXP = IF
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
1818
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1819 def ASSERT(self, node):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1820 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
1821 self.report(messages.AssertTuple, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1822 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
1823
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1824 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
1825 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1826 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
1827 """
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1828 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
1829 global_scope = self.scopeStack[global_scope_index]
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1830
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1831 # Ignore 'global' statement in global scope.
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1832 if self.scope is not global_scope:
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1833
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1834 # 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
1835 for node_name in node.names:
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1836 node_value = Assignment(node_name, node)
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1837
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1838 # 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
1839 # 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
1840 # 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
1841 self.messages = [
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1842 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
1843 isinstance(m, messages.UndefinedName) or
39f27a2a2ea3 Little fix in the pyflakes checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
1844 m.message_args[0] != node_name]
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1845
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1846 # 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
1847 global_scope.setdefault(node_name, node_value)
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1848
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1849 # 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
1850 node_value.used = (global_scope, node)
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1851 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
1852 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
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 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
1855
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1856 def GENERATOREXP(self, node):
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1857 with self.in_scope(GeneratorScope):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1858 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
1859
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1860 LISTCOMP = 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
1861
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1862 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
1863 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1864 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
1865 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1866 # 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
1867 if isinstance(node.ctx, ast.Load):
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
1868 self.handleNodeLoad(node, self.getParent(node))
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1869 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
1870 isinstance(node._pyflakes_parent, ast.Call)):
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1871 # 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
1872 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
1873 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
1874 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
1875 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
1876 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
1877 else:
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1878 # Unknown context
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1879 raise RuntimeError(f"Got impossible expression context: {node.ctx!r}")
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1880
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1881 def CONTINUE(self, node):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1882 # 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
1883 # 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
1884 # the top module scope (not OK)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1885 n = node
7395
dd50d0f4c588 pyflakes: updated to repository as of 2020-02-03.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
1886 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
1887 n, n_child = n._pyflakes_parent, n
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1888 if isinstance(n, (ast.While, ast.For, ast.AsyncFor)):
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1889 # 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
1890 if n_child not in n.orelse:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1891 return
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1892 if isinstance(n, (ast.FunctionDef, ast.ClassDef)):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1893 break
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1894 if isinstance(node, ast.Continue):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1895 self.report(messages.ContinueOutsideLoop, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1896 else: # ast.Break
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1897 self.report(messages.BreakOutsideLoop, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1898
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1899 BREAK = CONTINUE
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1900
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1901 def RETURN(self, node):
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1902 if isinstance(self.scope, (ClassScope, ModuleScope)):
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1903 self.report(messages.ReturnOutsideFunction, node)
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1904 return
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1905
3889
9357550095a1 Fixed an issue in the pyflakes checker module (taken from Github).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3670
diff changeset
1906 if (
9357550095a1 Fixed an issue in the pyflakes checker module (taken from Github).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3670
diff changeset
1907 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
1908 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
1909 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
1910 ):
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1911 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
1912 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
1913
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1914 def YIELD(self, node):
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1915 if isinstance(self.scope, (ClassScope, ModuleScope)):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1916 self.report(messages.YieldOutsideFunction, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1917 return
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1918
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1919 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
1920
4502
76f2b46437a6 Updated to pyflakes 1.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4465
diff changeset
1921 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
1922
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1923 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
1924 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
1925 self.handleNode(deco, node)
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1926
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1927 with self._type_param_scope(node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1928 self.LAMBDA(node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1929
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1930 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
1931 # 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
1932 # or in nested functions.
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1933 if (self.withDoctest and
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1934 not self._in_doctest() and
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
1935 not isinstance(self.scope, FunctionScope)):
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1936 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
1937
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
1938 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
1939
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1940 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
1941 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
1942 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
1943
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1944 for arg in node.args.posonlyargs:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1945 args.append(arg.arg)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1946 annotations.append(arg.annotation)
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1947 for arg in node.args.args + node.args.kwonlyargs:
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1948 args.append(arg.arg)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1949 annotations.append(arg.annotation)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1950 defaults = node.args.defaults + node.args.kw_defaults
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1951
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1952 has_annotations = not isinstance(node, ast.Lambda)
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1953
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1954 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
1955 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
1956 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
1957 continue
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1958 args.append(wildcard.arg)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1959 if has_annotations:
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1960 annotations.append(wildcard.annotation)
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
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1962 if has_annotations:
3544
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1963 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
1964
431c842fd09a updated pyflakes to version 0.8.1 (Python 3.4.0 compatible)
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3456
diff changeset
1965 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
1966 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
1967 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
1968 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
1969
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1970 for annotation in annotations:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1971 self.handleAnnotation(annotation, node)
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1972
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1973 for default in defaults:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
1974 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
1975
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 runFunction():
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1977 with self.in_scope(FunctionScope):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1978 self.handleChildren(
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1979 node,
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1980 omit=('decorator_list', 'returns', 'type_params'),
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1981 )
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1982
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1983 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
1984
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1985 def ARGUMENTS(self, node):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1986 self.handleChildren(node, omit=('defaults', 'kw_defaults'))
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1987
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1988 def ARG(self, node):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
1989 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
1990
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1991 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
1992 """
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1993 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
1994 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
1995 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
1996 """
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
1997 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
1998 self.handleNode(deco, node)
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1999
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2000 with self._type_param_scope(node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2001 for baseNode in node.bases:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2002 self.handleNode(baseNode, node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2003 for keywordNode in node.keywords:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2004 self.handleNode(keywordNode, node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2005 with self.in_scope(ClassScope):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2006 # doctest does not process doctest within a doctest
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2007 # classes within classes are processed.
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2008 if (self.withDoctest and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2009 not self._in_doctest() and
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2010 not isinstance(self.scope, FunctionScope)):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2011 self.deferFunction(lambda: self.handleDoctests(node))
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2012 for stmt in node.body:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2013 self.handleNode(stmt, node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2014
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2015 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
2016
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2017 def AUGASSIGN(self, node):
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
2018 self.handleNodeLoad(node.target, 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
2019 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
2020 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
2021
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2022 def TUPLE(self, node):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2023 if isinstance(node.ctx, ast.Store):
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2024 # 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
2025 # 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
2026 # 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
2027 # 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
2028 # 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
2029 # add it here anyway
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2030 has_starred = False
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2031 star_loc = -1
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2032 for i, n in enumerate(node.elts):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2033 if isinstance(n, ast.Starred):
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2034 if has_starred:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2035 self.report(messages.TwoStarredExpressions, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2036 # 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
2037 # than two.
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2038 break
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2039 has_starred = True
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2040 star_loc = i
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2041 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
2042 self.report(messages.TooManyExpressionsInStarredAssignment, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2043 self.handleChildren(node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2044
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2045 LIST = TUPLE
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2046
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2047 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
2048 for alias in node.names:
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2049 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
2050 importation = SubmoduleImportation(alias.name, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2051 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2052 name = alias.asname or alias.name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2053 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
2054 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
2055
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2056 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
2057 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
2058 if not self.futuresAllowed:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2059 self.report(messages.LateFutureImport, 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
2060 else:
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2061 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
2062
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2063 module = ('.' * node.level) + (node.module or '')
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2064
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2065 for alias in node.names:
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2066 name = alias.asname or alias.name
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2067 if node.module == '__future__':
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2068 importation = FutureImportation(name, node, self.scope)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2069 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
2070 self.report(messages.FutureFeatureNotDefined,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2071 node, alias.name)
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2072 if alias.name == 'annotations':
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2073 self.annotationsFutureEnabled = True
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2074 elif alias.name == '*':
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2075 if not isinstance(self.scope, ModuleScope):
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2076 self.report(messages.ImportStarNotPermitted,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2077 node, module)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2078 continue
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2079
2571
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.scope.importStarred = True
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2081 self.report(messages.ImportStarUsed, node, module)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2082 importation = StarImportation(module, node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2083 else:
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2084 importation = ImportationFrom(name, node,
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2085 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
2086 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
2087
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2088 def TRY(self, node):
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2089 handler_names = []
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2090 # List the exception handlers
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2091 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
2092 if isinstance(handler.type, ast.Tuple):
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2093 for exc_type in handler.type.elts:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2094 handler_names.append(getNodeName(exc_type))
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2095 elif handler.type:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2096 handler_names.append(getNodeName(handler.type))
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2097
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2098 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
2099 self.report(messages.DefaultExceptNotLast, handler)
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2100 # 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
2101 self.exceptHandlers.append(handler_names)
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2102 for child in node.body:
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2103 self.handleNode(child, node)
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2104 self.exceptHandlers.pop()
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2105 # 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
2106 self.handleChildren(node, omit='body')
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2107
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2108 TRYSTAR = TRY
3177
5af61402d74d Update pyflakes to 0.7.3
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3159
diff changeset
2109
2571
e6bb19eb87ea Fixes for autocodecheck with pyflakes and update of py2flakes to 0.6.1.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2110 def EXCEPTHANDLER(self, node):
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2111 if node.name is None:
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2112 self.handleChildren(node)
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2113 return
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2114
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2115 # 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
2116 # binding.
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2117 if node.name in self.scope:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2118 self.handleNodeStore(node)
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2119
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2120 # 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
2121 # 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
2122 # 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
2123 # 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
2124 # block.
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2125
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2126 try:
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2127 prev_definition = self.scope.pop(node.name)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2128 except KeyError:
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2129 prev_definition = None
5067
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2130
e2f171f08af8 Updated pyflakes to 1.2.3+.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5065
diff changeset
2131 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
2132 self.handleChildren(node)
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2133
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2134 # 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
2135
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2136 # 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
2137 # 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
2138 # 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
2139 # 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
2140 #
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2141 # 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
2142
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2143 try:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2144 binding = self.scope.pop(node.name)
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2145 except KeyError:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2146 pass
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2147 else:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2148 if not binding.used:
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2149 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
2150
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2151 # Restore.
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2152 if prev_definition:
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2153 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
2154
5510
cdcd0cd34e79 Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5389
diff changeset
2155 def ANNASSIGN(self, node):
6353
6a0f3abd6878 upgraded pyflakes to version 2.0.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6048
diff changeset
2156 self.handleAnnotation(node.annotation, node)
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2157 # If the assignment has value, handle the *value* now.
5510
cdcd0cd34e79 Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5389
diff changeset
2158 if node.value:
9376
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2159 # If the annotation is `TypeAlias`, handle the *value* as an annotation.
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2160 if _is_typing(node.annotation, 'TypeAlias', self.scopeStack):
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2161 self.handleAnnotation(node.value, node)
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2162 else:
e143a7e7254b Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2163 self.handleNode(node.value, node)
9593
89f885d857e4 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9376
diff changeset
2164 self.handleNode(node.target, node)
5510
cdcd0cd34e79 Upgraded pyflakes to version 1.5.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5389
diff changeset
2165
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2166 def COMPARE(self, node):
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2167 left = node.left
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2168 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
2169 if (
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
2170 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
2171 _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
2172 _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
2173 )
a0e162a50ad7 Syntax Checker: updated pyflakes to version 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7395
diff changeset
2174 ):
6742
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2175 self.report(messages.IsLiteral, node)
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2176 left = right
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2177
7cb30f7f94f6 Upgraded pyflakes to 2.1.0
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 6645
diff changeset
2178 self.handleChildren(node)
8682
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2179
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2180 MATCH = MATCH_CASE = MATCHCLASS = MATCHOR = MATCHSEQUENCE = handleChildren
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2181 MATCHSINGLETON = MATCHVALUE = handleChildren
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2182
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2183 def _match_target(self, node):
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2184 self.handleNodeStore(node)
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2185 self.handleChildren(node)
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2186
04e80d1aaebf Updated pyflakes to 2.4.0 and pycodestyle to 2.8.0.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 8312
diff changeset
2187 MATCHAS = MATCHMAPPING = MATCHSTAR = _match_target
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2188
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2189 @contextlib.contextmanager
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2190 def _type_param_scope(self, node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2191 with contextlib.ExitStack() as ctx:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2192 if sys.version_info >= (3, 12):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2193 ctx.enter_context(self.in_scope(TypeScope))
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2194 for param in node.type_params:
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2195 self.handleNode(param, node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2196 yield
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2197
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2198 def TYPEVAR(self, node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2199 self.handleNodeStore(node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2200 self.handle_annotation_always_deferred(node.bound, node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2201
10508
a20222f2d8a2 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2202 PARAMSPEC = TYPEVARTUPLE = handleNodeStore
a20222f2d8a2 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2203
10164
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2204 def TYPEALIAS(self, node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2205 self.handleNode(node.name, node)
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2206 with self._type_param_scope(node):
b2fbf59d889f Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2207 self.handle_annotation_always_deferred(node.value, node)

eric ide

mercurial