src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py

Sat, 22 Feb 2025 18:04:02 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 22 Feb 2025 18:04:02 +0100
branch
eric7
changeset 11143
ef75c265ab47
parent 11142
2f0fb22c1d63
child 11145
d328a7b74fd8
permissions
-rw-r--r--

Added a checker for `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0.

4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11000
diff changeset
3 # Copyright (c) 2015 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a checker for miscellaneous checks.
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
10 import ast
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
11 import builtins
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
12 import contextlib
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
13 import copy
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
14 import itertools
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
15 import math
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
16 import re
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
17 import sys
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
18 import tokenize
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9327
diff changeset
19
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
20 from collections import Counter, defaultdict, namedtuple
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
21 from dataclasses import dataclass
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
22 from keyword import iskeyword
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
23 from string import Formatter
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
25 try:
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
26 # Python 3.10+
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
27 from itertools import pairwise
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
28 except ImportError:
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
29 # replacement for Python < 3.10
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
30 from itertools import tee
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
31
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
32 def pairwise(iterable):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
33 a, b = tee(iterable)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
34 next(b, None)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
35 return zip(a, b)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
36
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
37
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
38 import AstUtilities
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
39
8168
bdb0258faf42 Code Style Checker: reorganized the code a little bit.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8166
diff changeset
40 from .eradicate import Eradicator
7980
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
41 from .MiscellaneousDefaults import MiscellaneousCheckerDefaultArgs
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
42
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
43 BugbearMutableLiterals = ("Dict", "List", "Set")
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
44 BugbearMutableComprehensions = ("ListComp", "DictComp", "SetComp")
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
45 BugbearMutableCalls = (
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
46 "Counter",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
47 "OrderedDict",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
48 "collections.Counter",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
49 "collections.OrderedDict",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
50 "collections.defaultdict",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
51 "collections.deque",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
52 "defaultdict",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
53 "deque",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
54 "dict",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
55 "list",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
56 "set",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
57 )
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
58 BugbearImmutableCalls = (
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
59 "tuple",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
60 "frozenset",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
61 "types.MappingProxyType",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
62 "MappingProxyType",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
63 "re.compile",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
64 "operator.attrgetter",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
65 "operator.itemgetter",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
66 "operator.methodcaller",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
67 "attrgetter",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
68 "itemgetter",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
69 "methodcaller",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
70 )
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
71
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
72
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
73 def composeCallPath(node):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
74 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
75 Generator function to assemble the call path of a given node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
76
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
77 @param node node to assemble call path for
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
78 @type ast.Node
7988
c4c17121eff8 Updated source code documentation with the new tags.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7980
diff changeset
79 @yield call path components
c4c17121eff8 Updated source code documentation with the new tags.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7980
diff changeset
80 @ytype str
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
81 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
82 if isinstance(node, ast.Attribute):
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8198
diff changeset
83 yield from composeCallPath(node.value)
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
84 yield node.attr
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
85 elif isinstance(node, ast.Call):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
86 yield from composeCallPath(node.func)
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
87 elif isinstance(node, ast.Name):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
88 yield node.id
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
89
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
90
8207
d359172d11be Applied some more code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
91 class MiscellaneousChecker:
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 Class implementing a checker for miscellaneous checks.
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Codes = [
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
97 ## Coding line
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98 "M101",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99 "M102",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
100 ## Copyright
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
101 "M111",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
102 "M112",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
103 ## Shadowed Builtins
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
104 "M131",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
105 "M132",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
106 ## Comprehensions
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
107 "M180",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
108 "M181",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
109 "M182",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
110 "M183",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
111 "M184",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
112 "M185",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
113 "M186",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
114 "M188",
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
115 "M189",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
116 "M189a",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
117 "M189b",
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
118 "M190",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
119 "M190a",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
120 "M190b",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
121 "M191",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
122 "M193",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
123 "M193a",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
124 "M193b",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
125 "M193c",
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
126 "M194",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
127 "M195",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
128 "M196",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
129 "M197",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
130 "M198",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
131 "M199",
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
132 "M200",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
133 ## Dictionaries with sorted keys
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
134 "M251",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
135 ## Property
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
136 "M260",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
137 "M261",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
138 "M262",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
139 "M263",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
140 "M264",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
141 "M265",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
142 "M266",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
143 "M267",
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
144 ## Naive datetime usage
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
145 "M301",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
146 "M302",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
147 "M303",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
148 "M304",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
149 "M305",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150 "M306",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
151 "M307",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
152 "M308",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
153 "M311",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
154 "M312",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
155 "M313",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
156 "M314",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
157 "M315",
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
158 "M321",
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
159 ## sys.version and sys.version_info usage
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
160 "M401",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
161 "M402",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
162 "M403",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
163 "M411",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
164 "M412",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
165 "M413",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
166 "M414",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
167 "M421",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
168 "M422",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
169 "M423",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
170 ## Bugbear
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
171 "M501",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
172 "M502",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
173 "M503",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
174 "M504",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
175 "M505",
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
176 "M506",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
177 "M507",
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
178 "M508",
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
179 "M509",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
180 "M510",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
181 "M511",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
182 "M512",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
183 "M513",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
184 "M514",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
185 "M515",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
186 "M516",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
187 "M517",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
188 "M518",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
189 "M519",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
190 "M520",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
191 "M521",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
192 "M522",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
193 "M523",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
194 "M524",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
195 "M525",
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
196 "M526",
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
197 "M527",
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
198 "M528",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
199 "M529",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
200 "M530",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
201 "M531",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
202 "M532",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
203 "M533",
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
204 "M534",
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
205 "M535",
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
206 "M536",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
207 "M537",
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
208 "M539",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
209 "M540",
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
210 "M541",
10639
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
211 ## Bugbear, opininonated
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
212 "M569",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
213 ## Bugbear++
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
214 "M581",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
215 "M582",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
216 ## Format Strings
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
217 "M601",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
218 "M611",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
219 "M612",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
220 "M613",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
221 "M621",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
222 "M622",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
223 "M623",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
224 "M624",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
225 "M625",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
226 "M631",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
227 "M632",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
228 ## Future statements
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
229 "M701",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
230 "M702",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
231 ## Gettext
6182
f293e95b914d Code Style Checker: added check for the 'gettext' import statement
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6180
diff changeset
232 "M711",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
233 ## print() statements
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 "M801",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
235 ## one element tuple
4507
1a5bc1ac7c2e Added a check for one element tuples.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4506
diff changeset
236 "M811",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
237 ## return statements
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
238 "M831",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
239 "M832",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
240 "M833",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
241 "M834",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
242 ## line continuation
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
243 "M841",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
244 ## implicitly concatenated strings
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
245 "M851",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
246 "M852",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
247 "M853",
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
248 ## commented code
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
249 "M891",
11140
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
250 ## structural pattern matching
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
251 "M901",
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
252 "M902",
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
254
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
255 Formatter = Formatter()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
256 FormatFieldRegex = re.compile(r"^((?:\s|.)*?)(\..*|\[.*\])?$")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
257
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
258 BuiltinsWhiteList = [
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
259 "__name__",
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
260 "__doc__",
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
261 "credits",
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
262 ]
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
264 def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
267
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
268 @param source source code to be checked
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
269 @type list of str
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
270 @param filename name of the source file
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
271 @type str
8198
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8168
diff changeset
272 @param tree AST tree of the source code
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8168
diff changeset
273 @type ast.Module
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
274 @param select list of selected codes
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
275 @type list of str
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
276 @param ignore list of codes to be ignored
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
277 @type list of str
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
278 @param expected list of expected codes
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
279 @type list of str
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 @param repeat flag indicating to report each occurrence of a code
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
281 @type bool
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
282 @param args dictionary of arguments for the miscellaneous checks
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
283 @type dict
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 self.__select = tuple(select)
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11140
diff changeset
286 self.__ignore = tuple(ignore)
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 self.__expected = expected[:]
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 self.__repeat = repeat
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 self.__filename = filename
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self.__source = source[:]
8198
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8168
diff changeset
291 self.__tree = copy.deepcopy(tree)
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 self.__args = args
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
293
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
294 linesIterator = iter(self.__source)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
295 self.__tokens = list(tokenize.generate_tokens(lambda: next(linesIterator)))
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
296
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 self.__pep3101FormatRegex = re.compile(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
298 r'^(?:[^\'"]*[\'"][^\'"]*[\'"])*\s*%|^\s*%'
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
299 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
300
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
301 self.__builtins = [b for b in dir(builtins) if b not in self.BuiltinsWhiteList]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
302
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
303 self.__eradicator = Eradicator()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
304
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 # statistics counters
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 self.counters = {}
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
307
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 # collection of detected errors
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 self.errors = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
310
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 checkersWithCodes = [
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 (self.__checkCoding, ("M101", "M102")),
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 (self.__checkCopyright, ("M111", "M112")),
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
314 (self.__checkBuiltins, ("M131", "M132")),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
315 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
316 self.__checkComprehensions,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
317 (
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
318 "M180",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
319 "M181",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
320 "M182",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
321 "M183",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
322 "M184",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
323 "M185",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
324 "M186",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
325 "M188",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
326 "M189",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
327 "M189a",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
328 "M189b",
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
329 "M190",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
330 "M190a",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
331 "M190b",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
332 "M191",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
333 "M193",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
334 "M193a",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
335 "M193b",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
336 "M193c",
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
337 "M194",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
338 "M195",
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
339 "M196",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
340 "M197",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
341 "M198",
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
342 "M199",
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
343 "M200",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
344 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
345 ),
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
346 (self.__checkDictWithSortedKeys, ("M251",)),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
347 (
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
348 self.__checkProperties,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
349 ("M260", "M261", "M262", "M263", "M264", "M265", "M266", "M267"),
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
350 ),
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
351 (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
352 self.__checkDateTime,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
353 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
354 "M301",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
355 "M302",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
356 "M303",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
357 "M304",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
358 "M305",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
359 "M306",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
360 "M307",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
361 "M308",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
362 "M311",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
363 "M312",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
364 "M313",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
365 "M314",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
366 "M315",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
367 "M321",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
368 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
369 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
370 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
371 self.__checkSysVersion,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
372 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
373 "M401",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
374 "M402",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
375 "M403",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
376 "M411",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
377 "M412",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
378 "M413",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
379 "M414",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
380 "M421",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
381 "M422",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
382 "M423",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
383 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
384 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
385 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
386 self.__checkBugBear,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
387 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
388 "M501",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
389 "M502",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
390 "M503",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
391 "M504",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
392 "M505",
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
393 "M506",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
394 "M507",
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
395 "M508",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
396 "M509",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
397 "M510",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
398 "M511",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
399 "M512",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
400 "M513",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
401 "M514",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
402 "M515",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
403 "M516",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
404 "M517",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
405 "M518",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
406 "M519",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
407 "M520",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
408 "M521",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
409 "M522",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
410 "M523",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
411 "M524",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
412 "M525",
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
413 "M526",
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
414 "M527",
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
415 "M528",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
416 "M529",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
417 "M530",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
418 "M531",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
419 "M532",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
420 "M533",
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
421 "M534",
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
422 "M535",
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
423 "M536",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
424 "M537",
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
425 "M539",
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
426 "M540",
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
427 "M541",
10639
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
428 "M569",
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
429 "M581",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
430 "M582",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
431 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
432 ),
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
433 (self.__checkPep3101, ("M601",)),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
434 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
435 self.__checkFormatString,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
436 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
437 "M611",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
438 "M612",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
439 "M613",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
440 "M621",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
441 "M622",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
442 "M623",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
443 "M624",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
444 "M625",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
445 "M631",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
446 "M632",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
447 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
448 ),
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
449 (self.__checkFuture, ("M701", "M702")),
6182
f293e95b914d Code Style Checker: added check for the 'gettext' import statement
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6180
diff changeset
450 (self.__checkGettext, ("M711",)),
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 (self.__checkPrintStatements, ("M801",)),
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
452 (self.__checkTuple, ("M811",)),
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
453 (self.__checkReturn, ("M831", "M832", "M833", "M834")),
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
454 (self.__checkLineContinuation, ("M841",)),
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
455 (self.__checkImplicitStringConcat, ("M851", "M852")),
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
456 (self.__checkExplicitStringConcat, ("M853",)),
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
457 (self.__checkCommentedCode, ("M891",)),
11140
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
458 (self.__checkDefaultMatchCase, ("M901", "M902")),
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
460
7980
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
461 # the eradicate whitelist
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
462 commentedCodeCheckerArgs = self.__args.get(
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
463 "CommentedCodeChecker",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
464 MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
465 )
7980
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
466 commentedCodeCheckerWhitelist = commentedCodeCheckerArgs.get(
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
467 "WhiteList",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
468 MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"]["WhiteList"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
469 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
470 self.__eradicator.update_whitelist(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
471 commentedCodeCheckerWhitelist, extend_default=False
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
472 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
473
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 self.__checkers = []
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 for checker, codes in checkersWithCodes:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
476 if any(not (code and self.__ignoreCode(code)) for code in codes):
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 self.__checkers.append(checker)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
478
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 def __ignoreCode(self, code):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 Private method to check if the message code should be ignored.
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
483 @param code message code to check for
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
484 @type str
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
485 @return flag indicating to ignore the given code
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
486 @rtype bool
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
487 """
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11140
diff changeset
488 return (
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11140
diff changeset
489 code in self.__ignore
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11140
diff changeset
490 or (code.startswith(self.__ignore) and not code.startswith(self.__select))
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11140
diff changeset
491 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
492
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
493 def __error(self, lineNumber, offset, code, *args):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
494 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495 Private method to record an issue.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
496
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
497 @param lineNumber line number of the issue
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
498 @type int
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
499 @param offset position within line of the issue
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
500 @type int
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
501 @param code message code
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
502 @type str
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
503 @param args arguments for the message
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
504 @type list
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
505 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506 if self.__ignoreCode(code):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
508
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 if code in self.counters:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510 self.counters[code] += 1
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511 else:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512 self.counters[code] = 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
513
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 # Don't care about expected codes
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 if code in self.__expected:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
517
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518 if code and (self.counters[code] == 1 or self.__repeat):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519 # record the issue with one based line number
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520 self.errors.append(
7610
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
521 {
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
522 "file": self.__filename,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
523 "line": lineNumber + 1,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
524 "offset": offset,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
525 "code": code,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
526 "args": args,
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
527 }
df7025fe26a3 Code Style Checker: reworked the API between frontend and backend to get some more flexibility for the future.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
528 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
529
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 def run(self):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532 Public method to check the given source against miscellaneous
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 conditions.
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535 if not self.__filename:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 # don't do anything, if essential data is missing
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
538
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 if not self.__checkers:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540 # don't do anything, if no codes were selected
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
542
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 for check in self.__checkers:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 check()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
545
4515
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
546 def __getCoding(self):
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
547 """
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
548 Private method to get the defined coding of the source.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
549
4515
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
550 @return tuple containing the line number and the coding
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
551 @rtype tuple of int and str
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
552 """
6106
921d070cec82 Finished implementing support for EditorConfig.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6100
diff changeset
553 for lineno, line in enumerate(self.__source[:5]):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
554 matched = re.search(r"coding[:=]\s*([-\w_.]+)", line, re.IGNORECASE)
4515
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
555 if matched:
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
556 return lineno, matched.group(1)
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
557 else:
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
558 return 0, ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
559
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 def __checkCoding(self):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562 Private method to check the presence of a coding line and valid
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
563 encodings.
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
565 if len(self.__source) == 0:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
567
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
568 encodings = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
569 e.lower().strip()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
570 for e in self.__args.get(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
571 "CodingChecker", MiscellaneousCheckerDefaultArgs["CodingChecker"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
572 ).split(",")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
573 ]
4515
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
574 lineno, coding = self.__getCoding()
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
575 if coding:
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
576 if coding.lower() not in encodings:
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
577 self.__error(lineno, 0, "M102", coding)
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
578 else:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
579 self.__error(0, 0, "M101")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
580
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
581 def __checkCopyright(self):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
582 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
583 Private method to check the presence of a copyright statement.
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
584 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
585 source = "".join(self.__source)
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
586 copyrightArgs = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
587 "CopyrightChecker", MiscellaneousCheckerDefaultArgs["CopyrightChecker"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
588 )
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589 copyrightMinFileSize = copyrightArgs.get(
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
590 "MinFilesize",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
591 MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["MinFilesize"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
592 )
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
593 copyrightAuthor = copyrightArgs.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
594 "Author", MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["Author"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
595 )
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
596 copyrightRegexStr = (
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
597 r"Copyright\s+(\(C\)\s+)?(\d{{4}}\s+-\s+)?\d{{4}}\s+{author}"
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
598 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
599
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
600 tocheck = max(1024, copyrightMinFileSize)
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
601 topOfSource = source[:tocheck]
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
602 if len(topOfSource) < copyrightMinFileSize:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
603 return
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
604
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
605 copyrightRe = re.compile(copyrightRegexStr.format(author=r".*"), re.IGNORECASE)
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
606 if not copyrightRe.search(topOfSource):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
607 self.__error(0, 0, "M111")
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
608 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
609
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
610 if copyrightAuthor:
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
611 copyrightAuthorRe = re.compile(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
612 copyrightRegexStr.format(author=copyrightAuthor), re.IGNORECASE
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
613 )
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
614 if not copyrightAuthorRe.search(topOfSource):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
615 self.__error(0, 0, "M112")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
616
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
617 def __checkCommentedCode(self):
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
618 """
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
619 Private method to check for commented code.
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
620 """
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
621 source = "".join(self.__source)
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
622 commentedCodeCheckerArgs = self.__args.get(
7980
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7972
diff changeset
623 "CommentedCodeChecker",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
624 MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
625 )
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
626 aggressive = commentedCodeCheckerArgs.get(
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
627 "Aggressive",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
628 MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"]["Aggressive"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
629 )
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
630 for markedLine in self.__eradicator.commented_out_code_line_numbers(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
631 source, aggressive=aggressive
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
632 ):
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7021
diff changeset
633 self.__error(markedLine - 1, 0, "M891")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
634
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
635 def __checkLineContinuation(self):
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
636 """
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
637 Private method to check line continuation using backslash.
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
638 """
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
639 # generate source lines without comments
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
640 comments = [tok for tok in self.__tokens if tok[0] == tokenize.COMMENT]
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
641 stripped = self.__source[:]
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
642 for comment in comments:
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
643 lineno = comment[3][0]
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
644 start = comment[2][1]
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
645 stop = comment[3][1]
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
646 content = stripped[lineno - 1]
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
647 withoutComment = content[:start] + content[stop:]
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
648 stripped[lineno - 1] = withoutComment.rstrip()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
649
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
650 # perform check with 'cleaned' source
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
651 for lineIndex, line in enumerate(stripped):
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
652 strippedLine = line.strip()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
653 if strippedLine.endswith("\\") and not strippedLine.startswith(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
654 ("assert", "with")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
655 ):
7042
2be5b245e1b8 Code Style Checker: added check for line continuation methods not suggested by PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7040
diff changeset
656 self.__error(lineIndex, len(line), "M841")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
657
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
658 def __checkPrintStatements(self):
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
659 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
660 Private method to check for print statements.
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
661 """
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
662 for node in ast.walk(self.__tree):
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
663 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
664 isinstance(node, ast.Call) and getattr(node.func, "id", None) == "print"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
665 ) or (hasattr(ast, "Print") and isinstance(node, ast.Print)):
4506
57666e501a42 Started to add more code style checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
666 self.__error(node.lineno - 1, node.col_offset, "M801")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
667
4507
1a5bc1ac7c2e Added a check for one element tuples.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4506
diff changeset
668 def __checkTuple(self):
1a5bc1ac7c2e Added a check for one element tuples.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4506
diff changeset
669 """
1a5bc1ac7c2e Added a check for one element tuples.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4506
diff changeset
670 Private method to check for one element tuples.
1a5bc1ac7c2e Added a check for one element tuples.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4506
diff changeset
671 """
1a5bc1ac7c2e Added a check for one element tuples.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4506
diff changeset
672 for node in ast.walk(self.__tree):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
673 if isinstance(node, ast.Tuple) and len(node.elts) == 1:
4507
1a5bc1ac7c2e Added a check for one element tuples.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4506
diff changeset
674 self.__error(node.lineno - 1, node.col_offset, "M811")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
675
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
676 def __checkFuture(self):
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
677 """
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
678 Private method to check the __future__ imports.
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
679 """
5588
6ba512d9f46a Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
680 expectedImports = {
6ba512d9f46a Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
681 i.strip()
6ba512d9f46a Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
682 for i in self.__args.get("FutureChecker", "").split(",")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
683 if bool(i.strip())
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
684 }
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
685 if len(expectedImports) == 0:
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
686 # nothing to check for; disabling the check
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
687 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
688
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
689 imports = set()
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
690 node = None
4540
45627d092846 Fixed the futures checker raising false psitives when a file only contains a docstring.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4515
diff changeset
691 hasCode = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
692
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
693 for node in ast.walk(self.__tree):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
694 if isinstance(node, ast.ImportFrom) and node.module == "__future__":
5588
6ba512d9f46a Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
695 imports |= {name.name for name in node.names}
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
696 elif isinstance(node, ast.Expr):
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
697 if not AstUtilities.isString(node.value):
4540
45627d092846 Fixed the futures checker raising false psitives when a file only contains a docstring.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4515
diff changeset
698 hasCode = True
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
699 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
700 elif not (AstUtilities.isString(node) or isinstance(node, ast.Module)):
4540
45627d092846 Fixed the futures checker raising false psitives when a file only contains a docstring.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4515
diff changeset
701 hasCode = True
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
702 break
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
703
4540
45627d092846 Fixed the futures checker raising false psitives when a file only contains a docstring.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4515
diff changeset
704 if isinstance(node, ast.Module) or not hasCode:
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
705 return
4508
a3b38825acf0 Added a check for __future__ imports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4507
diff changeset
706
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8198
diff changeset
707 if imports < expectedImports:
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
708 if imports:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
709 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
710 node.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
711 node.col_offset,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
712 "M701",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
713 ", ".join(expectedImports),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
714 ", ".join(imports),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
715 )
4509
7797ee4a45f9 Redid the future imports checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4508
diff changeset
716 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
717 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
718 node.lineno - 1, node.col_offset, "M702", ", ".join(expectedImports)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
719 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
720
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
721 def __checkPep3101(self):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
722 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
723 Private method to check for old style string formatting.
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
724 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
725 for lineno, line in enumerate(self.__source):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
726 match = self.__pep3101FormatRegex.search(line)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
727 if match:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
728 lineLen = len(line)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
729 pos = line.find("%")
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
730 formatPos = pos
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
731 formatter = "%"
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
732 if line[pos + 1] == "(":
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
733 pos = line.find(")", pos)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
734 c = line[pos]
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
735 while c not in "diouxXeEfFgGcrs":
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
736 pos += 1
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
737 if pos >= lineLen:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
738 break
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
739 c = line[pos]
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
740 if c in "diouxXeEfFgGcrs":
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
741 formatter += c
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
742 self.__error(lineno, formatPos, "M601", formatter)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
743
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
744 def __checkFormatString(self):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
745 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
746 Private method to check string format strings.
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
747 """
4515
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
748 coding = self.__getCoding()[1]
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
749 if not coding:
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
750 # default to utf-8
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
751 coding = "utf-8"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
752
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
753 visitor = TextVisitor()
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
754 visitor.visit(self.__tree)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
755 for node in visitor.nodes:
10169
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
756 text = node.value
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
757 if isinstance(text, bytes):
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
758 try:
4515
d7cebe39ffba Some refinements to the miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4511
diff changeset
759 text = text.decode(coding)
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
760 except UnicodeDecodeError:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
761 continue
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
762 fields, implicit, explicit = self.__getFields(text)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
763 if implicit:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
764 if node in visitor.calls:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
765 self.__error(node.lineno - 1, node.col_offset, "M611")
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
766 else:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
767 if node.is_docstring:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
768 self.__error(node.lineno - 1, node.col_offset, "M612")
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
769 else:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
770 self.__error(node.lineno - 1, node.col_offset, "M613")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
771
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
772 if node in visitor.calls:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
773 call, strArgs = visitor.calls[node]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
774
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
775 numbers = set()
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
776 names = set()
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
777 # Determine which fields require a keyword and which an arg
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
778 for name in fields:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
779 fieldMatch = self.FormatFieldRegex.match(name)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
780 try:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
781 number = int(fieldMatch.group(1))
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
782 except ValueError:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
783 number = -1
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
784 # negative numbers are considered keywords
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
785 if number >= 0:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
786 numbers.add(number)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
787 else:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
788 names.add(fieldMatch.group(1))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
789
5588
6ba512d9f46a Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
790 keywords = {keyword.arg for keyword in call.keywords}
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
791 numArgs = len(call.args)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
792 if strArgs:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
793 numArgs -= 1
7894
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
794 hasKwArgs = any(kw.arg is None for kw in call.keywords)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
795 hasStarArgs = sum(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
796 1 for arg in call.args if isinstance(arg, ast.Starred)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
797 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
798
7894
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
799 if hasKwArgs:
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
800 keywords.discard(None)
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
801 if hasStarArgs:
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
802 numArgs -= 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
803
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
804 # if starargs or kwargs is not None, it can't count the
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
805 # parameters but at least check if the args are used
8222
5994b80b8760 Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
806 if hasKwArgs and not names:
5994b80b8760 Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
807 # No names but kwargs
5994b80b8760 Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
808 self.__error(call.lineno - 1, call.col_offset, "M623")
5994b80b8760 Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
809 if hasStarArgs and not numbers:
5994b80b8760 Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
810 # No numbers but args
5994b80b8760 Applied some more code simplifications suggested by the new Simplify checker (Y102: use single if) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8218
diff changeset
811 self.__error(call.lineno - 1, call.col_offset, "M624")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
812
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
813 if not hasKwArgs and not hasStarArgs:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
814 # can actually verify numbers and names
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
815 for number in sorted(numbers):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
816 if number >= numArgs:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
817 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
818 call.lineno - 1, call.col_offset, "M621", number
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
819 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
820
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
821 for name in sorted(names):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
822 if name not in keywords:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
823 self.__error(call.lineno - 1, call.col_offset, "M622", name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
824
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
825 for arg in range(numArgs):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
826 if arg not in numbers:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
827 self.__error(call.lineno - 1, call.col_offset, "M631", arg)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
828
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
829 for keyword in keywords:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
830 if keyword not in names:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
831 self.__error(call.lineno - 1, call.col_offset, "M632", keyword)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
832
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
833 if implicit and explicit:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
834 self.__error(call.lineno - 1, call.col_offset, "M625")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
835
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
836 def __getFields(self, string):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
837 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
838 Private method to extract the format field information.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
839
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
840 @param string format string to be parsed
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
841 @type str
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
842 @return format field information as a tuple with fields, implicit
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
843 field definitions present and explicit field definitions present
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
844 @rtype tuple of set of str, bool, bool
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
845 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
846 fields = set()
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
847 cnt = itertools.count()
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
848 implicit = False
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
849 explicit = False
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
850 try:
6188
5a6ae3be31e6 Fixed some loop related coding issues detected by the extended code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6184
diff changeset
851 for _literal, field, spec, conv in self.Formatter.parse(string):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
852 if field is not None and (conv is None or conv in "rsa"):
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
853 if not field:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
854 field = str(next(cnt))
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
855 implicit = True
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
856 else:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
857 explicit = True
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
858 fields.add(field)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
859 fields.update(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
860 parsedSpec[1]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
861 for parsedSpec in self.Formatter.parse(spec)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
862 if parsedSpec[1] is not None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
863 )
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
864 except ValueError:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
865 return set(), False, False
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
866 else:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
867 return fields, implicit, explicit
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
868
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
869 def __checkBuiltins(self):
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
870 """
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
871 Private method to check, if built-ins are shadowed.
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
872 """
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
873 functionDefs = [ast.FunctionDef]
8243
cc717c2ae956 Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
874 with contextlib.suppress(AttributeError):
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
875 functionDefs.append(ast.AsyncFunctionDef)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
876
5619
ab999dc48132 Made the built-ins checker configurable.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5617
diff changeset
877 ignoreBuiltinAssignments = self.__args.get(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
878 "BuiltinsChecker", MiscellaneousCheckerDefaultArgs["BuiltinsChecker"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
879 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
880
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
881 for node in ast.walk(self.__tree):
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
882 if isinstance(node, ast.Assign):
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
883 # assign statement
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
884 for element in node.targets:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
885 if isinstance(element, ast.Name) and element.id in self.__builtins:
5617
1b9e3d94864a Removed obsolete checker for M121 (blind except) because that is already checked by pycodestyle.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5589
diff changeset
886 value = node.value
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
887 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
888 isinstance(value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
889 and element.id in ignoreBuiltinAssignments
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
890 and value.id in ignoreBuiltinAssignments[element.id]
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
891 ):
5617
1b9e3d94864a Removed obsolete checker for M121 (blind except) because that is already checked by pycodestyle.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5589
diff changeset
892 # ignore compatibility assignments
1b9e3d94864a Removed obsolete checker for M121 (blind except) because that is already checked by pycodestyle.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5589
diff changeset
893 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
894 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
895 element.lineno - 1, element.col_offset, "M131", element.id
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
896 )
5589
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5588
diff changeset
897 elif isinstance(element, (ast.Tuple, ast.List)):
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5588
diff changeset
898 for tupleElement in element.elts:
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
899 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
900 isinstance(tupleElement, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
901 and tupleElement.id in self.__builtins
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
902 ):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
903 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
904 tupleElement.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
905 tupleElement.col_offset,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
906 "M131",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
907 tupleElement.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
908 )
5589
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5588
diff changeset
909 elif isinstance(node, ast.For):
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5588
diff changeset
910 # for loop
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5588
diff changeset
911 target = node.target
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
912 if isinstance(target, ast.Name) and target.id in self.__builtins:
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
913 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
914 target.lineno - 1, target.col_offset, "M131", target.id
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
915 )
5589
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5588
diff changeset
916 elif isinstance(target, (ast.Tuple, ast.List)):
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5588
diff changeset
917 for element in target.elts:
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
918 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
919 isinstance(element, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
920 and element.id in self.__builtins
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
921 ):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
922 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
923 element.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
924 element.col_offset,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
925 "M131",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
926 element.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
927 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
928 elif any(isinstance(node, functionDef) for functionDef in functionDefs):
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
929 # (asynchronous) function definition
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
930 for arg in node.args.args:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
931 if isinstance(arg, ast.arg) and arg.arg in self.__builtins:
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
932 self.__error(arg.lineno - 1, arg.col_offset, "M132", arg.arg)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
933
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
934 def __checkComprehensions(self):
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
935 """
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
936 Private method to check some comprehension related things.
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
937
11134
3243a66db84a Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
938 This method is adapted from: flake8-comprehensions v3.16.0
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
939 Original: Copyright (c) 2017 Adam Johnson
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
940 """
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
941 compType = {
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
942 ast.DictComp: "dict",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
943 ast.ListComp: "list",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
944 ast.SetComp: "set",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
945 }
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
946
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
947 visitedMapCalls = set()
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
948
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
949 for node in ast.walk(self.__tree):
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
950 if isinstance(node, ast.Call) and isinstance(node.func, ast.Name):
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
951 numPositionalArgs = len(node.args)
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
952 numKeywordArgs = len(node.keywords)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
953
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
954 if (
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
955 numPositionalArgs == 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
956 and isinstance(node.args[0], ast.GeneratorExp)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
957 and node.func.id in ("list", "set")
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
958 ):
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
959 errorCode = {
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
960 "list": "M180",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
961 "set": "M181",
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
962 }[node.func.id]
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
963 self.__error(node.lineno - 1, node.col_offset, errorCode)
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
964
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
965 elif (
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
966 numPositionalArgs == 1
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
967 and node.func.id == "dict"
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
968 and len(node.keywords) == 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
969 and isinstance(node.args[0], (ast.GeneratorExp, ast.ListComp))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
970 and isinstance(node.args[0].elt, ast.Tuple)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
971 and len(node.args[0].elt.elts) == 2
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
972 ):
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
973 if isinstance(node.args[0], ast.GeneratorExp):
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
974 errorCode = "M182"
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
975 else:
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
976 errorCode = "M184"
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
977 self.__error(node.lineno - 1, node.col_offset, errorCode)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
978
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
979 elif (
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
980 numPositionalArgs == 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
981 and isinstance(node.args[0], ast.ListComp)
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
982 and node.func.id in ("list", "set", "any", "all")
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
983 ):
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
984 errorCode = {
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
985 "list": "M191",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
986 "set": "M183",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
987 "any": "M199",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
988 "all": "M199",
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
989 }[node.func.id]
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
990 self.__error(
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
991 node.lineno - 1, node.col_offset, errorCode, node.func.id
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
992 )
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
993
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
994 elif numPositionalArgs == 1 and (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
995 isinstance(node.args[0], ast.Tuple)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
996 and node.func.id == "tuple"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
997 or isinstance(node.args[0], ast.List)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
998 and node.func.id == "list"
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
999 ):
5585
dab20c39f08c Added checks for shadowed Python builtins and unneccessary comprehensions and generators.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
1000 errorCode = {
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1001 "tuple": "M189a",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1002 "list": "M190a",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1003 }[node.func.id]
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1004 self.__error(
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1005 node.lineno - 1,
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1006 node.col_offset,
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1007 errorCode,
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1008 type(node.args[0]).__name__.lower(),
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1009 node.func.id,
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1010 )
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1011
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1012 elif (
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1013 numPositionalArgs == 1
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1014 and numKeywordArgs == 0
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1015 and isinstance(node.args[0], (ast.Dict, ast.DictComp))
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1016 and node.func.id == "dict"
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1017 ):
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1018 if isinstance(node.args[0], ast.Dict):
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1019 type_ = "dict"
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1020 else:
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1021 type_ = "dict comprehension"
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1022 self.__error(
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1023 node.lineno - 1,
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1024 node.col_offset,
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1025 "M198",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1026 type_,
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1027 )
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1028
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1029 elif (
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1030 numPositionalArgs == 1
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1031 and isinstance(node.args[0], (ast.Tuple, ast.List))
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1032 and (
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1033 node.func.id in ("tuple", "list", "set")
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1034 or (
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1035 node.func.id == "dict"
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1036 and all(
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1037 isinstance(elt, ast.Tuple) and len(elt.elts) == 2
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1038 for elt in node.args[0].elts
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1039 )
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1040 )
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1041 )
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1042 ):
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1043 errorCode = {
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1044 "tuple": "M189b",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1045 "list": "M190b",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1046 "set": "M185",
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1047 "dict": "M186",
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1048 }[node.func.id]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1049 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1050 node.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1051 node.col_offset,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1052 errorCode,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1053 type(node.args[0]).__name__.lower(),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1054 node.func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1055 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1056
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1057 elif (
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1058 numPositionalArgs == 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1059 and not any(isinstance(a, ast.Starred) for a in node.args)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1060 and not any(k.arg is None for k in node.keywords)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1061 and node.func.id == "dict"
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1062 ) or (
10371
1f54843e8152 Fixed an issue in the miscellaneous checker causing false reports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
1063 numPositionalArgs == 0
1f54843e8152 Fixed an issue in the miscellaneous checker causing false reports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
1064 and numKeywordArgs == 0
1f54843e8152 Fixed an issue in the miscellaneous checker causing false reports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
1065 and node.func.id in ("tuple", "list")
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1066 ):
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1067 self.__error(node.lineno - 1, node.col_offset, "M188", node.func.id)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1068
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1069 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1070 node.func.id in {"list", "reversed"}
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1071 and numPositionalArgs > 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1072 and isinstance(node.args[0], ast.Call)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1073 and isinstance(node.args[0].func, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1074 and node.args[0].func.id == "sorted"
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1075 ):
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1076 if node.func.id == "reversed":
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1077 reverseFlagValue = False
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1078 for kw in node.args[0].keywords:
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1079 if kw.arg != "reverse":
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1080 continue
10169
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1081 reverseFlagValue = (
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1082 bool(kw.value.value)
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1083 if isinstance(kw.value, ast.Constant)
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1084 else None
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1085 )
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1086
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1087 if reverseFlagValue is None:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1088 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1089 node.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1090 node.col_offset,
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1091 "M193a",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1092 node.func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1093 node.args[0].func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1094 )
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1095 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1096 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1097 node.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1098 node.col_offset,
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1099 "M193b",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1100 node.func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1101 node.args[0].func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1102 not reverseFlagValue,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1103 )
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1104
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1105 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1106 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1107 node.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1108 node.col_offset,
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1109 "M193c",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1110 node.func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1111 node.args[0].func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1112 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1113
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1114 elif (
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1115 numPositionalArgs > 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1116 and isinstance(node.args[0], ast.Call)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1117 and isinstance(node.args[0].func, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1118 and (
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1119 (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1120 node.func.id in {"set", "sorted"}
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1121 and node.args[0].func.id
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1122 in {"list", "reversed", "sorted", "tuple"}
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1123 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1124 or (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1125 node.func.id in {"list", "tuple"}
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1126 and node.args[0].func.id in {"list", "tuple"}
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1127 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1128 or (node.func.id == "set" and node.args[0].func.id == "set")
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1129 )
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1130 ):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1131 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1132 node.lineno - 1,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1133 node.col_offset,
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1134 "M194",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1135 node.args[0].func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1136 node.func.id,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1137 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1138
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1139 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1140 node.func.id in {"reversed", "set", "sorted"}
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1141 and numPositionalArgs > 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1142 and isinstance(node.args[0], ast.Subscript)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1143 and isinstance(node.args[0].slice, ast.Slice)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1144 and node.args[0].slice.lower is None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1145 and node.args[0].slice.upper is None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1146 and isinstance(node.args[0].slice.step, ast.UnaryOp)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1147 and isinstance(node.args[0].slice.step.op, ast.USub)
10169
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1148 and isinstance(node.args[0].slice.step.operand, ast.Constant)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1149 and node.args[0].slice.step.operand.n == 1
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1150 ):
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1151 self.__error(node.lineno - 1, node.col_offset, "M195", node.func.id)
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1152
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1153 elif (
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1154 node.func.id == "map"
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1155 and node not in visitedMapCalls
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1156 and len(node.args) == 2
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1157 and isinstance(node.args[0], ast.Lambda)
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1158 ):
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1159 self.__error(
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1160 node.lineno - 1, node.col_offset, "M197", "generator expression"
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1161 )
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1162
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1163 elif (
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1164 node.func.id in ("list", "set", "dict")
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1165 and len(node.args) == 1
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1166 and isinstance(node.args[0], ast.Call)
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1167 and isinstance(node.args[0].func, ast.Name)
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1168 and node.args[0].func.id == "map"
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1169 and len(node.args[0].args) == 2
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1170 and isinstance(node.args[0].args[0], ast.Lambda)
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1171 ):
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1172 # To avoid raising M197 on the map() call inside the list/set/dict.
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1173 mapCall = node.args[0]
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1174 visitedMapCalls.add(mapCall)
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1175
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1176 rewriteable = True
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1177 if node.func.id == "dict":
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1178 # For the generator expression to be rewriteable as a
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1179 # dict comprehension, its lambda must return a 2-tuple.
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1180 lambdaNode = node.args[0].args[0]
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1181 if (
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1182 not isinstance(lambdaNode.body, (ast.List, ast.Tuple))
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1183 or len(lambdaNode.body.elts) != 2
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1184 ):
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1185 rewriteable = False
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1186
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1187 if rewriteable:
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1188 comprehensionType = f"{node.func.id} comprehension"
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1189 self.__error(
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1190 node.lineno - 1, node.col_offset, "M197", comprehensionType
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1191 )
10360
9ffdb1490bd2 Updated the 'Miscellaneous' checker to "flake8-comprehensions 3.14.0".
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
1192
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1193 elif isinstance(node, (ast.DictComp, ast.ListComp, ast.SetComp)) and (
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1194 len(node.generators) == 1
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1195 and not node.generators[0].ifs
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1196 and not node.generators[0].is_async
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1197 ):
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1198 if (
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1199 isinstance(node, (ast.ListComp, ast.SetComp))
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1200 and isinstance(node.elt, ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1201 and isinstance(node.generators[0].target, ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1202 and node.elt.id == node.generators[0].target.id
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1203 ) or (
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1204 isinstance(node, ast.DictComp)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1205 and isinstance(node.key, ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1206 and isinstance(node.value, ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1207 and isinstance(node.generators[0].target, ast.Tuple)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1208 and len(node.generators[0].target.elts) == 2
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1209 and isinstance(node.generators[0].target.elts[0], ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1210 and node.generators[0].target.elts[0].id == node.key.id
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1211 and isinstance(node.generators[0].target.elts[1], ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1212 and node.generators[0].target.elts[1].id == node.value.id
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1213 ):
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1214 self.__error(
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1215 node.lineno - 1,
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1216 node.col_offset,
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1217 "M196",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1218 compType[node.__class__],
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1219 )
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1220
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1221 elif (
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1222 isinstance(node, ast.DictComp)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1223 and isinstance(node.key, ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1224 and isinstance(node.value, ast.Constant)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1225 and isinstance(node.generators[0].target, ast.Name)
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1226 and node.key.id == node.generators[0].target.id
8759
7efebdfa5dc2 Updated the comprehensions check of the Miscellaneous code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
1227 ):
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1228 self.__error(
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1229 node.lineno - 1,
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1230 node.col_offset,
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1231 "M200",
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1232 compType[node.__class__],
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1233 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1234
6178
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1235 def __dictShouldBeChecked(self, node):
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1236 """
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1237 Private function to test, if the node should be checked.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1238
6178
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1239 @param node reference to the AST node
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10417
diff changeset
1240 @type ast.Dict
6178
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1241 @return flag indicating to check the node
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1242 @rtype bool
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1243 """
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1244 if not all(AstUtilities.isString(key) for key in node.keys):
6178
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1245 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1246
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
1247 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1248 "__IGNORE_WARNING__" in self.__source[node.lineno - 1]
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1249 or "__IGNORE_WARNING_M251__" in self.__source[node.lineno - 1]
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
1250 ):
6178
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1251 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1252
6178
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1253 lineNumbers = [key.lineno for key in node.keys]
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1254 return len(lineNumbers) == len(set(lineNumbers))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1255
6177
af76e795c4ce Code Style Checker: added check for dictionaries with sorted keys (M201)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6106
diff changeset
1256 def __checkDictWithSortedKeys(self):
af76e795c4ce Code Style Checker: added check for dictionaries with sorted keys (M201)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6106
diff changeset
1257 """
af76e795c4ce Code Style Checker: added check for dictionaries with sorted keys (M201)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6106
diff changeset
1258 Private method to check, if dictionary keys appear in sorted order.
af76e795c4ce Code Style Checker: added check for dictionaries with sorted keys (M201)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6106
diff changeset
1259 """
af76e795c4ce Code Style Checker: added check for dictionaries with sorted keys (M201)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6106
diff changeset
1260 for node in ast.walk(self.__tree):
6178
905ea208884a Some refinements of the last changeset.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6177
diff changeset
1261 if isinstance(node, ast.Dict) and self.__dictShouldBeChecked(node):
6177
af76e795c4ce Code Style Checker: added check for dictionaries with sorted keys (M201)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6106
diff changeset
1262 for key1, key2 in zip(node.keys, node.keys[1:]):
10169
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1263 if key2.value < key1.value:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1264 self.__error(
10169
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1265 key2.lineno - 1,
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1266 key2.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1267 "M251",
10169
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1268 key2.value,
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
1269 key1.value,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1270 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1271
6182
f293e95b914d Code Style Checker: added check for the 'gettext' import statement
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6180
diff changeset
1272 def __checkGettext(self):
f293e95b914d Code Style Checker: added check for the 'gettext' import statement
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6180
diff changeset
1273 """
f293e95b914d Code Style Checker: added check for the 'gettext' import statement
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6180
diff changeset
1274 Private method to check the 'gettext' import statement.
f293e95b914d Code Style Checker: added check for the 'gettext' import statement
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6180
diff changeset
1275 """
f293e95b914d Code Style Checker: added check for the 'gettext' import statement
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6180
diff changeset
1276 for node in ast.walk(self.__tree):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1277 if isinstance(node, ast.ImportFrom) and any(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1278 name.asname == "_" for name in node.names
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
1279 ):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1280 self.__error(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1281 node.lineno - 1, node.col_offset, "M711", node.names[0].name
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1282 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1283
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1284 def __checkBugBear(self):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1285 """
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
1286 Private method for bugbear checks.
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1287 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1288 visitor = BugBearVisitor()
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1289 visitor.visit(self.__tree)
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1290 for violation in visitor.violations:
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1291 node = violation[0]
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1292 reason = violation[1]
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1293 params = violation[2:]
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1294 self.__error(node.lineno - 1, node.col_offset, reason, *params)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1295
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1296 def __checkReturn(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1297 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1298 Private method to check return statements.
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1299 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1300 visitor = ReturnVisitor()
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1301 visitor.visit(self.__tree)
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1302 for violation in visitor.violations:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1303 node = violation[0]
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1304 reason = violation[1]
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
1305 self.__error(node.lineno - 1, node.col_offset, reason)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1306
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
1307 def __checkDateTime(self):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
1308 """
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
1309 Private method to check use of naive datetime functions.
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
1310 """
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1311 # step 1: generate an augmented node tree containing parent info
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1312 # for each child node
8198
1c765dc90c21 Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8168
diff changeset
1313 tree = copy.deepcopy(self.__tree)
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1314 for node in ast.walk(tree):
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1315 for childNode in ast.iter_child_nodes(node):
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1316 childNode._dtCheckerParent = node
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1317
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1318 # step 2: perform checks and report issues
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1319 visitor = DateTimeVisitor()
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1320 visitor.visit(tree)
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1321 for violation in visitor.violations:
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1322 node = violation[0]
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1323 reason = violation[1]
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7610
diff changeset
1324 self.__error(node.lineno - 1, node.col_offset, reason)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1325
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1326 def __checkSysVersion(self):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1327 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1328 Private method to check the use of sys.version and sys.version_info.
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1329 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1330 visitor = SysVersionVisitor()
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1331 visitor.visit(self.__tree)
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1332 for violation in visitor.violations:
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1333 node = violation[0]
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1334 reason = violation[1]
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
1335 self.__error(node.lineno - 1, node.col_offset, reason)
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1336
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1337 def __checkProperties(self):
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1338 """
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1339 Private method to check for issue with property related methods.
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1340 """
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1341 properties = []
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1342 for node in ast.walk(self.__tree):
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1343 if isinstance(node, ast.ClassDef):
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1344 properties.clear()
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1345
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1346 elif isinstance(node, ast.FunctionDef):
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1347 propertyCount = 0
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1348 for decorator in node.decorator_list:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1349 # property getter method
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1350 if isinstance(decorator, ast.Name) and decorator.id == "property":
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1351 propertyCount += 1
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1352 properties.append(node.name)
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1353 if len(node.args.args) != 1:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1354 self.__error(
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1355 node.lineno - 1,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1356 node.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1357 "M260",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1358 len(node.args.args),
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1359 )
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1360
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1361 if isinstance(decorator, ast.Attribute):
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1362 # property setter method
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1363 if decorator.attr == "setter":
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1364 propertyCount += 1
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1365 if node.name != decorator.value.id:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1366 if node.name in properties:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1367 self.__error(
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1368 node.lineno - 1,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1369 node.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1370 "M265",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1371 node.name,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1372 decorator.value.id,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1373 )
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1374 else:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1375 self.__error(
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1376 node.lineno - 1,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1377 node.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1378 "M263",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1379 decorator.value.id,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1380 node.name,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1381 )
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1382 if len(node.args.args) != 2:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1383 self.__error(
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1384 node.lineno - 1,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1385 node.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1386 "M261",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1387 len(node.args.args),
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1388 )
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1389
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1390 # property deleter method
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1391 if decorator.attr == "deleter":
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1392 propertyCount += 1
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1393 if node.name != decorator.value.id:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1394 if node.name in properties:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1395 self.__error(
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1396 node.lineno - 1,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1397 node.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1398 "M266",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1399 node.name,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1400 decorator.value.id,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1401 )
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1402 else:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1403 self.__error(
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1404 node.lineno - 1,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1405 node.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1406 "M264",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1407 decorator.value.id,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1408 node.name,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1409 )
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1410 if len(node.args.args) != 1:
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1411 self.__error(
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1412 node.lineno - 1,
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1413 node.col_offset,
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1414 "M262",
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1415 len(node.args.args),
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1416 )
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1417
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1418 if propertyCount > 1:
10884
2be906d60ffb Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10754
diff changeset
1419 self.__error(node.lineno - 1, node.col_offset, "M267", node.name)
10085
b5808c3a9967 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10048
diff changeset
1420
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1421 #######################################################################
10362
cfa7034cccf6 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10361
diff changeset
1422 ## The following methods check for implicitly concatenated strings.
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1423 ##
10997
d470b58626d2 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10884
diff changeset
1424 ## These methods are adapted from: flake8-implicit-str-concat v0.5.0
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1425 ## Original: Copyright (c) 2023 Dylan Turner
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1426 #######################################################################
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1427
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1428 if sys.version_info < (3, 12):
10371
1f54843e8152 Fixed an issue in the miscellaneous checker causing false reports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10362
diff changeset
1429
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1430 def __isImplicitStringConcat(self, first, second):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1431 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1432 Private method to check, if the given strings indicate an implicit string
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1433 concatenation.
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1434
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1435 @param first first token
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1436 @type tuple
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1437 @param second second token
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1438 @type tuple
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1439 @return flag indicating an implicit string concatenation
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10417
diff changeset
1440 @rtype bool
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1441 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1442 return first.type == second.type == tokenize.STRING
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1443
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1444 else:
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1445
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1446 def __isImplicitStringConcat(self, first, second):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1447 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1448 Private method to check, if the given strings indicate an implicit string
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1449 concatenation.
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1450
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1451 @param first first token
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1452 @type tuple
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1453 @param second second token
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1454 @type tuple
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1455 @return flag indicating an implicit string concatenation
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10417
diff changeset
1456 @rtype bool
10361
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1457 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1458 return (
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1459 (first.type == second.type == tokenize.STRING)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1460 or (
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1461 first.type == tokenize.STRING
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1462 and second.type == tokenize.FSTRING_START
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1463 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1464 or (
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1465 first.type == tokenize.FSTRING_END
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1466 and second.type == tokenize.STRING
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1467 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1468 or (
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1469 first.type == tokenize.FSTRING_END
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1470 and second.type == tokenize.FSTRING_START
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1471 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1472 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1473
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1474 def __checkImplicitStringConcat(self):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1475 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1476 Private method to check for implicitly concatenated strings.
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1477 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1478 tokensWithoutWhitespace = (
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1479 tok
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1480 for tok in self.__tokens
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1481 if tok.type
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1482 not in (
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1483 tokenize.NL,
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1484 tokenize.NEWLINE,
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1485 tokenize.INDENT,
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1486 tokenize.DEDENT,
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1487 tokenize.COMMENT,
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1488 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1489 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1490 for a, b in pairwise(tokensWithoutWhitespace):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1491 if self.__isImplicitStringConcat(a, b):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1492 self.__error(
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1493 a.end[0] - 1, a.end[1], "M851" if a.end[0] == b.start[0] else "M852"
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1494 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1495
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1496 def __checkExplicitStringConcat(self):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1497 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1498 Private method to check for explicitly concatenated strings.
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1499 """
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1500 for node in ast.walk(self.__tree):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1501 if (
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1502 isinstance(node, ast.BinOp)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1503 and isinstance(node.op, ast.Add)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1504 and all(
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1505 AstUtilities.isBaseString(operand)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1506 or isinstance(operand, ast.JoinedStr)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1507 for operand in (node.left, node.right)
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1508 )
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1509 ):
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1510 self.__error(node.lineno - 1, node.col_offset, "M853")
e6ff9a4f6ee5 Added checks for implicit string concatenation (based on flake8-implicit-str-concat 0.4.0) to the Miscellaneous checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10360
diff changeset
1511
11140
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1512 #################################################################################
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1513 ## The following method checks default match cases.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1514 #################################################################################
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1515
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1516 def __checkDefaultMatchCase(self):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1517 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1518 Private method to check the default match case.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1519 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1520 visitor = DefaultMatchCaseVisitor()
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1521 visitor.visit(self.__tree)
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1522 for violation in visitor.violations:
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1523 node = violation[0]
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1524 reason = violation[1]
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1525 self.__error(node.lineno - 1, node.col_offset, reason)
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
1526
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1527
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1528 class TextVisitor(ast.NodeVisitor):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1529 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1530 Class implementing a node visitor for bytes and str instances.
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1531
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1532 It tries to detect docstrings as string of the first expression of each
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1533 module, class or function.
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1534 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1535
9274
86fab0c74430 Added some TODO markers to update some checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
1536 # modeled after the string format flake8 extension
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1537
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1538 def __init__(self):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1539 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1540 Constructor
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1541 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
1542 super().__init__()
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1543 self.nodes = []
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1544 self.calls = {}
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1545
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1546 def __addNode(self, node):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1547 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1548 Private method to add a node to our list of nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1549
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1550 @param node reference to the node to add
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1551 @type ast.AST
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1552 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1553 if not hasattr(node, "is_docstring"):
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1554 node.is_docstring = False
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1555 self.nodes.append(node)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1556
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1557 def visit_Constant(self, node):
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1558 """
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1559 Public method to handle constant nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1560
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1561 @param node reference to the bytes node
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1562 @type ast.Constant
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1563 """
10119
64147a7e6393 Removed support for Python 3.7 because that is EOL.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10085
diff changeset
1564 if AstUtilities.isBaseString(node):
64147a7e6393 Removed support for Python 3.7 because that is EOL.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10085
diff changeset
1565 self.__addNode(node)
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1566 else:
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
1567 super().generic_visit(node)
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1568
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1569 def __visitDefinition(self, node):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1570 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1571 Private method handling class and function definitions.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1572
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1573 @param node reference to the node to handle
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1574 @type ast.FunctionDef, ast.AsyncFunctionDef or ast.ClassDef
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1575 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1576 # Manually traverse class or function definition
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1577 # * Handle decorators normally
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1578 # * Use special check for body content
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1579 # * Don't handle the rest (e.g. bases)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1580 for decorator in node.decorator_list:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1581 self.visit(decorator)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1582 self.__visitBody(node)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1583
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1584 def __visitBody(self, node):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1585 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1586 Private method to traverse the body of the node manually.
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1587
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1588 If the first node is an expression which contains a string or bytes it
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1589 marks that as a docstring.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1590
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1591 @param node reference to the node to traverse
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1592 @type ast.AST
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1593 """
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1594 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1595 node.body
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1596 and isinstance(node.body[0], ast.Expr)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1597 and AstUtilities.isBaseString(node.body[0].value)
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1598 ):
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1599 node.body[0].value.is_docstring = True
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1600
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1601 for subnode in node.body:
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1602 self.visit(subnode)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1603
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1604 def visit_Module(self, node):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1605 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1606 Public method to handle a module.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1607
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1608 @param node reference to the node to handle
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1609 @type ast.Module
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1610 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1611 self.__visitBody(node)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1612
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1613 def visit_ClassDef(self, node):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1614 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1615 Public method to handle a class definition.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1616
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1617 @param node reference to the node to handle
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1618 @type ast.ClassDef
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1619 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1620 # Skipped nodes: ('name', 'bases', 'keywords', 'starargs', 'kwargs')
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1621 self.__visitDefinition(node)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1622
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1623 def visit_FunctionDef(self, node):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1624 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1625 Public method to handle a function definition.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1626
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1627 @param node reference to the node to handle
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1628 @type ast.FunctionDef
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1629 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1630 # Skipped nodes: ('name', 'args', 'returns')
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1631 self.__visitDefinition(node)
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1632
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1633 def visit_AsyncFunctionDef(self, node):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1634 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1635 Public method to handle an asynchronous function definition.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1636
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1637 @param node reference to the node to handle
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1638 @type ast.AsyncFunctionDef
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1639 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1640 # Skipped nodes: ('name', 'args', 'returns')
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1641 self.__visitDefinition(node)
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
1642
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1643 def visit_Call(self, node):
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1644 """
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1645 Public method to handle a function call.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1646
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1647 @param node reference to the node to handle
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1648 @type ast.Call
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1649 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1650 if isinstance(node.func, ast.Attribute) and node.func.attr == "format":
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1651 if AstUtilities.isBaseString(node.func.value):
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1652 self.calls[node.func.value] = (node, False)
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1653 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1654 isinstance(node.func.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1655 and node.func.value.id == "str"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1656 and node.args
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1657 and AstUtilities.isBaseString(node.args[0])
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
1658 ):
4511
b5e4e7efa904 Added a checker for string format strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4510
diff changeset
1659 self.calls[node.args[0]] = (node, True)
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
1660 super().generic_visit(node)
4555
861e1741985c Adjustments to future imports for Python 2 compatibility.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4540
diff changeset
1661
6180
8d72871c16ba Code Style Checker: added checks for logging statements
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6178
diff changeset
1662
10175
57ed3cb66e9a Changed some code comments of adapted third party packages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10170
diff changeset
1663 #######################################################################
57ed3cb66e9a Changed some code comments of adapted third party packages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10170
diff changeset
1664 ## BugBearVisitor
57ed3cb66e9a Changed some code comments of adapted third party packages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10170
diff changeset
1665 ##
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1666 ## adapted from: flake8-bugbear v24.12.12
10175
57ed3cb66e9a Changed some code comments of adapted third party packages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10170
diff changeset
1667 ##
57ed3cb66e9a Changed some code comments of adapted third party packages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10170
diff changeset
1668 ## Original: Copyright (c) 2016 Łukasz Langa
57ed3cb66e9a Changed some code comments of adapted third party packages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10170
diff changeset
1669 #######################################################################
57ed3cb66e9a Changed some code comments of adapted third party packages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10170
diff changeset
1670
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1671 BugBearContext = namedtuple("BugBearContext", ["node", "stack"])
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1672
11000
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
1673
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1674 @dataclass
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1675 class M540CaughtException:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1676 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1677 Class to hold the data for a caught exception.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1678 """
11000
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
1679
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
1680 name: str
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1681 hasNote: bool
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1682
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1683
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1684 class M541UnhandledKeyType:
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1685 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1686 Class to hold a dictionary key of a type that we do not check for duplicates.
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1687 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1688
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1689
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1690 class M541VariableKeyType:
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1691 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1692 Class to hold the name of a variable key type.
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1693 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1694
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1695 def __init__(self, name):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1696 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1697 Constructor
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1698
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1699 @param name name of the variable key type
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1700 @type str
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1701 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1702 self.name = name
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1703
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1704
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1705 class BugBearVisitor(ast.NodeVisitor):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1706 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1707 Class implementing a node visitor to check for various topics.
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1708 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1709
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1710 CONTEXTFUL_NODES = (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1711 ast.Module,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1712 ast.ClassDef,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1713 ast.AsyncFunctionDef,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1714 ast.FunctionDef,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1715 ast.Lambda,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1716 ast.ListComp,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1717 ast.SetComp,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1718 ast.DictComp,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1719 ast.GeneratorExp,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1720 )
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1721
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1722 FUNCTION_NODES = (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1723 ast.AsyncFunctionDef,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1724 ast.FunctionDef,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1725 ast.Lambda,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1726 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1727
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1728 NodeWindowSize = 4
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1729
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1730 def __init__(self):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1731 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1732 Constructor
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1733 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
1734 super().__init__()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1735
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1736 self.nodeWindow = []
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
1737 self.violations = []
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1738 self.contexts = []
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1739
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1740 self.__M523Seen = set()
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1741 self.__M505Imports = set()
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
1742 self.__M540CaughtException = None
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1743
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1744 self.__inTryStar = ""
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1745
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1746 @property
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1747 def nodeStack(self):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1748 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1749 Public method to get a reference to the most recent node stack.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1750
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1751 @return reference to the most recent node stack
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1752 @rtype list
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1753 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1754 if len(self.contexts) == 0:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1755 return []
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1756
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1757 context, stack = self.contexts[-1]
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1758 return stack
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1759
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1760 def __isIdentifier(self, arg):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1761 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1762 Private method to check if arg is a valid identifier.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1763
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1764 See https://docs.python.org/2/reference/lexical_analysis.html#identifiers
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1765
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1766 @param arg reference to an argument node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1767 @type ast.Node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1768 @return flag indicating a valid identifier
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1769 @rtype TYPE
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1770 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1771 if not AstUtilities.isString(arg):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1772 return False
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1773
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1774 return (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1775 re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", AstUtilities.getValue(arg))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1776 is not None
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1777 )
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1778
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1779 def toNameStr(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1780 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1781 Public method to turn Name and Attribute nodes to strings, handling any
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1782 depth of attribute accesses.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1783
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1784
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1785 @param node reference to the node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1786 @type ast.Name or ast.Attribute
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1787 @return string representation
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1788 @rtype str
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1789 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1790 if isinstance(node, ast.Name):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1791 return node.id
10516
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1792 elif isinstance(node, ast.Call):
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1793 return self.toNameStr(node.func)
10516
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1794 elif isinstance(node, ast.Attribute):
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1795 inner = self.toNameStr(node.value)
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1796 if inner is None:
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1797 return None
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1798 return f"{inner}.{node.attr}"
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1799 else:
72baef0baa76 Miscellaneous Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10510
diff changeset
1800 return None
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1801
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1802 def __typesafeIssubclass(self, obj, classOrTuple):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1803 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1804 Private method implementing a type safe issubclass() function.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1805
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1806 @param obj reference to the object to be tested
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10371
diff changeset
1807 @type Any
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1808 @param classOrTuple type to check against
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1809 @type type
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1810 @return flag indicating a subclass
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1811 @rtype bool
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1812 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1813 try:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1814 return issubclass(obj, classOrTuple)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1815 except TypeError:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1816 # User code specifies a type that is not a type in our current run.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1817 # Might be their error, might be a difference in our environments.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1818 # We don't know so we ignore this.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1819 return False
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1820
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1821 def __getAssignedNames(self, loopNode):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1822 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1823 Private method to get the names of a for loop.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1824
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1825 @param loopNode reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1826 @type ast.For
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1827 @yield DESCRIPTION
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1828 @ytype TYPE
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1829 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1830 loopTargets = (ast.For, ast.AsyncFor, ast.comprehension)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1831 for node in self.__childrenInScope(loopNode):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1832 if isinstance(node, (ast.Assign)):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1833 for child in node.targets:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1834 yield from self.__namesFromAssignments(child)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1835 if isinstance(node, loopTargets + (ast.AnnAssign, ast.AugAssign)):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1836 yield from self.__namesFromAssignments(node.target)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1837
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1838 def __namesFromAssignments(self, assignTarget):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1839 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1840 Private method to get names of an assignment.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1841
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1842 @param assignTarget reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1843 @type ast.Node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1844 @yield name of the assignment
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1845 @ytype str
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1846 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1847 if isinstance(assignTarget, ast.Name):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1848 yield assignTarget.id
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1849 elif isinstance(assignTarget, ast.Starred):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1850 yield from self.__namesFromAssignments(assignTarget.value)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1851 elif isinstance(assignTarget, (ast.List, ast.Tuple)):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1852 for child in assignTarget.elts:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1853 yield from self.__namesFromAssignments(child)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1854
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1855 def __childrenInScope(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1856 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1857 Private method to get all child nodes in the given scope.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1858
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1859 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1860 @type ast.Node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1861 @yield reference to a child node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1862 @ytype ast.Node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1863 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1864 yield node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1865 if not isinstance(node, BugBearVisitor.FUNCTION_NODES):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1866 for child in ast.iter_child_nodes(node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
1867 yield from self.__childrenInScope(child)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
1868
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1869 def __flattenExcepthandler(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1870 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1871 Private method to flatten the list of exceptions handled by an except handler.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1872
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1873 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1874 @type ast.Node
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1875 @yield reference to the exception type node
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1876 @ytype ast.Node
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1877 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1878 if not isinstance(node, ast.Tuple):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1879 yield node
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1880 return
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1881
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1882 exprList = node.elts.copy()
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1883 while len(exprList):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1884 expr = exprList.pop(0)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1885 if isinstance(expr, ast.Starred) and isinstance(
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1886 expr.value, (ast.List, ast.Tuple)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1887 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1888 exprList.extend(expr.value.elts)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1889 continue
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1890 yield expr
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1891
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1892 def __checkRedundantExcepthandlers(self, names, node, inTryStar):
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1893 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1894 Private method to check for redundant exception types in an exception handler.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1895
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1896 @param names list of exception types to be checked
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1897 @type list of ast.Name
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1898 @param node reference to the exception handler node
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1899 @type ast.ExceptionHandler
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1900 @param inTryStar character indicating an 'except*' handler
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1901 @type str
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1902 @return tuple containing the error data
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1903 @rtype tuple of (ast.Node, str, str, str, str)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1904 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1905 redundantExceptions = {
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1906 "OSError": {
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1907 # All of these are actually aliases of OSError since Python 3.3
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1908 "IOError",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1909 "EnvironmentError",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1910 "WindowsError",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1911 "mmap.error",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1912 "socket.error",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1913 "select.error",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1914 },
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1915 "ValueError": {
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1916 "binascii.Error",
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1917 },
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1918 }
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1919
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1920 # See if any of the given exception names could be removed, e.g. from:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1921 # (MyError, MyError) # duplicate names
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1922 # (MyError, BaseException) # everything derives from the Base
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1923 # (Exception, TypeError) # builtins where one subclasses another
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1924 # (IOError, OSError) # IOError is an alias of OSError since Python3.3
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1925 # but note that other cases are impractical to handle from the AST.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1926 # We expect this is mostly useful for users who do not have the
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1927 # builtin exception hierarchy memorised, and include a 'shadowed'
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1928 # subtype without realising that it's redundant.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1929 good = sorted(set(names), key=names.index)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1930 if "BaseException" in good:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1931 good = ["BaseException"]
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1932 # Remove redundant exceptions that the automatic system either handles
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1933 # poorly (usually aliases) or can't be checked (e.g. it's not an
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1934 # built-in exception).
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1935 for primary, equivalents in redundantExceptions.items():
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1936 if primary in good:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1937 good = [g for g in good if g not in equivalents]
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1938
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1939 for name, other in itertools.permutations(tuple(good), 2):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1940 if (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1941 self.__typesafeIssubclass(
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1942 getattr(builtins, name, type), getattr(builtins, other, ())
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1943 )
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1944 and name in good
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1945 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1946 good.remove(name)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1947 if good != names:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1948 desc = good[0] if len(good) == 1 else "({0})".format(", ".join(good))
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1949 as_ = " as " + node.name if node.name is not None else ""
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
1950 return (node, "M514", ", ".join(names), as_, desc, inTryStar)
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1951
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1952 return None
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1953
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1954 def __walkList(self, nodes):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1955 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1956 Private method to walk a given list of nodes.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1957
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1958 @param nodes list of nodes to walk
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1959 @type list of ast.Node
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1960 @yield node references as determined by the ast.walk() function
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1961 @ytype ast.Node
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1962 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1963 for node in nodes:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1964 yield from ast.walk(node)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
1965
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1966 def __getNamesFromTuple(self, node):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1967 """
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1968 Private method to get the names from an ast.Tuple node.
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1969
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1970 @param node ast node to be processed
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1971 @type ast.Tuple
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1972 @yield names
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1973 @ytype str
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1974 """
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1975 for dim in node.elts:
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1976 if isinstance(dim, ast.Name):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1977 yield dim.id
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1978 elif isinstance(dim, ast.Tuple):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1979 yield from self.__getNamesFromTuple(dim)
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1980
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1981 def __getDictCompLoopAndNamedExprVarNames(self, node):
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1982 """
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1983 Private method to get the names of comprehension loop variables.
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1984
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1985 @param node ast node to be processed
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1986 @type ast.DictComp
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1987 @yield loop variable names
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1988 @ytype str
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1989 """
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1990 finder = NamedExprFinder()
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1991 for gen in node.generators:
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1992 if isinstance(gen.target, ast.Name):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1993 yield gen.target.id
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1994 elif isinstance(gen.target, ast.Tuple):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1995 yield from self.__getNamesFromTuple(gen.target)
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
1996
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1997 finder.visit(gen.ifs)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1998
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
1999 yield from finder.getNames().keys()
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2000
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2001 def __inClassInit(self):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2002 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2003 Private method to check, if we are inside an '__init__' method.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2004
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2005 @return flag indicating being within the '__init__' method
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2006 @rtype bool
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2007 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2008 return (
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2009 len(self.contexts) >= 2
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2010 and isinstance(self.contexts[-2].node, ast.ClassDef)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2011 and isinstance(self.contexts[-1].node, ast.FunctionDef)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2012 and self.contexts[-1].node.name == "__init__"
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2013 )
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2014
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2015 def visit_Return(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2016 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2017 Public method to handle 'Return' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2018
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2019 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2020 @type ast.Return
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2021 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2022 if self.__inClassInit() and node.value is not None:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2023 self.violations.append((node, "M537"))
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2024
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2025 self.generic_visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2026
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2027 def visit_Yield(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2028 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2029 Public method to handle 'Yield' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2030
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2031 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2032 @type ast.Yield
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2033 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2034 if self.__inClassInit():
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2035 self.violations.append((node, "M537"))
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2036
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2037 self.generic_visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2038
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2039 def visit_YieldFrom(self, node) -> None:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2040 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2041 Public method to handle 'YieldFrom' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2042
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2043 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2044 @type ast.YieldFrom
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2045 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2046 if self.__inClassInit():
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2047 self.violations.append((node, "M537"))
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2048
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2049 self.generic_visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2050
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2051 def visit(self, node):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2052 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2053 Public method to traverse a given AST node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2054
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2055 @param node AST node to be traversed
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2056 @type ast.Node
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2057 """
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2058 isContextful = isinstance(node, BugBearVisitor.CONTEXTFUL_NODES)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2059
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2060 if isContextful:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2061 context = BugBearContext(node, [])
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2062 self.contexts.append(context)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2063
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2064 self.nodeStack.append(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2065 self.nodeWindow.append(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2066 self.nodeWindow = self.nodeWindow[-BugBearVisitor.NodeWindowSize :]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2067
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
2068 super().visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2069
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2070 self.nodeStack.pop()
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2071
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2072 if isContextful:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2073 self.contexts.pop()
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2074
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2075 self.__checkForM518(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2076
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2077 def visit_ExceptHandler(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2078 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2079 Public method to handle exception handlers.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2080
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2081 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2082 @type ast.ExceptHandler
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2083 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2084 if node.type is None:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2085 # bare except is handled by pycodestyle already
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2086 self.generic_visit(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2087 return
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2088
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2089 oldM540CaughtException = self.__M540CaughtException
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2090 if node.name is None:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2091 self.__M540CaughtException = None
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2092 else:
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2093 self.__M540CaughtException = M540CaughtException(node.name, False)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2094
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2095 names = self.__checkForM513_M514_M529_M530(node)
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2096
11000
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
2097 if "BaseException" in names and not ExceptBaseExceptionVisitor(node).reRaised():
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2098 self.violations.append((node, "M536"))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2099
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2100 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2101
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2102 if (
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2103 self.__M540CaughtException is not None
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2104 and self.__M540CaughtException.hasNote
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2105 ):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2106 self.violations.append((node, "M540"))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2107 self.__M540CaughtException = oldM540CaughtException
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2108
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2109 def visit_UAdd(self, node):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2110 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2111 Public method to handle unary additions.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2112
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2113 @param node reference to the node to be processed
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2114 @type ast.UAdd
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2115 """
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2116 trailingNodes = list(map(type, self.nodeWindow[-4:]))
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2117 if trailingNodes == [ast.UnaryOp, ast.UAdd, ast.UnaryOp, ast.UAdd]:
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2118 originator = self.nodeWindow[-4]
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2119 self.violations.append((originator, "M502"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2120
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2121 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2122
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2123 def visit_Call(self, node):
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2124 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2125 Public method to handle a function call.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2126
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2127 @param node reference to the node to be processed
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2128 @type ast.Call
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2129 """
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2130 isM540AddNote = False
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2131
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2132 if isinstance(node.func, ast.Attribute):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2133 self.__checkForM505(node)
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2134 isM540AddNote = self.__checkForM540AddNote(node.func)
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2135 else:
8243
cc717c2ae956 Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 2).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8228
diff changeset
2136 with contextlib.suppress(AttributeError, IndexError):
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2137 # bad super() call
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2138 if isinstance(node.func, ast.Name) and node.func.id == "super":
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2139 args = node.args
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2140 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2141 len(args) == 2
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2142 and isinstance(args[0], ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2143 and isinstance(args[0].value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2144 and args[0].value.id == "self"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2145 and args[0].attr == "__class__"
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2146 ):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2147 self.violations.append((node, "M582"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2148
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2149 # bad getattr and setattr
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2150 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2151 node.func.id in ("getattr", "hasattr")
10169
0f70a4ef4592 Made some modification in preparation for Python 3.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10163
diff changeset
2152 and node.args[1].value == "__call__"
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2153 ):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2154 self.violations.append((node, "M504"))
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2155 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2156 node.func.id == "getattr"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2157 and len(node.args) == 2
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2158 and self.__isIdentifier(node.args[1])
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2159 and iskeyword(AstUtilities.getValue(node.args[1]))
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2160 ):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2161 self.violations.append((node, "M509"))
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2162 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2163 node.func.id == "setattr"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2164 and len(node.args) == 3
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2165 and self.__isIdentifier(node.args[1])
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2166 and iskeyword(AstUtilities.getValue(node.args[1]))
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2167 ):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2168 self.violations.append((node, "M510"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2169
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2170 self.__checkForM526(node)
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2171
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2172 self.__checkForM528(node)
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
2173 self.__checkForM534(node)
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2174 self.__checkForM539(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2175
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2176 # no need for copying, if used in nested calls it will be set to None
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2177 currentM540CaughtException = self.__M540CaughtException
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2178 if not isM540AddNote:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2179 self.__checkForM540Usage(node.args)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2180 self.__checkForM540Usage(node.keywords)
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2181
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2182 self.generic_visit(node)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2183
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2184 if isM540AddNote:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2185 # Avoid nested calls within the parameter list using the variable itself.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2186 # e.g. `e.add_note(str(e))`
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2187 self.__M540CaughtException = currentM540CaughtException
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2188
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2189 def visit_Module(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2190 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2191 Public method to handle a module node.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2192
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2193 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2194 @type ast.Module
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2195 """
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2196 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2197
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2198 def visit_Assign(self, node):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2199 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2200 Public method to handle assignments.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2201
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2202 @param node reference to the node to be processed
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2203 @type ast.Assign
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2204 """
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2205 self.__checkForM540Usage(node.value)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2206 if len(node.targets) == 1:
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2207 target = node.targets[0]
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
2208 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2209 isinstance(target, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2210 and isinstance(target.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2211 and (target.value.id, target.attr) == ("os", "environ")
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
2212 ):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2213 self.violations.append((node, "M503"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2214
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2215 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2216
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2217 def visit_For(self, node):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2218 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2219 Public method to handle 'for' statements.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2220
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2221 @param node reference to the node to be processed
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2222 @type ast.For
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2223 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2224 self.__checkForM507(node)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2225 self.__checkForM520(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2226 self.__checkForM523(node)
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2227 self.__checkForM531(node)
10639
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
2228 self.__checkForM569(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2229
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2230 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2231
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2232 def visit_AsyncFor(self, node):
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2233 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2234 Public method to handle 'for' statements.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2235
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2236 @param node reference to the node to be processed
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2237 @type ast.AsyncFor
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2238 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2239 self.__checkForM507(node)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2240 self.__checkForM520(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2241 self.__checkForM523(node)
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2242 self.__checkForM531(node)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2243
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2244 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2245
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2246 def visit_While(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2247 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2248 Public method to handle 'while' statements.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2249
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2250 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2251 @type ast.While
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2252 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2253 self.__checkForM523(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2254
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2255 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2256
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2257 def visit_ListComp(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2258 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2259 Public method to handle list comprehensions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2260
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2261 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2262 @type ast.ListComp
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2263 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2264 self.__checkForM523(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2265
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2266 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2267
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2268 def visit_SetComp(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2269 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2270 Public method to handle set comprehensions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2271
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2272 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2273 @type ast.SetComp
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2274 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2275 self.__checkForM523(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2276
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2277 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2278
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2279 def visit_DictComp(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2280 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2281 Public method to handle dictionary comprehensions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2282
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2283 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2284 @type ast.DictComp
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2285 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2286 self.__checkForM523(node)
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2287 self.__checkForM535(node)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2288
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2289 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2290
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2291 def visit_GeneratorExp(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2292 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2293 Public method to handle generator expressions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2294
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2295 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2296 @type ast.GeneratorExp
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2297 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2298 self.__checkForM523(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2299
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
2300 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2301
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2302 def visit_Assert(self, node):
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2303 """
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2304 Public method to handle 'assert' statements.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2305
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2306 @param node reference to the node to be processed
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2307 @type ast.Assert
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2308 """
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
2309 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2310 AstUtilities.isNameConstant(node.test)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2311 and AstUtilities.getValue(node.test) is False
7256
4ef3b78ebb4e Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7249
diff changeset
2312 ):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2313 self.violations.append((node, "M511"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2314
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2315 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2316
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2317 def visit_AsyncFunctionDef(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2318 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2319 Public method to handle async function definitions.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2320
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2321 @param node reference to the node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2322 @type ast.AsyncFunctionDef
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2323 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2324 self.__checkForM506_M508(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2325
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2326 self.generic_visit(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2327
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2328 def visit_FunctionDef(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2329 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2330 Public method to handle function definitions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2331
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2332 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2333 @type ast.FunctionDef
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2334 """
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2335 self.__checkForM506_M508(node)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2336 self.__checkForM519(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2337 self.__checkForM521(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2338
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2339 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2340
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2341 def visit_ClassDef(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2342 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2343 Public method to handle class definitions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2344
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2345 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2346 @type ast.ClassDef
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2347 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2348 self.__checkForM521(node)
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2349 self.__checkForM524_M527(node)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2350
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2351 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2352
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2353 def visit_Try(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2354 """
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2355 Public method to handle 'try' statements.
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2356
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2357 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2358 @type ast.Try
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2359 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2360 self.__checkForM512(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2361 self.__checkForM525(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2362
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2363 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2364
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2365 def visit_TryStar(self, node):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2366 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2367 Public method to handle 'except*' statements.
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2368
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2369 @param node reference to the node to be processed
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2370 @type ast.TryStar
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2371 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2372 outerTryStar = self.__inTryStar
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2373 self.__inTryStar = "*"
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2374 self.visit_Try(node)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2375 self.__inTryStar = outerTryStar
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2376
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2377 def visit_Compare(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2378 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2379 Public method to handle comparison statements.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2380
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2381 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2382 @type ast.Compare
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2383 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2384 self.__checkForM515(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2385
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2386 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2387
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2388 def visit_Raise(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2389 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2390 Public method to handle 'raise' statements.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2391
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2392 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2393 @type ast.Raise
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2394 """
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2395 if node.exc is None:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2396 self.__M540CaughtException = None
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2397 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2398 self.__checkForM540Usage(node.exc)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2399 self.__checkForM540Usage(node.cause)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2400 self.__checkForM516(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2401
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2402 self.generic_visit(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2403
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2404 def visit_With(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2405 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2406 Public method to handle 'with' statements.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2407
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2408 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2409 @type ast.With
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2410 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2411 self.__checkForM517(node)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2412 self.__checkForM522(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2413
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2414 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2415
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2416 def visit_JoinedStr(self, node):
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2417 """
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2418 Public method to handle f-string arguments.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2419
7021
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2420 @param node reference to the node to be processed
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2421 @type ast.JoinedStr
2894aa889a4e MiscellaneousChecker: added checks for use of 'gettattr' and 'setattr', bas super() calls and 'assert False' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
2422 """
7894
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
2423 for value in node.values:
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
2424 if isinstance(value, ast.FormattedValue):
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
2425 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2426
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2427 self.violations.append((node, "M581"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2428
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2429 def visit_AnnAssign(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2430 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2431 Public method to check annotated assign statements.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2432
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2433 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2434 @type ast.AnnAssign
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2435 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2436 self.__checkForM532(node)
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2437 self.__checkForM540Usage(node.value)
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2438
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2439 self.generic_visit(node)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2440
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2441 def visit_Import(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2442 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2443 Public method to check imports.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2444
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2445 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2446 @type ast.Import
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2447 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2448 self.__checkForM505(node)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2449
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2450 self.generic_visit(node)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2451
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2452 def visit_ImportFrom(self, node):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2453 """
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2454 Public method to check from imports.
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2455
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2456 @param node reference to the node to be processed
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2457 @type ast.Import
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2458 """
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2459 self.visit_Import(node)
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2460
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2461 def visit_Set(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2462 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2463 Public method to check a set.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2464
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2465 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2466 @type ast.Set
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2467 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2468 self.__checkForM533(node)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2469
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2470 self.generic_visit(node)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2471
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2472 def visit_Dict(self, node):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2473 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2474 Public method to check a dictionary.
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2475
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2476 @param node reference to the node to be processed
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2477 @type ast.Dict
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2478 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2479 self.__checkForM541(node)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2480
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2481 self.generic_visit(node)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2482
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2483 def __checkForM505(self, node):
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2484 """
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2485 Private method to check the use of *strip().
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2486
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2487 @param node reference to the node to be processed
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2488 @type ast.Call
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
2489 """
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2490 if isinstance(node, ast.Import):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2491 for name in node.names:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2492 self.__M505Imports.add(name.asname or name.name)
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2493 elif isinstance(node, ast.ImportFrom):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2494 for name in node.names:
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2495 self.__M505Imports.add(f"{node.module}.{name.name or name.asname}")
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2496 elif isinstance(node, ast.Call) and isinstance(node.func, ast.Attribute):
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2497 if node.func.attr not in ("lstrip", "rstrip", "strip"):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2498 return # method name doesn't match
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2499
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2500 if (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2501 isinstance(node.func.value, ast.Name)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2502 and node.func.value.id in self.__M505Imports
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2503 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2504 return # method is being run on an imported module
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2505
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2506 if len(node.args) != 1 or not AstUtilities.isString(node.args[0]):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2507 return # used arguments don't match the builtin strip
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2508
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
2509 value = AstUtilities.getValue(node.args[0])
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
2510 if len(value) == 1:
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2511 return # stripping just one character
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2512
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
2513 if len(value) == len(set(value)):
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2514 return # no characters appear more than once
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2515
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2516 self.violations.append((node, "M505"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2517
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2518 def __checkForM506_M508(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2519 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2520 Private method to check the use of mutable literals, comprehensions and calls.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2521
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2522 @param node reference to the node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2523 @type ast.AsyncFunctionDef or ast.FunctionDef
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2524 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2525 visitor = FunctionDefDefaultsVisitor("M506", "M508")
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2526 visitor.visit(node.args.defaults + node.args.kw_defaults)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2527 self.violations.extend(visitor.errors)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2528
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2529 def __checkForM507(self, node):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2530 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2531 Private method to check for unused loop variables.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2532
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2533 @param node reference to the node to be processed
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2534 @type ast.For or ast.AsyncFor
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2535 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2536 targets = NameFinder()
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2537 targets.visit(node.target)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
2538 ctrlNames = set(filter(lambda s: not s.startswith("_"), targets.getNames()))
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2539 body = NameFinder()
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2540 for expr in node.body:
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2541 body.visit(expr)
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2542 usedNames = set(body.getNames())
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2543 for name in sorted(ctrlNames - usedNames):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2544 n = targets.getNames()[name][0]
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2545 self.violations.append((n, "M507", name))
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
2546
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2547 def __checkForM512(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2548 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2549 Private method to check for return/continue/break inside finally blocks.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2550
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2551 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2552 @type ast.Try
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2553 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2554
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2555 def _loop(node, badNodeTypes):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2556 if isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef)):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2557 return
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2558
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2559 if isinstance(node, (ast.While, ast.For)):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2560 badNodeTypes = (ast.Return,)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2561
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2562 elif isinstance(node, badNodeTypes):
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2563 self.violations.append((node, "M512", self.__inTryStar))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2564
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2565 for child in ast.iter_child_nodes(node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2566 _loop(child, badNodeTypes)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2567
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2568 for child in node.finalbody:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2569 _loop(child, (ast.Return, ast.Continue, ast.Break))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2570
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2571 def __checkForM513_M514_M529_M530(self, node):
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2572 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2573 Private method to check various exception handler situations.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2574
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2575 @param node reference to the node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2576 @type ast.ExceptHandler
11000
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
2577 @return list of exception handler names
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
2578 @rtype list of str
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2579 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2580 handlers = self.__flattenExcepthandler(node.type)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2581 names = []
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2582 badHandlers = []
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2583 ignoredHandlers = []
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2584
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2585 for handler in handlers:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2586 if isinstance(handler, (ast.Name, ast.Attribute)):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2587 name = self.toNameStr(handler)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2588 if name is None:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2589 ignoredHandlers.append(handler)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2590 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2591 names.append(name)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2592 elif isinstance(handler, (ast.Call, ast.Starred)):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2593 ignoredHandlers.append(handler)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2594 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2595 badHandlers.append(handler)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2596 if badHandlers:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2597 self.violations.append((node, "M530"))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2598 if len(names) == 0 and not badHandlers and not ignoredHandlers:
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2599 self.violations.append((node, "M529", self.__inTryStar))
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2600 elif (
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2601 len(names) == 1
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2602 and not badHandlers
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2603 and not ignoredHandlers
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2604 and isinstance(node.type, ast.Tuple)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2605 ):
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2606 self.violations.append((node, "M513", *names, self.__inTryStar))
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2607 else:
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2608 maybeError = self.__checkRedundantExcepthandlers(
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2609 names, node, self.__inTryStar
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2610 )
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2611 if maybeError is not None:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2612 self.violations.append(maybeError)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2613 return names
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2614
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2615 def __checkForM515(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2616 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2617 Private method to check for pointless comparisons.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2618
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2619 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2620 @type ast.Compare
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2621 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2622 if isinstance(self.nodeStack[-2], ast.Expr):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2623 self.violations.append((node, "M515"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2624
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2625 def __checkForM516(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2626 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2627 Private method to check for raising a literal instead of an exception.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2628
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2629 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2630 @type ast.Raise
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2631 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2632 if (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2633 AstUtilities.isNameConstant(node.exc)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2634 or AstUtilities.isNumber(node.exc)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2635 or AstUtilities.isString(node.exc)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2636 ):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2637 self.violations.append((node, "M516"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2638
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2639 def __checkForM517(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2640 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2641 Private method to check for use of the evil syntax
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2642 'with assertRaises(Exception): or 'with pytest.raises(Exception):'.
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2643
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2644 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2645 @type ast.With
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2646 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2647 item = node.items[0]
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2648 itemContext = item.context_expr
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2649 if (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2650 hasattr(itemContext, "func")
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2651 and (
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2652 (
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2653 isinstance(itemContext.func, ast.Attribute)
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2654 and (
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2655 itemContext.func.attr == "assertRaises"
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2656 or (
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2657 itemContext.func.attr == "raises"
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2658 and isinstance(itemContext.func.value, ast.Name)
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2659 and itemContext.func.value.id == "pytest"
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2660 and "match" not in (kwd.arg for kwd in itemContext.keywords)
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2661 )
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2662 )
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2663 )
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2664 or (
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2665 isinstance(itemContext.func, ast.Name)
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2666 and itemContext.func.id == "raises"
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2667 and isinstance(itemContext.func.ctx, ast.Load)
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
2668 and "pytest.raises" in self.__M505Imports
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2669 and "match" not in (kwd.arg for kwd in itemContext.keywords)
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2670 )
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2671 )
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2672 and len(itemContext.args) == 1
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2673 and isinstance(itemContext.args[0], ast.Name)
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2674 and itemContext.args[0].id in ("Exception", "BaseException")
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2675 and not item.optional_vars
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2676 ):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2677 self.violations.append((node, "M517"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2678
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2679 def __checkForM518(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2680 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2681 Private method to check for useless expressions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2682
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2683 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2684 @type ast.FunctionDef
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2685 """
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2686 if not isinstance(node, ast.Expr):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2687 return
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2688
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2689 if isinstance(
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2690 node.value,
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2691 (ast.List, ast.Set, ast.Dict, ast.Tuple),
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2692 ) or (
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2693 isinstance(node.value, ast.Constant)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2694 and (
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2695 isinstance(
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2696 node.value.value,
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2697 (int, float, complex, bytes, bool),
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2698 )
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2699 or node.value.value is None
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2700 )
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2701 ):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
2702 self.violations.append((node, "M518", node.value.__class__.__name__))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2703
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2704 def __checkForM519(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2705 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2706 Private method to check for use of 'functools.lru_cache' or 'functools.cache'.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2707
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2708 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2709 @type ast.FunctionDef
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2710 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2711 caches = {
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2712 "functools.cache",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2713 "functools.lru_cache",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2714 "cache",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2715 "lru_cache",
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2716 }
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2717
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2718 if (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2719 len(node.decorator_list) == 0
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2720 or len(self.contexts) < 2
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2721 or not isinstance(self.contexts[-2].node, ast.ClassDef)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2722 ):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2723 return
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2724
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2725 # Preserve decorator order so we can get the lineno from the decorator node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2726 # rather than the function node (this location definition changes in Python 3.8)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2727 resolvedDecorators = (
11000
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
2728 ".".join(composeCallPath(decorator)) for decorator in node.decorator_list
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2729 )
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2730 for idx, decorator in enumerate(resolvedDecorators):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2731 if decorator in {"classmethod", "staticmethod"}:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2732 return
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2733
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2734 if decorator in caches:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2735 self.violations.append((node.decorator_list[idx], "M519"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2736 return
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2737
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2738 def __checkForM520(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2739 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2740 Private method to check for a loop that modifies its iterable.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2741
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2742 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2743 @type ast.For or ast.AsyncFor
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2744 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2745 targets = NameFinder()
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2746 targets.visit(node.target)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2747 ctrlNames = set(targets.getNames())
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2748
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2749 iterset = M520NameFinder()
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2750 iterset.visit(node.iter)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2751 itersetNames = set(iterset.getNames())
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2752
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2753 for name in sorted(ctrlNames):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2754 if name in itersetNames:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2755 n = targets.getNames()[name][0]
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2756 self.violations.append((n, "M520"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2757
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2758 def __checkForM521(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2759 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2760 Private method to check for use of an f-string as docstring.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2761
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2762 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2763 @type ast.FunctionDef or ast.ClassDef
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2764 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2765 if (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2766 node.body
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2767 and isinstance(node.body[0], ast.Expr)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2768 and isinstance(node.body[0].value, ast.JoinedStr)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2769 ):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2770 self.violations.append((node.body[0].value, "M521"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2771
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2772 def __checkForM522(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2773 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2774 Private method to check for use of an f-string as docstring.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2775
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2776 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2777 @type ast.With
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2778 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2779 item = node.items[0]
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2780 itemContext = item.context_expr
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2781 if (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2782 hasattr(itemContext, "func")
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2783 and hasattr(itemContext.func, "value")
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2784 and hasattr(itemContext.func.value, "id")
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2785 and itemContext.func.value.id == "contextlib"
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2786 and hasattr(itemContext.func, "attr")
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2787 and itemContext.func.attr == "suppress"
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2788 and len(itemContext.args) == 0
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2789 ):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2790 self.violations.append((node, "M522"))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2791
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2792 def __checkForM523(self, loopNode):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2793 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2794 Private method to check that functions (including lambdas) do not use loop
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2795 variables.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2796
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2797 @param loopNode reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2798 @type ast.For, ast.AsyncFor, ast.While, ast.ListComp, ast.SetComp,ast.DictComp,
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2799 or ast.GeneratorExp
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2800 """
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2801 safe_functions = []
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2802 suspiciousVariables = []
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2803 for node in ast.walk(loopNode):
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2804 # check if function is immediately consumed to avoid false alarm
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2805 if isinstance(node, ast.Call):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2806 # check for filter&reduce
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2807 if (
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2808 isinstance(node.func, ast.Name)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2809 and node.func.id in ("filter", "reduce", "map")
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2810 ) or (
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2811 isinstance(node.func, ast.Attribute)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2812 and node.func.attr == "reduce"
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2813 and isinstance(node.func.value, ast.Name)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2814 and node.func.value.id == "functools"
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2815 ):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2816 for arg in node.args:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2817 if isinstance(arg, BugBearVisitor.FUNCTION_NODES):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2818 safe_functions.append(arg)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2819
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2820 # check for key=
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2821 for keyword in node.keywords:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2822 if keyword.arg == "key" and isinstance(
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2823 keyword.value, BugBearVisitor.FUNCTION_NODES
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2824 ):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2825 safe_functions.append(keyword.value)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2826
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2827 # mark `return lambda: x` as safe
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2828 # does not (currently) check inner lambdas in a returned expression
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2829 # e.g. `return (lambda: x, )
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2830 if isinstance(node, ast.Return) and isinstance(
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2831 node.value, BugBearVisitor.FUNCTION_NODES
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2832 ):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2833 safe_functions.append(node.value)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2834
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2835 # find unsafe functions
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2836 if (
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2837 isinstance(node, BugBearVisitor.FUNCTION_NODES)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2838 and node not in safe_functions
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2839 ):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2840 argnames = {
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2841 arg.arg for arg in ast.walk(node.args) if isinstance(arg, ast.arg)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2842 }
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2843 if isinstance(node, ast.Lambda):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2844 bodyNodes = ast.walk(node.body)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2845 else:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2846 bodyNodes = itertools.chain.from_iterable(map(ast.walk, node.body))
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2847 errors = []
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2848 for name in bodyNodes:
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2849 if isinstance(name, ast.Name) and name.id not in argnames:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2850 if isinstance(name.ctx, ast.Load):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2851 errors.append((name.lineno, name.col_offset, name.id, name))
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2852 elif isinstance(name.ctx, ast.Store):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2853 argnames.add(name.id)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2854 for err in errors:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2855 if err[2] not in argnames and err not in self.__M523Seen:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2856 self.__M523Seen.add(err) # dedupe across nested loops
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2857 suspiciousVariables.append(err)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2858
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2859 if suspiciousVariables:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2860 reassignedInLoop = set(self.__getAssignedNames(loopNode))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2861
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2862 for err in sorted(suspiciousVariables):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2863 if reassignedInLoop.issuperset(err[2]):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2864 self.violations.append((err[3], "M523", err[2]))
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2865
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2866 def __checkForM524_M527(self, node):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2867 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2868 Private method to check for inheritance from abstract classes in abc and lack of
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2869 any methods decorated with abstract*.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2870
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2871 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2872 @type ast.ClassDef
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2873 """ # __IGNORE_WARNING_D234r__
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2874
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2875 def isAbcClass(value, name="ABC"):
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2876 if isinstance(value, ast.keyword):
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2877 return value.arg == "metaclass" and isAbcClass(value.value, "ABCMeta")
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2878
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2879 # class foo(ABC)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2880 # class foo(abc.ABC)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2881 return (isinstance(value, ast.Name) and value.id == name) or (
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2882 isinstance(value, ast.Attribute)
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2883 and value.attr == name
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2884 and isinstance(value.value, ast.Name)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2885 and value.value.id == "abc"
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2886 )
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2887
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2888 def isAbstractDecorator(expr):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2889 return (isinstance(expr, ast.Name) and expr.id[:8] == "abstract") or (
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2890 isinstance(expr, ast.Attribute) and expr.attr[:8] == "abstract"
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2891 )
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2892
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2893 def isOverload(expr):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2894 return (isinstance(expr, ast.Name) and expr.id == "overload") or (
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2895 isinstance(expr, ast.Attribute) and expr.attr == "overload"
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2896 )
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2897
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2898 def emptyBody(body):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2899 def isStrOrEllipsis(node):
10170
6cf1ee737d8f Corrected some more code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10169
diff changeset
2900 return isinstance(node, ast.Constant) and (
6cf1ee737d8f Corrected some more code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10169
diff changeset
2901 node.value is Ellipsis or isinstance(node.value, str)
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2902 )
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2903
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2904 # Function body consist solely of `pass`, `...`, and/or (doc)string literals
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2905 return all(
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2906 isinstance(stmt, ast.Pass)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2907 or (isinstance(stmt, ast.Expr) and isStrOrEllipsis(stmt.value))
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2908 for stmt in body
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2909 )
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2910
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2911 # don't check multiple inheritance
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2912 if len(node.bases) + len(node.keywords) > 1:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2913 return
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2914
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2915 # only check abstract classes
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2916 if not any(map(isAbcClass, (*node.bases, *node.keywords))):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2917 return
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2918
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2919 hasMethod = False
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2920 hasAbstractMethod = False
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2921
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2922 if not any(map(isAbcClass, (*node.bases, *node.keywords))):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2923 return
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2924
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2925 for stmt in node.body:
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2926 # Ignore abc's that declares a class attribute that must be set
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2927 if isinstance(stmt, ast.AnnAssign) and stmt.value is None:
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2928 hasAbstractMethod = True
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2929 continue
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2930
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2931 # only check function defs
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2932 if not isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef)):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2933 continue
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2934 hasMethod = True
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2935
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2936 hasAbstractDecorator = any(map(isAbstractDecorator, stmt.decorator_list))
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2937
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2938 hasAbstractMethod |= hasAbstractDecorator
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2939
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2940 if (
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2941 not hasAbstractDecorator
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2942 and emptyBody(stmt.body)
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2943 and not any(map(isOverload, stmt.decorator_list))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2944 ):
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2945 self.violations.append((stmt, "M527", stmt.name))
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2946
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2947 if hasMethod and not hasAbstractMethod:
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2948 self.violations.append((node, "M524", node.name))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2949
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2950 def __checkForM525(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2951 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2952 Private method to check for exceptions being handled multiple times.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2953
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2954 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2955 @type ast.Try
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2956 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2957 seen = []
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2958
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2959 for handler in node.handlers:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2960 if isinstance(handler.type, (ast.Name, ast.Attribute)):
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2961 name = ".".join(composeCallPath(handler.type))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2962 seen.append(name)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2963 elif isinstance(handler.type, ast.Tuple):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2964 # to avoid checking the same as M514, remove duplicates per except
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2965 uniques = set()
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2966 for entry in handler.type.elts:
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
2967 name = ".".join(composeCallPath(entry))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2968 uniques.add(name)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2969 seen.extend(uniques)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2970
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2971 # sort to have a deterministic output
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2972 duplicates = sorted({x for x in seen if seen.count(x) > 1})
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2973 for duplicate in duplicates:
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
2974 self.violations.append((node, "M525", duplicate, self.__inTryStar))
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
2975
9595
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2976 def __checkForM526(self, node):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2977 """
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2978 Private method to check for Star-arg unpacking after keyword argument.
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2979
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2980 @param node reference to the node to be processed
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2981 @type ast.Call
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2982 """
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2983 if not node.keywords:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2984 return
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2985
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2986 starreds = [arg for arg in node.args if isinstance(arg, ast.Starred)]
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2987 if not starreds:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2988 return
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2989
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2990 firstKeyword = node.keywords[0].value
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2991 for starred in starreds:
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2992 if (starred.lineno, starred.col_offset) > (
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2993 firstKeyword.lineno,
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2994 firstKeyword.col_offset,
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2995 ):
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2996 self.violations.append((node, "M526"))
2bd590c40309 Updated some checker methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9482
diff changeset
2997
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2998 def __checkForM528(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
2999 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3000 Private method to check for warn without stacklevel.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3001
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3002 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3003 @type ast.Call
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3004 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3005 if (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3006 isinstance(node.func, ast.Attribute)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3007 and node.func.attr == "warn"
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3008 and isinstance(node.func.value, ast.Name)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3009 and node.func.value.id == "warnings"
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3010 and not any(kw.arg == "stacklevel" for kw in node.keywords)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3011 and len(node.args) < 3
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3012 and not any(isinstance(a, ast.Starred) for a in node.args)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3013 and not any(kw.arg is None for kw in node.keywords)
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3014 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3015 self.violations.append((node, "M528"))
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3016
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3017 def __checkForM531(self, loopNode):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3018 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3019 Private method to check that 'itertools.groupby' isn't iterated over more than
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3020 once.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3021
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3022 A warning is emitted when the generator returned by 'groupby()' is used
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3023 more than once inside a loop body or when it's used in a nested loop.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3024
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3025 @param loopNode reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3026 @type ast.For or ast.AsyncFor
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3027 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3028 # for <loop_node.target> in <loop_node.iter>: ...
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3029 if isinstance(loopNode.iter, ast.Call):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3030 node = loopNode.iter
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3031 if (isinstance(node.func, ast.Name) and node.func.id in ("groupby",)) or (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3032 isinstance(node.func, ast.Attribute)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3033 and node.func.attr == "groupby"
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3034 and isinstance(node.func.value, ast.Name)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3035 and node.func.value.id == "itertools"
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3036 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3037 # We have an invocation of groupby which is a simple unpacking
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3038 if isinstance(loopNode.target, ast.Tuple) and isinstance(
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3039 loopNode.target.elts[1], ast.Name
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3040 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3041 groupName = loopNode.target.elts[1].id
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3042 else:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3043 # Ignore any 'groupby()' invocation that isn't unpacked
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3044 return
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3045
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3046 numUsages = 0
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3047 for node in self.__walkList(loopNode.body):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3048 # Handled nested loops
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3049 if isinstance(node, ast.For):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3050 for nestedNode in self.__walkList(node.body):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3051 if (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3052 isinstance(nestedNode, ast.Name)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3053 and nestedNode.id == groupName
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3054 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3055 self.violations.append((nestedNode, "M531"))
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3056
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3057 # Handle multiple uses
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3058 if isinstance(node, ast.Name) and node.id == groupName:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3059 numUsages += 1
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3060 if numUsages > 1:
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3061 self.violations.append((nestedNode, "M531"))
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3062
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3063 def __checkForM532(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3064 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3065 Private method to check for possible unintentional typing annotation.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3066
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3067 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3068 @type ast.AnnAssign
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3069 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3070 if (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3071 node.value is None
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3072 and hasattr(node.target, "value")
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3073 and isinstance(node.target.value, ast.Name)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3074 and (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3075 isinstance(node.target, ast.Subscript)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3076 or (
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3077 isinstance(node.target, ast.Attribute)
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3078 and node.target.value.id != "self"
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3079 )
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3080 )
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3081 ):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3082 self.violations.append((node, "M532"))
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3083
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3084 def __checkForM533(self, node):
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3085 """
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3086 Private method to check a set for duplicate items.
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3087
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3088 @param node reference to the node to be processed
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3089 @type ast.Set
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3090 """
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3091 seen = set()
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3092 for elt in node.elts:
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3093 if not isinstance(elt, ast.Constant):
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3094 continue
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3095 if elt.value in seen:
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3096 self.violations.append((node, "M533", repr(elt.value)))
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3097 else:
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3098 seen.add(elt.value)
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3099
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3100 def __checkForM534(self, node):
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3101 """
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3102 Private method to check that re.sub/subn/split arguments flags/count/maxsplit
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3103 are passed as keyword arguments.
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3104
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3105 @param node reference to the node to be processed
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3106 @type ast.Call
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3107 """
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3108 if not isinstance(node.func, ast.Attribute):
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3109 return
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3110 func = node.func
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3111 if not isinstance(func.value, ast.Name) or func.value.id != "re":
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3112 return
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3113
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3114 def check(numArgs, paramName):
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3115 if len(node.args) > numArgs:
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3116 arg = node.args[numArgs]
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3117 self.violations.append((arg, "M534", func.attr, paramName))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3118
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3119 if func.attr in ("sub", "subn"):
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3120 check(3, "count")
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3121 elif func.attr == "split":
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10175
diff changeset
3122 check(2, "maxsplit")
10048
df836ff707fd Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
3123
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3124 def __checkForM535(self, node):
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3125 """
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3126 Private method to check that a static key isn't used in a dict comprehension.
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3127
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3128 Record a warning if a likely unchanging key is used - either a constant,
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3129 or a variable that isn't coming from the generator expression.
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3130
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3131 @param node reference to the node to be processed
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3132 @type ast.DictComp
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3133 """
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3134 if isinstance(node.key, ast.Constant):
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3135 self.violations.append((node, "M535", node.key.value))
10359
de0420dac60e Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10356
diff changeset
3136 elif isinstance(
de0420dac60e Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10356
diff changeset
3137 node.key, ast.Name
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3138 ) and node.key.id not in self.__getDictCompLoopAndNamedExprVarNames(node):
10359
de0420dac60e Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10356
diff changeset
3139 self.violations.append((node, "M535", node.key.id))
10356
09c698245a5c Updated the 'Miscellaneous' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10186
diff changeset
3140
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3141 def __checkForM539(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3142 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3143 Private method to check for correct ContextVar usage.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3144
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3145 @param node reference to the node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3146 @type ast.Call
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3147 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3148 if not (
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3149 (isinstance(node.func, ast.Name) and node.func.id == "ContextVar")
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3150 or (
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3151 isinstance(node.func, ast.Attribute)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3152 and node.func.attr == "ContextVar"
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3153 and isinstance(node.func.value, ast.Name)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3154 and node.func.value.id == "contextvars"
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3155 )
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3156 ):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3157 return
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3158
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3159 # ContextVar only takes one kw currently, but better safe than sorry
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3160 for kw in node.keywords:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3161 if kw.arg == "default":
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3162 break
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3163 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3164 return
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3165
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3166 visitor = FunctionDefDefaultsVisitor("M539", "M539")
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3167 visitor.visit(kw.value)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3168 self.violations.extend(visitor.errors)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3169
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3170 def __checkForM540AddNote(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3171 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3172 Private method to check add_note usage.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3173
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3174 @param node reference to the node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3175 @type ast.Attribute
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3176 @return flag
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3177 @rtype bool
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3178 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3179 if (
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3180 node.attr == "add_note"
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3181 and isinstance(node.value, ast.Name)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3182 and self.__M540CaughtException
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3183 and node.value.id == self.__M540CaughtException.name
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3184 ):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3185 self.__M540CaughtException.hasNote = True
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3186 return True
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3187
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3188 return False
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3189
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3190 def __checkForM540Usage(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3191 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3192 Private method to check the usage of exceptions with added note.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3193
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3194 @param node reference to the node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3195 @type ast.expr or None
11000
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
3196 """ # noqa: D234y
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
3197
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3198 def superwalk(node: ast.AST | list[ast.AST]):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3199 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3200 Function to walk an AST node or a list of AST nodes.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3201
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3202 @param node reference to the node or a list of nodes to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3203 @type ast.AST or list[ast.AST]
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3204 @yield next node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3205 @ytype ast.AST
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3206 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3207 if isinstance(node, list):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3208 for n in node:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3209 yield from ast.walk(n)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3210 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3211 yield from ast.walk(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3212
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3213 if not self.__M540CaughtException or node is None:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3214 return
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3215
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3216 for n in superwalk(node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3217 if isinstance(n, ast.Name) and n.id == self.__M540CaughtException.name:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3218 self.__M540CaughtException = None
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3219 break
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3220
11138
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3221 def __checkForM541(self, node):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3222 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3223 Private method to check for duplicate key value pairs in a dictionary literal.
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3224
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3225 @param node reference to the node to be processed
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3226 @type ast.Dict
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3227 """ # noqa: D234r
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3228
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3229 def convertToValue(item):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3230 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3231 Function to extract the value of a given item.
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3232
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3233 @param item node to extract value from
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3234 @type ast.Ast
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3235 @return value of the node
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3236 @rtype Any
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3237 """
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3238 if isinstance(item, ast.Constant):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3239 return item.value
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3240 elif isinstance(item, ast.Tuple):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3241 return tuple(convertToValue(i) for i in item.elts)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3242 elif isinstance(item, ast.Name):
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3243 return M541VariableKeyType(item.id)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3244 else:
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3245 return M541UnhandledKeyType()
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3246
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3247 keys = [convertToValue(key) for key in node.keys]
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3248 keyCounts = Counter(keys)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3249 duplicateKeys = [key for key, count in keyCounts.items() if count > 1]
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3250 for key in duplicateKeys:
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3251 keyIndices = [i for i, iKey in enumerate(keys) if iKey == key]
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3252 seen = set()
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3253 for index in keyIndices:
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3254 value = convertToValue(node.values[index])
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3255 if value in seen:
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3256 keyNode = node.keys[index]
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3257 self.violations.append((keyNode, "M541"))
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3258 seen.add(value)
1f743bad6fd3 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11134
diff changeset
3259
10639
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
3260 def __checkForM569(self, node):
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3261 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3262 Private method to check for changes to a loop's mutable iterable.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3263
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3264 @param node loop node to be checked
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3265 @type ast.For
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3266 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3267 if isinstance(node.iter, ast.Name):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3268 name = self.toNameStr(node.iter)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3269 elif isinstance(node.iter, ast.Attribute):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3270 name = self.toNameStr(node.iter)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3271 else:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3272 return
10639
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
3273 checker = M569Checker(name, self)
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3274 checker.visit(node.body)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3275 for mutation in checker.mutations:
10639
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
3276 self.violations.append((mutation, "M569"))
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
3277
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
3278
757bfe32983f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10516
diff changeset
3279 class M569Checker(ast.NodeVisitor):
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3280 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3281 Class traversing a 'for' loop body to check for modifications to a loop's
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3282 mutable iterable.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3283 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3284
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3285 # https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3286 MUTATING_FUNCTIONS = (
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3287 "append",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3288 "sort",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3289 "reverse",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3290 "remove",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3291 "clear",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3292 "extend",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3293 "insert",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3294 "pop",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3295 "popitem",
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3296 )
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3297
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3298 def __init__(self, name, bugbear):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3299 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3300 Constructor
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3301
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3302 @param name name of the iterator
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3303 @type str
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3304 @param bugbear reference to the bugbear visitor
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3305 @type BugBearVisitor
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3306 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3307 self.__name = name
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3308 self.__bb = bugbear
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3309 self.mutations = []
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3310
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3311 def visit_Delete(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3312 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3313 Public method handling 'Delete' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3314
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3315 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3316 @type ast.Delete
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3317 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3318 for target in node.targets:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3319 if isinstance(target, ast.Subscript):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3320 name = self.__bb.toNameStr(target.value)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3321 elif isinstance(target, (ast.Attribute, ast.Name)):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3322 name = self.__bb.toNameStr(target)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3323 else:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3324 name = "" # fallback
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3325 self.generic_visit(target)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3326
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3327 if name == self.__name:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3328 self.mutations.append(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3329
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3330 def visit_Call(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3331 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3332 Public method handling 'Call' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3333
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3334 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3335 @type ast.Call
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3336 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3337 if isinstance(node.func, ast.Attribute):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3338 name = self.__bb.toNameStr(node.func.value)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3339 functionObject = name
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3340 functionName = node.func.attr
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3341
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3342 if (
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3343 functionObject == self.__name
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3344 and functionName in self.MUTATING_FUNCTIONS
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3345 ):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3346 self.mutations.append(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3347
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3348 self.generic_visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3349
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3350 def visit(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3351 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3352 Public method to inspect an ast node.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3353
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3354 Like super-visit but supports iteration over lists.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3355
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3356 @param node AST node to be traversed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3357 @type TYPE
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3358 @return reference to the last processed node
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3359 @rtype ast.Node
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3360 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3361 if not isinstance(node, list):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3362 return super().visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3363
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3364 for elem in node:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3365 super().visit(elem)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3366 return node
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3367
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3368
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3369 class ExceptBaseExceptionVisitor(ast.NodeVisitor):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3370 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3371 Class to determine, if a 'BaseException' is re-raised.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3372 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3373
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3374 def __init__(self, exceptNode):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3375 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3376 Constructor
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3377
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3378 @param exceptNode exception node to be inspected
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3379 @type ast.ExceptHandler
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3380 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3381 super().__init__()
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3382 self.__root = exceptNode
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3383 self.__reRaised = False
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3384
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3385 def reRaised(self) -> bool:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3386 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3387 Public method to check, if the exception is re-raised.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3388
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3389 @return flag indicating a re-raised exception
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3390 @rtype bool
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3391 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3392 self.visit(self.__root)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3393 return self.__reRaised
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3394
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3395 def visit_Raise(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3396 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3397 Public method to handle 'Raise' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3398
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3399 If we find a corresponding `raise` or `raise e` where e was from
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3400 `except BaseException as e:` then we mark re_raised as True and can
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3401 stop scanning.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3402
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3403 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3404 @type ast.Raise
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3405 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3406 if node.exc is None or (
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3407 isinstance(node.exc, ast.Name) and node.exc.id == self.__root.name
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3408 ):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3409 self.__reRaised = True
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3410 return
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3411
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3412 super().generic_visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3413
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3414 def visit_ExceptHandler(self, node: ast.ExceptHandler):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3415 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3416 Public method to handle 'ExceptHandler' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3417
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3418 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3419 @type ast.ExceptHandler
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3420 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3421 if node is not self.__root:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3422 return # entered a nested except - stop searching
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3423
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3424 super().generic_visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3425
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3426
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3427 class NameFinder(ast.NodeVisitor):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3428 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3429 Class to extract a name out of a tree of nodes.
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3430 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3431
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3432 def __init__(self):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3433 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3434 Constructor
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3435 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
3436 super().__init__()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3437
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3438 self.__names = {}
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3439
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3440 def visit_Name(self, node):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3441 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3442 Public method to handle 'Name' nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3443
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3444 @param node reference to the node to be processed
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3445 @type ast.Name
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3446 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3447 self.__names.setdefault(node.id, []).append(node)
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3448
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3449 def visit(self, node):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3450 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3451 Public method to traverse a given AST node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3452
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3453 @param node AST node to be traversed
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3454 @type ast.Node
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3455 @return reference to the last processed node
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3456 @rtype ast.Node
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3457 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3458 if isinstance(node, list):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3459 for elem in node:
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
3460 super().visit(elem)
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3461 return node
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3462 else:
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3463 return super().visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3464
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3465 def getNames(self):
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3466 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3467 Public method to return the extracted names and Name nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3468
6184
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3469 @return dictionary containing the names as keys and the list of nodes
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3470 @rtype dict
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3471 """
789e88d94899 Code Style Checker: added some checks of the bugbear checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6183
diff changeset
3472 return self.__names
6183
29384109306c Code Style Checker: started to add some bugbear code checks
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6182
diff changeset
3473
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3474
10510
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3475 class NamedExprFinder(ast.NodeVisitor):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3476 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3477 Class to extract names defined through an ast.NamedExpr.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3478 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3479
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3480 def __init__(self):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3481 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3482 Constructor
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3483 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3484 super().__init__()
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3485
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3486 self.__names = {}
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3487
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3488 def visit_NamedExpr(self, node: ast.NamedExpr):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3489 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3490 Public method handling 'NamedExpr' nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3491
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3492 @param node reference to the node to be processed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3493 @type ast.NamedExpr
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3494 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3495 self.__names.setdefault(node.target.id, []).append(node.target)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3496
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3497 self.generic_visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3498
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3499 def visit(self, node):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3500 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3501 Public method to traverse a given AST node.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3502
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3503 Like super-visit but supports iteration over lists.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3504
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3505 @param node AST node to be traversed
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3506 @type TYPE
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3507 @return reference to the last processed node
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3508 @rtype ast.Node
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3509 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3510 if not isinstance(node, list):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3511 super().visit(node)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3512
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3513 for elem in node:
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3514 super().visit(elem)
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3515
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3516 return node
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3517
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3518 def getNames(self):
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3519 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3520 Public method to return the extracted names and Name nodes.
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3521
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3522 @return dictionary containing the names as keys and the list of nodes
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3523 @rtype dict
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3524 """
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3525 return self.__names
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3526
fa7b8ebfbe13 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3527
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3528 class FunctionDefDefaultsVisitor(ast.NodeVisitor):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3529 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3530 Class used by M506, M508 and M539.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3531 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3532
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3533 def __init__(
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3534 self,
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3535 errorCodeCalls, # M506 or M539
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3536 errorCodeLiterals, # M508 or M539
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3537 ):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3538 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3539 Constructor
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3540
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3541 @param errorCodeCalls error code for ast.Call nodes
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3542 @type str
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3543 @param errorCodeLiterals error code for literal nodes
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3544 @type str
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3545 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3546 self.__errorCodeCalls = errorCodeCalls
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3547 self.__errorCodeLiterals = errorCodeLiterals
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3548 for nodeType in BugbearMutableLiterals + BugbearMutableComprehensions:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3549 setattr(
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3550 self, f"visit_{nodeType}", self.__visitMutableLiteralOrComprehension
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3551 )
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3552 self.errors = []
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3553 self.__argDepth = 0
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3554
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3555 super().__init__()
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3556
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3557 def __visitMutableLiteralOrComprehension(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3558 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3559 Private method to flag mutable literals and comprehensions.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3560
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3561 @param node AST node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3562 @type ast.Dict, ast.List, ast.Set, ast.ListComp, ast.DictComp or ast.SetComp
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3563 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3564 # Flag M506 if mutable literal/comprehension is not nested.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3565 # We only flag these at the top level of the expression as we
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3566 # cannot easily guarantee that nested mutable structures are not
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3567 # made immutable by outer operations, so we prefer no false positives.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3568 # e.g.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3569 # >>> def this_is_fine(a=frozenset({"a", "b", "c"})): ...
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3570 #
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3571 # >>> def this_is_not_fine_but_hard_to_detect(a=(lambda x: x)([1, 2, 3]))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3572 #
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3573 # We do still search for cases of B008 within mutable structures though.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3574 if self.__argDepth == 1:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3575 self.errors.append((node, self.__errorCodeCalls))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3576
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3577 # Check for nested functions.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3578 self.generic_visit(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3579
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3580 def visit_Call(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3581 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3582 Public method to process Call nodes.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3583
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3584 @param node AST node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3585 @type ast.Call
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3586 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3587 callPath = ".".join(composeCallPath(node.func))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3588 if callPath in BugbearMutableCalls:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3589 self.errors.append((node, self.__errorCodeCalls))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3590 self.generic_visit(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3591 return
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3592
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3593 if callPath in BugbearImmutableCalls:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3594 self.generic_visit(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3595 return
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3596
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3597 # Check if function call is actually a float infinity/NaN literal
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3598 if callPath == "float" and len(node.args) == 1:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3599 try:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3600 value = float(ast.literal_eval(node.args[0]))
11000
f8371a2dd08f Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10999
diff changeset
3601 except Exception: # secok
10999
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3602 pass
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3603 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3604 if math.isfinite(value):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3605 self.errors.append((node, self.__errorCodeLiterals))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3606 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3607 self.errors.append((node, self.__errorCodeLiterals))
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3608
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3609 # Check for nested functions.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3610 self.generic_visit(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3611
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3612 def visit_Lambda(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3613 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3614 Public method to process Lambda nodes.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3615
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3616 @param node AST node to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3617 @type ast.Lambda
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3618 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3619 # Don't recurse into lambda expressions
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3620 # as they are evaluated at call time.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3621 pass
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3622
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3623 def visit(self, node):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3624 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3625 Public method to traverse an AST node or a list of AST nodes.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3626
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3627 This is an extended method that can also handle a list of AST nodes.
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3628
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3629 @param node AST node or list of AST nodes to be processed
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3630 @type ast.AST or list of ast.AST
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3631 """
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3632 self.__argDepth += 1
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3633 if isinstance(node, list):
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3634 for elem in node:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3635 if elem is not None:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3636 super().visit(elem)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3637 else:
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3638 super().visit(node)
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3639 self.__argDepth -= 1
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3640
c3cf24fe9113 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10997
diff changeset
3641
9327
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3642 class M520NameFinder(NameFinder):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3643 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3644 Class to extract a name out of a tree of nodes ignoring names defined within the
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3645 local scope of a comprehension.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3646 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3647
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3648 def visit_GeneratorExp(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3649 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3650 Public method to handle a generator expressions.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3651
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3652 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3653 @type ast.GeneratorExp
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3654 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3655 self.visit(node.generators)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3656
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3657 def visit_ListComp(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3658 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3659 Public method to handle a list comprehension.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3660
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3661 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3662 @type TYPE
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3663 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3664 self.visit(node.generators)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3665
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3666 def visit_DictComp(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3667 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3668 Public method to handle a dictionary comprehension.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3669
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3670 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3671 @type TYPE
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3672 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3673 self.visit(node.generators)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3674
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3675 def visit_comprehension(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3676 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3677 Public method to handle the 'for' of a comprehension.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3678
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3679 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3680 @type ast.comprehension
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3681 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3682 self.visit(node.iter)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3683
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3684 def visit_Lambda(self, node):
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3685 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3686 Public method to handle a Lambda function.
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3687
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3688 @param node reference to the node to be processed
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3689 @type ast.Lambda
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3690 """
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3691 self.visit(node.body)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3692 for lambdaArg in node.args.args:
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3693 self.getNames().pop(lambdaArg.arg, None)
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3694
2b768afcaee1 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
3695
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3696 class ReturnVisitor(ast.NodeVisitor):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3697 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3698 Class implementing a node visitor to check return statements.
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3699 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3700
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3701 Assigns = "assigns"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3702 Refs = "refs"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3703 Returns = "returns"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3704
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3705 def __init__(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3706 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3707 Constructor
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3708 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
3709 super().__init__()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3710
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3711 self.__stack = []
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3712 self.violations = []
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3713 self.__loopCount = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3714
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3715 @property
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3716 def assigns(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3717 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3718 Public method to get the Assign nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3719
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3720 @return dictionary containing the node name as key and line number
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3721 as value
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3722 @rtype dict
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3723 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3724 return self.__stack[-1][ReturnVisitor.Assigns]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3725
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3726 @property
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3727 def refs(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3728 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3729 Public method to get the References nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3730
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3731 @return dictionary containing the node name as key and line number
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3732 as value
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3733 @rtype dict
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3734 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3735 return self.__stack[-1][ReturnVisitor.Refs]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3736
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3737 @property
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3738 def returns(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3739 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3740 Public method to get the Return nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3741
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3742 @return dictionary containing the node name as key and line number
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3743 as value
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3744 @rtype dict
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3745 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3746 return self.__stack[-1][ReturnVisitor.Returns]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3747
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3748 def visit_For(self, node):
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3749 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3750 Public method to handle a for loop.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3751
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3752 @param node reference to the for node to handle
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3753 @type ast.For
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3754 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3755 self.__visitLoop(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3756
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3757 def visit_AsyncFor(self, node):
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3758 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3759 Public method to handle an async for loop.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3760
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3761 @param node reference to the async for node to handle
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3762 @type ast.AsyncFor
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3763 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3764 self.__visitLoop(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3765
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3766 def visit_While(self, node):
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3767 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3768 Public method to handle a while loop.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3769
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3770 @param node reference to the while node to handle
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3771 @type ast.While
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3772 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3773 self.__visitLoop(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3774
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3775 def __visitLoop(self, node):
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3776 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3777 Private method to handle loop nodes.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3778
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3779 @param node reference to the loop node to handle
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3780 @type ast.For, ast.AsyncFor or ast.While
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3781 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3782 self.__loopCount += 1
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3783 self.generic_visit(node)
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3784 self.__loopCount -= 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3785
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3786 def __visitWithStack(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3787 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3788 Private method to traverse a given function node using a stack.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3789
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3790 @param node AST node to be traversed
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3791 @type ast.FunctionDef or ast.AsyncFunctionDef
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3792 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3793 self.__stack.append(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3794 {
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3795 ReturnVisitor.Assigns: defaultdict(list),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3796 ReturnVisitor.Refs: defaultdict(list),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3797 ReturnVisitor.Returns: [],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3798 }
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3799 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3800
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3801 self.generic_visit(node)
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3802 self.__checkFunction(node)
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3803 self.__stack.pop()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3804
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3805 def visit_FunctionDef(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3806 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3807 Public method to handle a function definition.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3808
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3809 @param node reference to the node to handle
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3810 @type ast.FunctionDef
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3811 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3812 self.__visitWithStack(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3813
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3814 def visit_AsyncFunctionDef(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3815 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3816 Public method to handle a function definition.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3817
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3818 @param node reference to the node to handle
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3819 @type ast.AsyncFunctionDef
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3820 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3821 self.__visitWithStack(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3822
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3823 def visit_Return(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3824 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3825 Public method to handle a return node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3826
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3827 @param node reference to the node to handle
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3828 @type ast.Return
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3829 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3830 self.returns.append(node)
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3831 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3832
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3833 def visit_Assign(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3834 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3835 Public method to handle an assign node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3836
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3837 @param node reference to the node to handle
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3838 @type ast.Assign
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3839 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3840 if not self.__stack:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3841 return
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3842
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3843 self.generic_visit(node.value)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3844
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3845 target = node.targets[0]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3846 if isinstance(target, ast.Tuple) and not isinstance(node.value, ast.Tuple):
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3847 # skip unpacking assign
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3848 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3849
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3850 self.__visitAssignTarget(target)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3851
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3852 def visit_Name(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3853 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3854 Public method to handle a name node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3855
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3856 @param node reference to the node to handle
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3857 @type ast.Name
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3858 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3859 if self.__stack:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3860 self.refs[node.id].append(node.lineno)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3861
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3862 def __visitAssignTarget(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3863 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3864 Private method to handle an assign target node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3865
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3866 @param node reference to the node to handle
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3867 @type ast.AST
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3868 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3869 if isinstance(node, ast.Tuple):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3870 for elt in node.elts:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3871 self.__visitAssignTarget(elt)
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3872 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3873
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3874 if not self.__loopCount and isinstance(node, ast.Name):
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3875 self.assigns[node.id].append(node.lineno)
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3876 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3877
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3878 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3879
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3880 def __checkFunction(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3881 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3882 Private method to check a function definition node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3883
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3884 @param node reference to the node to check
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3885 @type ast.AsyncFunctionDef or ast.FunctionDef
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3886 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3887 if not self.returns or not node.body:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3888 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3889
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3890 if len(node.body) == 1 and isinstance(node.body[-1], ast.Return):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3891 # skip functions that consist of `return None` only
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3892 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3893
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3894 if not self.__resultExists():
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3895 self.__checkUnnecessaryReturnNone()
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3896 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3897
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3898 self.__checkImplicitReturnValue()
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3899 self.__checkImplicitReturn(node.body[-1])
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3900
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3901 for n in self.returns:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3902 if n.value:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3903 self.__checkUnnecessaryAssign(n.value)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3904
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3905 def __isNone(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3906 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3907 Private method to check, if a node value is None.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3908
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3909 @param node reference to the node to check
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3910 @type ast.AST
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3911 @return flag indicating the node contains a None value
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3912 @rtype bool
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3913 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3914 return AstUtilities.isNameConstant(node) and AstUtilities.getValue(node) is None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3915
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3916 def __isFalse(self, node):
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3917 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3918 Private method to check, if a node value is False.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3919
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3920 @param node reference to the node to check
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3921 @type ast.AST
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3922 @return flag indicating the node contains a False value
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3923 @rtype bool
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3924 """
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3925 return (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3926 AstUtilities.isNameConstant(node) and AstUtilities.getValue(node) is False
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3927 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3928
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3929 def __resultExists(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3930 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3931 Private method to check the existance of a return result.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3932
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3933 @return flag indicating the existence of a return result
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3934 @rtype bool
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3935 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3936 for node in self.returns:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3937 value = node.value
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3938 if value and not self.__isNone(value):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3939 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3940
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3941 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3942
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3943 def __checkImplicitReturnValue(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3944 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3945 Private method to check for implicit return values.
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3946 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3947 for node in self.returns:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3948 if not node.value:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3949 self.violations.append((node, "M832"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3950
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3951 def __checkUnnecessaryReturnNone(self):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3952 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3953 Private method to check for an unnecessary 'return None' statement.
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3954 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3955 for node in self.returns:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3956 if self.__isNone(node.value):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3957 self.violations.append((node, "M831"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3958
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3959 def __checkImplicitReturn(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3960 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3961 Private method to check for an implicit return statement.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3962
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3963 @param node reference to the node to check
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3964 @type ast.AST
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3965 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3966 if isinstance(node, ast.If):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3967 if not node.body or not node.orelse:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3968 self.violations.append((node, "M833"))
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3969 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3970
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3971 self.__checkImplicitReturn(node.body[-1])
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3972 self.__checkImplicitReturn(node.orelse[-1])
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3973 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3974
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3975 if isinstance(node, (ast.For, ast.AsyncFor)) and node.orelse:
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3976 self.__checkImplicitReturn(node.orelse[-1])
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3977 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3978
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3979 if isinstance(node, (ast.With, ast.AsyncWith)):
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3980 self.__checkImplicitReturn(node.body[-1])
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3981 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3982
7651
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3983 if isinstance(node, ast.Assert) and self.__isFalse(node.test):
ca87b7490449 Code Style Checker: updated the return style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7639
diff changeset
3984 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3985
6889
334257ef9435 MiscellaneousChecker: fixed some Python2 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6882
diff changeset
3986 try:
334257ef9435 MiscellaneousChecker: fixed some Python2 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6882
diff changeset
3987 okNodes = (ast.Return, ast.Raise, ast.While, ast.Try)
334257ef9435 MiscellaneousChecker: fixed some Python2 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6882
diff changeset
3988 except AttributeError:
334257ef9435 MiscellaneousChecker: fixed some Python2 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6882
diff changeset
3989 okNodes = (ast.Return, ast.Raise, ast.While)
334257ef9435 MiscellaneousChecker: fixed some Python2 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6882
diff changeset
3990 if not isinstance(node, okNodes):
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3991 self.violations.append((node, "M833"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3992
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3993 def __checkUnnecessaryAssign(self, node):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3994 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3995 Private method to check for an unnecessary assign statement.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
3996
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3997 @param node reference to the node to check
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3998 @type ast.AST
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
3999 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4000 if not isinstance(node, ast.Name):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4001 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4002
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4003 varname = node.id
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4004 returnLineno = node.lineno
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4005
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4006 if varname not in self.assigns:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4007 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4008
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4009 if varname not in self.refs:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4010 self.violations.append((node, "M834"))
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4011 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4012
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4013 if self.__hasRefsBeforeNextAssign(varname, returnLineno):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4014 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4015
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4016 self.violations.append((node, "M834"))
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4017
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4018 def __hasRefsBeforeNextAssign(self, varname, returnLineno):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4019 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4020 Private method to check for references before a following assign
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4021 statement.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4022
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4023 @param varname variable name to check for
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4024 @type str
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4025 @param returnLineno line number of the return statement
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4026 @type int
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4027 @return flag indicating the existence of references
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4028 @rtype bool
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4029 """
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4030 beforeAssign = 0
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4031 afterAssign = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4032
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4033 for lineno in sorted(self.assigns[varname]):
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4034 if lineno > returnLineno:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4035 afterAssign = lineno
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4036 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4037
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4038 if lineno <= returnLineno:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4039 beforeAssign = lineno
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4040
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4041 for lineno in self.refs[varname]:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4042 if lineno == returnLineno:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4043 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4044
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4045 if afterAssign:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4046 if beforeAssign < lineno <= afterAssign:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4047 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4048
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4049 elif beforeAssign < lineno:
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4050 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4051
6882
65d1bf4b7427 MiscellaneousChecker: added a checker for advised forms of the return statement.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6645
diff changeset
4052 return False
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4053
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4054
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4055 class DateTimeVisitor(ast.NodeVisitor):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4056 """
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4057 Class implementing a node visitor to check datetime function calls.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4058
9274
86fab0c74430 Added some TODO markers to update some checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
4059 Note: This class is modeled after flake8_datetimez checker.
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4060 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4061
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4062 def __init__(self):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4063 """
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4064 Constructor
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4065 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
4066 super().__init__()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4067
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4068 self.violations = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4069
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4070 def __getFromKeywords(self, keywords, name):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4071 """
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4072 Private method to get a keyword node given its name.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4073
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4074 @param keywords list of keyword argument nodes
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4075 @type list of ast.AST
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4076 @param name name of the keyword node
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4077 @type str
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4078 @return keyword node
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4079 @rtype ast.AST
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4080 """
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4081 for keyword in keywords:
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4082 if keyword.arg == name:
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4083 return keyword
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4084
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4085 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4086
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4087 def visit_Call(self, node):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4088 """
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4089 Public method to handle a function call.
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4090
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4091 Every datetime related function call is check for use of the naive
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4092 variant (i.e. use without TZ info).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4093
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4094 @param node reference to the node to be processed
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4095 @type ast.Call
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4096 """
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4097 # datetime.something()
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4098 isDateTimeClass = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4099 isinstance(node.func, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4100 and isinstance(node.func.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4101 and node.func.value.id == "datetime"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4102 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4103
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4104 # datetime.datetime.something()
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4105 isDateTimeModuleAndClass = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4106 isinstance(node.func, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4107 and isinstance(node.func.value, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4108 and node.func.value.attr == "datetime"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4109 and isinstance(node.func.value.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4110 and node.func.value.value.id == "datetime"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4111 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4112
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4113 if isDateTimeClass:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4114 if node.func.attr == "datetime":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4115 # datetime.datetime(2000, 1, 1, 0, 0, 0, 0,
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4116 # datetime.timezone.utc)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4117 isCase1 = len(node.args) >= 8 and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4118 AstUtilities.isNameConstant(node.args[7])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4119 and AstUtilities.getValue(node.args[7]) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4120 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4121
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4122 # datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4123 tzinfoKeyword = self.__getFromKeywords(node.keywords, "tzinfo")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4124 isCase2 = tzinfoKeyword is not None and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4125 AstUtilities.isNameConstant(tzinfoKeyword.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4126 and AstUtilities.getValue(tzinfoKeyword.value) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4127 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4128
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4129 if not (isCase1 or isCase2):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4130 self.violations.append((node, "M301"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4131
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4132 elif node.func.attr == "time":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4133 # time(12, 10, 45, 0, datetime.timezone.utc)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4134 isCase1 = len(node.args) >= 5 and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4135 AstUtilities.isNameConstant(node.args[4])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4136 and AstUtilities.getValue(node.args[4]) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4137 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4138
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4139 # datetime.time(12, 10, 45, tzinfo=datetime.timezone.utc)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4140 tzinfoKeyword = self.__getFromKeywords(node.keywords, "tzinfo")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4141 isCase2 = tzinfoKeyword is not None and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4142 AstUtilities.isNameConstant(tzinfoKeyword.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4143 and AstUtilities.getValue(tzinfoKeyword.value) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4144 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4145
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4146 if not (isCase1 or isCase2):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4147 self.violations.append((node, "M321"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4148
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4149 elif node.func.attr == "date":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4150 self.violations.append((node, "M311"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4151
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4152 if isDateTimeClass or isDateTimeModuleAndClass:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4153 if node.func.attr == "today":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4154 self.violations.append((node, "M302"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4155
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4156 elif node.func.attr == "utcnow":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4157 self.violations.append((node, "M303"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4158
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4159 elif node.func.attr == "utcfromtimestamp":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4160 self.violations.append((node, "M304"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4161
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4162 elif node.func.attr in "now":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4163 # datetime.now(UTC)
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4164 isCase1 = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4165 len(node.args) == 1
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4166 and len(node.keywords) == 0
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4167 and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4168 AstUtilities.isNameConstant(node.args[0])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4169 and AstUtilities.getValue(node.args[0]) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4170 )
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4171 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4172
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4173 # datetime.now(tz=UTC)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4174 tzKeyword = self.__getFromKeywords(node.keywords, "tz")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4175 isCase2 = tzKeyword is not None and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4176 AstUtilities.isNameConstant(tzKeyword.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4177 and AstUtilities.getValue(tzKeyword.value) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4178 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4179
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4180 if not (isCase1 or isCase2):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4181 self.violations.append((node, "M305"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4182
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4183 elif node.func.attr == "fromtimestamp":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4184 # datetime.fromtimestamp(1234, UTC)
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4185 isCase1 = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4186 len(node.args) == 2
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4187 and len(node.keywords) == 0
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4188 and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4189 AstUtilities.isNameConstant(node.args[1])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4190 and AstUtilities.getValue(node.args[1]) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4191 )
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4192 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4193
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4194 # datetime.fromtimestamp(1234, tz=UTC)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4195 tzKeyword = self.__getFromKeywords(node.keywords, "tz")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4196 isCase2 = tzKeyword is not None and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4197 AstUtilities.isNameConstant(tzKeyword.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4198 and AstUtilities.getValue(tzKeyword.value) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4199 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4200
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4201 if not (isCase1 or isCase2):
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4202 self.violations.append((node, "M306"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4203
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4204 elif node.func.attr == "strptime":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4205 # datetime.strptime(...).replace(tzinfo=UTC)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4206 parent = getattr(node, "_dtCheckerParent", None)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4207 pparent = getattr(parent, "_dtCheckerParent", None)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4208 if not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4209 isinstance(parent, ast.Attribute) and parent.attr == "replace"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4210 ) or not isinstance(pparent, ast.Call):
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4211 isCase1 = False
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4212 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4213 tzinfoKeyword = self.__getFromKeywords(pparent.keywords, "tzinfo")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4214 isCase1 = tzinfoKeyword is not None and not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4215 AstUtilities.isNameConstant(tzinfoKeyword.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4216 and AstUtilities.getValue(tzinfoKeyword.value) is None
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4217 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4218
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4219 if not isCase1:
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4220 self.violations.append((node, "M307"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4222 elif node.func.attr == "fromordinal":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4223 self.violations.append((node, "M308"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4224
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4225 # date.something()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4226 isDateClass = (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4227 isinstance(node.func, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4228 and isinstance(node.func.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4229 and node.func.value.id == "date"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4230 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4231
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4232 # datetime.date.something()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4233 isDateModuleAndClass = (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4234 isinstance(node.func, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4235 and isinstance(node.func.value, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4236 and node.func.value.attr == "date"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4237 and isinstance(node.func.value.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4238 and node.func.value.value.id == "datetime"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4239 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4240
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4241 if isDateClass or isDateModuleAndClass:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4242 if node.func.attr == "today":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4243 self.violations.append((node, "M312"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4244
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4245 elif node.func.attr == "fromtimestamp":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4246 self.violations.append((node, "M313"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4247
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4248 elif node.func.attr == "fromordinal":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4249 self.violations.append((node, "M314"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4250
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4251 elif node.func.attr == "fromisoformat":
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4252 self.violations.append((node, "M315"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4253
7045
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4254 self.generic_visit(node)
c2bf08f87a1d Code Style Checker: added checks for naive uses of datetime classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7042
diff changeset
4255
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4256
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4257 class SysVersionVisitor(ast.NodeVisitor):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4258 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4259 Class implementing a node visitor to check the use of sys.version and
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4260 sys.version_info.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4261
11140
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4262 Note: This class is modeled after flake8-2020 v1.8.1.
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4263 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4264
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4265 def __init__(self):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4266 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4267 Constructor
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4268 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8207
diff changeset
4269 super().__init__()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4270
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4271 self.violations = []
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4272 self.__fromImports = {}
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4273
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4274 def visit_ImportFrom(self, node):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4275 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4276 Public method to handle a from ... import ... statement.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4277
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4278 @param node reference to the node to be processed
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4279 @type ast.ImportFrom
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4280 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4281 for alias in node.names:
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4282 if node.module is not None and not alias.asname:
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4283 self.__fromImports[alias.name] = node.module
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4284
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4285 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4286
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4287 def __isSys(self, attr, node):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4288 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4289 Private method to check for a reference to sys attribute.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4290
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4291 @param attr attribute name
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4292 @type str
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4293 @param node reference to the node to be checked
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4294 @type ast.Node
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4295 @return flag indicating a match
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4296 @rtype bool
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4297 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4298 match = False
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4299 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4300 isinstance(node, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4301 and isinstance(node.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4302 and node.value.id == "sys"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4303 and node.attr == attr
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4304 ) or (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4305 isinstance(node, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4306 and node.id == attr
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4307 and self.__fromImports.get(node.id) == "sys"
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4308 ):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4309 match = True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4310
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4311 return match
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4312
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4313 def __isSysVersionUpperSlice(self, node, n):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4314 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4315 Private method to check the upper slice of sys.version.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4316
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4317 @param node reference to the node to be checked
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4318 @type ast.Node
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4319 @param n slice value to check against
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4320 @type int
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4321 @return flag indicating a match
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4322 @rtype bool
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4323 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4324 return (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4325 self.__isSys("version", node.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4326 and isinstance(node.slice, ast.Slice)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4327 and node.slice.lower is None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4328 and AstUtilities.isNumber(node.slice.upper)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4329 and AstUtilities.getValue(node.slice.upper) == n
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4330 and node.slice.step is None
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4331 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4332
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4333 def visit_Subscript(self, node):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4334 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4335 Public method to handle a subscript.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4336
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4337 @param node reference to the node to be processed
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4338 @type ast.Subscript
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4339 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4340 if self.__isSysVersionUpperSlice(node, 1):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4341 self.violations.append((node.value, "M423"))
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4342 elif self.__isSysVersionUpperSlice(node, 3):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4343 self.violations.append((node.value, "M401"))
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4344 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4345 self.__isSys("version", node.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4346 and isinstance(node.slice, ast.Index)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4347 and AstUtilities.isNumber(node.slice.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4348 and AstUtilities.getValue(node.slice.value) == 2
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4349 ):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4350 self.violations.append((node.value, "M402"))
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4351 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4352 self.__isSys("version", node.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4353 and isinstance(node.slice, ast.Index)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4354 and AstUtilities.isNumber(node.slice.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4355 and AstUtilities.getValue(node.slice.value) == 0
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4356 ):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4357 self.violations.append((node.value, "M421"))
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4358
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4359 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4360
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4361 def visit_Compare(self, node):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4362 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4363 Public method to handle a comparison.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4364
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4365 @param node reference to the node to be processed
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4366 @type ast.Compare
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4367 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4368 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4369 isinstance(node.left, ast.Subscript)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4370 and self.__isSys("version_info", node.left.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4371 and isinstance(node.left.slice, ast.Index)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4372 and AstUtilities.isNumber(node.left.slice.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4373 and AstUtilities.getValue(node.left.slice.value) == 0
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4374 and len(node.ops) == 1
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4375 and isinstance(node.ops[0], ast.Eq)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4376 and AstUtilities.isNumber(node.comparators[0])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4377 and AstUtilities.getValue(node.comparators[0]) == 3
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4378 ):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4379 self.violations.append((node.left, "M411"))
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4380 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4381 self.__isSys("version", node.left)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4382 and len(node.ops) == 1
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4383 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4384 and AstUtilities.isString(node.comparators[0])
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4385 ):
7289
6f4761a73f5f MiscellaneousChecker: prepared the code for some changes in Python 3.8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7256
diff changeset
4386 if len(AstUtilities.getValue(node.comparators[0])) == 1:
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4387 errorCode = "M422"
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4388 else:
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4389 errorCode = "M403"
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4390 self.violations.append((node.left, errorCode))
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4391 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4392 isinstance(node.left, ast.Subscript)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4393 and self.__isSys("version_info", node.left.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4394 and isinstance(node.left.slice, ast.Index)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4395 and AstUtilities.isNumber(node.left.slice.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4396 and AstUtilities.getValue(node.left.slice.value) == 1
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4397 and len(node.ops) == 1
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4398 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4399 and AstUtilities.isNumber(node.comparators[0])
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4400 ):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4401 self.violations.append((node, "M413"))
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4402 elif (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4403 isinstance(node.left, ast.Attribute)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4404 and self.__isSys("version_info", node.left.value)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4405 and node.left.attr == "minor"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4406 and len(node.ops) == 1
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4407 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4408 and AstUtilities.isNumber(node.comparators[0])
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4409 ):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4410 self.violations.append((node, "M414"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4411
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4412 self.generic_visit(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4413
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4414 def visit_Attribute(self, node):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4415 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4416 Public method to handle an attribute.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4417
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4418 @param node reference to the node to be processed
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4419 @type ast.Attribute
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4420 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4421 if (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4422 isinstance(node.value, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4423 and node.value.id == "six"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4424 and node.attr == "PY3"
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4425 ):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4426 self.violations.append((node, "M412"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4427
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4428 self.generic_visit(node)
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4429
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4430 def visit_Name(self, node):
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4431 """
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4432 Public method to handle an name.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4433
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4434 @param node reference to the node to be processed
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4435 @type ast.Name
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4436 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4437 if node.id == "PY3" and self.__fromImports.get(node.id) == "six":
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4438 self.violations.append((node, "M412"))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4439
7245
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4440 self.generic_visit(node)
b47179fbb9d8 Code Style Checker (Miscellaneous Checker)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7057
diff changeset
4441
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
4442
11140
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4443 class DefaultMatchCaseVisitor(ast.NodeVisitor):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4444 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4445 Class implementing a node visitor to check default match cases.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4446
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4447 Note: This class is modeled after flake8-spm v0.0.1.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4448 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4449
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4450 def __init__(self):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4451 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4452 Constructor
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4453 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4454 super().__init__()
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4455
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4456 self.violations = []
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4457
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4458 def visit_Match(self, node):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4459 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4460 Public method to handle Match nodes.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4461
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4462 @param node reference to the node to be processed
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4463 @type ast.Match
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4464 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4465 for badNode, issueCode in self.__badNodes(node):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4466 self.violations.append((badNode, issueCode))
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4467
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4468 self.generic_visit(node)
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4469
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4470 def __badNodes(self, node):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4471 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4472 Private method to yield bad match nodes.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4473
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4474 @param node reference to the node to be processed
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4475 @type ast.Match
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4476 @yield tuple containing a reference to bad match case node and the corresponding
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4477 issue code
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4478 @ytype tyuple of (ast.AST, str)
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4479 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4480 for case in node.cases:
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4481 if self.__emptyMatchDefault(case):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4482 if self.__lastStatementDoesNotRaise(case):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4483 yield self.__findBadNode(case), "M901"
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4484 elif self.__returnPrecedesExceptionRaising(case):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4485 yield self.__findBadNode(case), "M902"
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4486
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4487 def __emptyMatchDefault(self, case):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4488 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4489 Private method to check for an empty default match case.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4490
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4491 @param case reference to the node to be processed
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4492 @type ast.match_case
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4493 @return flag indicating an empty default match case
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4494 @rtype bool
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4495 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4496 pattern = case.pattern
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4497 return isinstance(pattern, ast.MatchAs) and (
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4498 pattern.pattern is None
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4499 or (
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4500 isinstance(pattern.pattern, ast.MatchAs)
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4501 and pattern.pattern.pattern is None
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4502 )
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4503 )
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4504
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4505 def __lastStatementDoesNotRaise(self, case):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4506 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4507 Private method to check that the last case statement does not raise an
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4508 exception.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4509
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4510 @param case reference to the node to be processed
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4511 @type ast.match_case
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4512 @return flag indicating that the last case statement does not raise an
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4513 exception
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4514 @rtype bool
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4515 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4516 return not isinstance(case.body[-1], ast.Raise)
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4517
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4518 def __returnPrecedesExceptionRaising(self, case):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4519 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4520 Private method to check that no return precedes an exception raising.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4521
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4522 @param case reference to the node to be processed
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4523 @type ast.match_case
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4524 @return flag indicating that a return precedes an exception raising
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4525 @rtype bool
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4526 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4527 returnIndex = -1
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4528 raiseIndex = -1
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4529 for index, body in enumerate(case.body):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4530 if isinstance(body, ast.Return):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4531 returnIndex = index
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4532 elif isinstance(body, ast.Raise):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4533 raiseIndex = index
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4534 return returnIndex >= 0 and returnIndex < raiseIndex
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4535
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4536 def __findBadNode(self, case) -> ast.AST:
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4537 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4538 Private method returning a reference to the bad node of a case node.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4539
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4540 @param case reference to the node to be processed
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4541 @type ast.match_case
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4542 @return reference to the bad node
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4543 @rtype ast.AST
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4544 """
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4545 for body in case.body:
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4546 # Handle special case when return precedes exception raising.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4547 # In this case the bad node is that with the return statement.
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4548 if isinstance(body, ast.Return):
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4549 return body
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4550
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4551 return case.body[-1]
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4552
b823386f7591 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11138
diff changeset
4553
4555
861e1741985c Adjustments to future imports for Python 2 compatibility.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 4540
diff changeset
4554 #
7639
422fd05e9c91 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7637
diff changeset
4555 # eflag: noqa = M891

eric ide

mercurial