src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Naming/NamingStyleChecker.py

Sat, 22 Feb 2025 18:06:26 +0100

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

Corrected some code formatting issues.

2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10683
diff changeset
3 # Copyright (c) 2013 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
2984
031cceaa8b01 Continued changing the names of the various code style checkers to make them more appropriate to the broadened scope.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2982
diff changeset
7 Module implementing a checker for naming conventions.
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
10 import ast
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import collections
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
12 import copy
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
13 import functools
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 import os
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
4465
2fbb5bdb8ddf Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
16 try:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
17 ast.AsyncFunctionDef # __IGNORE_EXCEPTION__
4465
2fbb5bdb8ddf Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
18 except AttributeError:
2fbb5bdb8ddf Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
19 ast.AsyncFunctionDef = ast.FunctionDef
2fbb5bdb8ddf Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
20
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
22 # TODO: change this to a checker like the others
8207
d359172d11be Applied some more code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
23 class NamingStyleChecker:
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
2984
031cceaa8b01 Continued changing the names of the various code style checkers to make them more appropriate to the broadened scope.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2982
diff changeset
25 Class implementing a checker for naming conventions.
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Codes = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
29 "N801",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
30 "N802",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
31 "N803",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
32 "N804",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
33 "N805",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
34 "N806",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35 "N807",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
36 "N808",
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
37 "N809",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38 "N811",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
39 "N812",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
40 "N813",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
41 "N814",
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
42 "N815",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
43 "N818",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
44 "N821",
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
45 "N822",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
46 "N823",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
47 "N831",
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
49
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
50 def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
52 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
53
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
54 @param source source code to be checked
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
55 @type list of str
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
56 @param filename name of the source file
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
57 @type str
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
58 @param tree AST tree of the source code
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
59 @type ast.Module
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
60 @param select list of selected codes
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
61 @type list of str
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
62 @param ignore list of codes to be ignored
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
63 @type list of str
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
64 @param expected list of expected codes
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
65 @type list of str
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
66 @param repeat flag indicating to report each occurrence of a code
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
67 @type bool
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
68 @param args dictionary of arguments for the various checks
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
69 @type dict
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 """
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
71 self.__select = tuple(select)
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
72 self.__ignore = tuple(ignore)
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
73 self.__expected = expected[:]
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
74 self.__repeat = repeat
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
75 self.__filename = filename
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
76 self.__source = source[:]
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
77 self.__tree = copy.deepcopy(tree)
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
78 self.__args = args
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
79
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.__parents = collections.deque()
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
81
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
82 # statistics counters
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
83 self.counters = {}
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
84
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
85 # collection of detected errors
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
86 self.errors = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
87
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
88 self.__checkersWithCodes = {
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
89 "classdef": [
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
90 (self.__checkClassName, ("N801", "N818")),
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
91 (self.__checkNameToBeAvoided, ("N831",)),
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
92 ],
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
93 "module": [
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
94 (self.__checkModule, ("N807", "N808")),
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
95 ],
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 }
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
97 for name in ("functiondef", "asyncfunctiondef"):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
98 self.__checkersWithCodes[name] = [
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
99 (self.__checkFunctionName, ("N802", "N809")),
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
100 (self.__checkFunctionArgumentNames, ("N803", "N804", "N805", "N806")),
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
101 (self.__checkNameToBeAvoided, ("N831",)),
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
102 ]
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
103 for name in ("assign", "namedexpr", "annassign"):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
104 self.__checkersWithCodes[name] = [
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
105 (self.__checkVariableNames, ("N821",)),
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
106 (self.__checkNameToBeAvoided, ("N831",)),
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
107 ]
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
108 for name in (
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
109 "with",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
110 "asyncwith",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
111 "for",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
112 "asyncfor",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
113 "excepthandler",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
114 "generatorexp",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
115 "listcomp",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
116 "dictcomp",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
117 "setcomp",
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
118 ):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
119 self.__checkersWithCodes[name] = [
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
120 (self.__checkVariableNames, ("N821",)),
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
121 ]
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
122 for name in ("import", "importfrom"):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
123 self.__checkersWithCodes[name] = [
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
124 (self.__checkImportAs, ("N811", "N812", "N813", "N814", "N815")),
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
125 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
126
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
127 self.__checkers = collections.defaultdict(list)
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
128 for key, checkers in self.__checkersWithCodes.items():
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
129 for checker, codes in checkers:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
130 if any(not (code and self.__ignoreCode(code)) for code in codes):
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
131 self.__checkers[key].append(checker)
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
133 def __ignoreCode(self, code):
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
134 """
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
135 Private method to check if the message code should be ignored.
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
136
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
137 @param code message code to check for
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
138 @type str
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
139 @return flag indicating to ignore the given code
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
140 @rtype bool
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
141 """
11145
d328a7b74fd8 Corrected some code formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11142
diff changeset
142 return code in self.__ignore or (
d328a7b74fd8 Corrected some code formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11142
diff changeset
143 code.startswith(self.__ignore) and not code.startswith(self.__select)
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
144 )
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
145
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
146 def __error(self, node, code):
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
147 """
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
148 Private method to build the error information.
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
149
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
150 @param node AST node to report an error for
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
151 @type ast.AST
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
152 @param code error code to report
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
153 @type str
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
154 """
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
155 if self.__ignoreCode(code):
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
156 return
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
157
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
158 if isinstance(node, ast.Module):
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
159 lineno = 0
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
160 offset = 0
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
161 else:
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
162 lineno = node.lineno
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
163 offset = node.col_offset
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
164 if isinstance(node, ast.ClassDef):
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
165 lineno += len(node.decorator_list)
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
166 offset += 6
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
167 elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
168 lineno += len(node.decorator_list)
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
169 offset += 4
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
170
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
171 # record the issue with one based line number
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
172 errorInfo = {
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
173 "file": self.__filename,
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
174 "line": lineno,
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
175 "offset": offset,
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
176 "code": code,
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
177 "args": [],
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
178 }
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
179
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
180 if errorInfo not in self.errors:
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
181 # this issue was not seen before
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
182 if code in self.counters:
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
183 self.counters[code] += 1
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
184 else:
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
185 self.counters[code] = 1
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
186
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
187 # Don't care about expected codes
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
188 if code in self.__expected:
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
189 return
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
190
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
191 if code and (self.counters[code] == 1 or self.__repeat):
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
192 self.errors.append(errorInfo)
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
193
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 def run(self):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 """
5147
d39dd5cee0c8 Renamed pep8.py to pycodestyle.py in order to track the upstream renaming.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
196 Public method run by the pycodestyle.py checker.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
197
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 @return tuple giving line number, offset within line, code and
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 checker function
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
200 @rtype tuple of (int, int, str, function)
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 """
2975
fb336783a649 A little optimization to the naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2962
diff changeset
202 if self.__tree and self.__checkers:
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 return self.__visitTree(self.__tree)
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 else:
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 return ()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
206
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 def __visitTree(self, node):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 Private method to scan the given AST tree.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
210
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 @param node AST tree node to scan
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
212 @type ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 """
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
214 self.__visitNode(node)
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 self.__parents.append(node)
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 for child in ast.iter_child_nodes(node):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
217 self.__visitTree(child)
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 self.__parents.pop()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
219
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 def __visitNode(self, node):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 Private method to inspect the given AST node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
223
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 @param node AST tree node to inspect
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
225 @type ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 if isinstance(node, ast.ClassDef):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 self.__tagClassFunctions(node)
4465
2fbb5bdb8ddf Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
229 elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 self.__findGlobalDefs(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
231
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 checkerName = node.__class__.__name__.lower()
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 if checkerName in self.__checkers:
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 for checker in self.__checkers[checkerName]:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
235 checker(node, self.__parents)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
236
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 def __tagClassFunctions(self, classNode):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 Private method to tag functions if they are methods, class methods or
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 static methods.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
241
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 @param classNode AST tree node to tag
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
243 @type ast.ClassDef
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 """
7249
0bf517e60f54 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
245 # try to find all 'old style decorators'
0bf517e60f54 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
246 # like m = staticmethod(m)
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 lateDecoration = {}
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 for node in ast.iter_child_nodes(classNode):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
249 if not (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
250 isinstance(node, ast.Assign)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
251 and isinstance(node.value, ast.Call)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
252 and isinstance(node.value.func, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
253 ):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 continue
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 funcName = node.value.func.id
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 if funcName in ("classmethod", "staticmethod"):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
257 meth = len(node.value.args) == 1 and node.value.args[0]
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 if isinstance(meth, ast.Name):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 lateDecoration[meth.id] = funcName
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 # iterate over all functions and tag them
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 for node in ast.iter_child_nodes(classNode):
4465
2fbb5bdb8ddf Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
263 if not isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
265
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
266 node.function_type = "method"
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 if node.name == "__new__":
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 node.function_type = "classmethod"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
269
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 if node.name in lateDecoration:
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 node.function_type = lateDecoration[node.name]
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 elif node.decorator_list:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
273 names = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
274 d.id
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
275 for d in node.decorator_list
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
276 if isinstance(d, ast.Name)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
277 and d.id in ("classmethod", "staticmethod")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
278 ]
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 if names:
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 node.function_type = names[0]
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 def __findGlobalDefs(self, functionNode):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 Private method amend a node with global definitions information.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
285
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 @param functionNode AST tree node to amend
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
287 @type ast.FunctionDef or ast.AsyncFunctionDef
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 globalNames = set()
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 nodesToCheck = collections.deque(ast.iter_child_nodes(functionNode))
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 while nodesToCheck:
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 node = nodesToCheck.pop()
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 if isinstance(node, ast.Global):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 globalNames.update(node.names)
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
296 if not isinstance(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
297 node, (ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
298 ):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 nodesToCheck.extend(ast.iter_child_nodes(node))
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 functionNode.global_names = globalNames
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
301
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 def __getArgNames(self, node):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 Private method to get the argument names of a function node.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
305
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 @param node AST node to extract arguments names from
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
307 @type ast.FunctionDef or ast.AsyncFunctionDef
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
308 @return list of argument names
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
309 @rtype list of str
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 """
7637
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
311 posArgs = [arg.arg for arg in node.args.args]
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
312 kwOnly = [arg.arg for arg in node.args.kwonlyargs]
c878e8255972 Removed some more Python2 related code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
313 return posArgs + kwOnly
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
314
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 def __isNameToBeAvoided(self, name):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 Private method to check, if the given name should be avoided.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
318
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
319 @param name name to be checked
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
320 @type str
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
321 @return flag indicating to avoid it
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
322 @rtype bool
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 return name in ("l", "O", "I")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
325
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
326 def __checkNameToBeAvoided(self, node, _parents):
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
327 """
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
328 Private class to check the given node for a name to be avoided (N831).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
329
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
330 @param node AST note to check
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
331 @type ast.Ast
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
332 @param _parents list of parent nodes (unused)
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
333 @type list of ast.AST
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
334 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
335 if isinstance(node, (ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef)):
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
336 name = node.name
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
337 if self.__isNameToBeAvoided(name):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
338 self.__error(node, "N831")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
339
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
340 elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
341 argNames = self.__getArgNames(node)
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
342 for arg in argNames:
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
343 if self.__isNameToBeAvoided(arg):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
344 self.__error(node, "N831")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
345
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
346 elif isinstance(node, (ast.Assign, ast.NamedExpr, ast.AnnAssign)):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
347 if isinstance(node, ast.Assign):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
348 targets = node.targets
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
349 else:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
350 targets = [node.target]
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
351 for target in targets:
5589
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
352 if isinstance(target, ast.Name):
5597
3d88d53f8c2b Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5589
diff changeset
353 name = target.id
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
354 if bool(name) and self.__isNameToBeAvoided(name):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
355 self.__error(node, "N831")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
356
5589
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
357 elif isinstance(target, (ast.Tuple, ast.List)):
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
358 for element in target.elts:
ad8f37c6a306 Fixed code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5585
diff changeset
359 if isinstance(element, ast.Name):
5597
3d88d53f8c2b Continued fixing code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5589
diff changeset
360 name = element.id
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
361 if bool(name) and self.__isNameToBeAvoided(name):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
362 self.__error(node, "N831")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
363
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
364 def __getClassdef(self, name, parents):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
365 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
366 Private method to extract the class definition.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
367
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
368 @param name name of the class
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
369 @type str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
370 @param parents list of parent nodes
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
371 @type list of ast.AST
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
372 @return node containing the class definition
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
373 @rtype ast.ClassDef
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
374 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
375 for parent in parents:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
376 for node in parent.body:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
377 if isinstance(node, ast.ClassDef) and node.name == name:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
378 return node
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
379
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
380 return None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
381
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
382 def __superClassNames(self, name, parents, names=None):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
383 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
384 Private method to extract the names of all super classes.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
385
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
386 @param name name of the class
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
387 @type str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
388 @param parents list of parent nodes
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
389 @type list of ast.AST
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
390 @param names set of collected class names (defaults to None)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
391 @type set of str (optional)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
392 @return set of class names
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
393 @rtype set of str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
394 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
395 if names is None:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
396 # initialize recursive search with empty set
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
397 names = set()
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
398
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
399 classdef = self.__getClassdef(name, parents)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
400 if not classdef:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
401 return names
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
402
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
403 for base in classdef.bases:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
404 if isinstance(base, ast.Name) and base.id not in names:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
405 names.add(base.id)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
406 names.update(self.__superClassNames(base.id, parents, names))
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
407 return names
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
408
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 def __checkClassName(self, node, parents):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 Private class to check the given node for class name
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
412 conventions (N801, N818).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
413
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 Almost without exception, class names use the CapWords convention.
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 Classes for internal use have a leading underscore in addition.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
416
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 @param node AST note to check
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
418 @type ast.ClassDef
2962
d6c9d1ca2da4 Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2910
diff changeset
419 @param parents list of parent nodes
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
420 @type list of ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 """
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
422 name = node.name
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
423 strippedName = name.strip("_")
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
424 if not strippedName[:1].isupper() or "_" in strippedName:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
425 self.__error(node, "N801")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
426
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
427 superClasses = self.__superClassNames(name, parents)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
428 if "Exception" in superClasses and not name.endswith("Error"):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
429 self.__error(node, "N818")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
430
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
431 def __checkFunctionName(self, node, _parents):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 Private class to check the given node for function name
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
434 conventions (N802, N809).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
435
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 Function names should be lowercase, with words separated by underscores
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 as necessary to improve readability. Functions <b>not</b> being
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 methods '__' in front and back are not allowed. Mixed case is allowed
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 only in contexts where that's already the prevailing style
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 (e.g. threading.py), to retain backwards compatibility.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
441
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 @param node AST note to check
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
443 @type ast.FunctionDef or ast.AsynFunctionDef
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
444 @param _parents list of parent nodes (unused)
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
445 @type list of ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 functionType = getattr(node, "function_type", "function")
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 name = node.name
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
449
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
450 if name in ("__dir__", "__getattr__"):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
451 return
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
452
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
453 if name.lower() != name:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
454 self.__error(node, "N802")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
455 if functionType == "function" and name[:2] == "__" and name[-2:] == "__":
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
456 self.__error(node, "N809")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
457
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
458 def __checkFunctionArgumentNames(self, node, _parents):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 Private class to check the argument names of functions
2910
cdc56e9d9f12 Optimized the PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2905
diff changeset
461 (N803, N804, N805, N806).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
462
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 The argument names of a function should be lowercase, with words
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 separated by underscores. A class method should have 'cls' as the
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 first argument. A method should have 'self' as the first argument.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
466
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 @param node AST note to check
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
468 @type ast.FunctionDef or ast.AsynFunctionDef
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
469 @param _parents list of parent nodes (unused)
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
470 @type list of ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 if node.args.kwarg is not None:
7894
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
473 kwarg = node.args.kwarg.arg
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
474 if kwarg.lower() != kwarg:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
475 self.__error(node, "N803")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
476
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
477 elif node.args.vararg is not None:
7894
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7784
diff changeset
478 vararg = node.args.vararg.arg
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
479 if vararg.lower() != vararg:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
480 self.__error(node, "N803")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
481
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
482 else:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
483 argNames = self.__getArgNames(node)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
484 functionType = getattr(node, "function_type", "function")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
485
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
486 if not argNames:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
487 if functionType == "method":
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
488 self.__error(node, "N805")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
489 elif functionType == "classmethod":
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
490 self.__error(node, "N804")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
491
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
492 elif functionType == "method" and argNames[0] != "self":
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
493 self.__error(node, "N805")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
494 elif functionType == "classmethod" and argNames[0] != "cls":
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
495 self.__error(node, "N804")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
496 elif functionType == "staticmethod" and argNames[0] in ("cls", "self"):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
497 self.__error(node, "N806")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
498 for arg in argNames:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
499 if arg.lower() != arg:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
500 self.__error(node, "N803")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
501 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
502
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
503 def __checkVariableNames(self, node, parents):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
504 """
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
505 Private method to check variable names in function, class and global scope
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
506 (N821, N822, N823).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
507
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
508 Local variables in functions should be lowercase.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
509
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510 @param node AST note to check
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
511 @type ast.AST
2962
d6c9d1ca2da4 Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2910
diff changeset
512 @param parents list of parent nodes
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
513 @type list of ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 """
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
515 nodeType = type(node)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
516 if nodeType is ast.Assign:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
517 if self.__isNamedTupel(node.value):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
518 return
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
519 for target in node.targets:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
520 self.__findVariableNameErrors(target, parents)
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
521
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
522 elif nodeType in (ast.NamedExpr, ast.AnnAssign):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
523 if self.__isNamedTupel(node.value):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
524 return
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
525 self.__findVariableNameErrors(node.target, parents)
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
526
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
527 elif nodeType in (ast.With, ast.AsyncWith):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
528 for item in node.items:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
529 self.__findVariableNameErrors(item.optional_vars, parents)
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
530
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
531 elif nodeType in (ast.For, ast.AsyncFor):
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
532 self.__findVariableNameErrors(node.target, parents)
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
533
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
534 elif nodeType is ast.ExceptHandler:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
535 if node.name:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
536 self.__findVariableNameErrors(node, parents)
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
537
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
538 elif nodeType in (ast.GeneratorExp, ast.ListComp, ast.DictComp, ast.SetComp):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
539 for gen in node.generators:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
540 self.__findVariableNameErrors(gen.target, parents)
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
541
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
542 def __findVariableNameErrors(self, assignmentTarget, parents):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
543 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
544 Private method to check, if there is a variable name error.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
545
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
546 @param assignmentTarget target node of the assignment
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
547 @type ast.Name, ast.Tuple, ast.List or ast.ExceptHandler
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
548 @param parents list of parent nodes
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
549 @type ast.AST
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
550 """
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 for parentFunc in reversed(parents):
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 if isinstance(parentFunc, ast.ClassDef):
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
553 checker = self.__classVariableCheck
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
554 break
4465
2fbb5bdb8ddf Prepared eric for Python 3.5 to support the new 'async def' function definition.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
555 if isinstance(parentFunc, (ast.FunctionDef, ast.AsyncFunctionDef)):
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
556 checker = functools.partial(self.__functionVariableCheck, parentFunc)
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 break
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
558 else:
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
559 checker = self.__globalVariableCheck
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
560 for name in self.__extractNames(assignmentTarget):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
561 errorCode = checker(name)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
562 if errorCode:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
563 self.__error(assignmentTarget, errorCode)
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
564
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
565 def __extractNames(self, assignmentTarget):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
566 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
567 Private method to extract the names from the target node.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
568
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
569 @param assignmentTarget target node of the assignment
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
570 @type ast.Name, ast.Tuple, ast.List or ast.ExceptHandler
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
571 @yield name of the variable
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
572 @ytype str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
573 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
574 targetType = type(assignmentTarget)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
575 if targetType is ast.Name:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
576 yield assignmentTarget.id
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
577 elif targetType in (ast.Tuple, ast.List):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
578 for element in assignmentTarget.elts:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
579 elementType = type(element)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
580 if elementType is ast.Name:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
581 yield element.id
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
582 elif elementType in (ast.Tuple, ast.List):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
583 yield from self.__extractNames(element)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
584 elif elementType is ast.Starred: # PEP 3132
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
585 yield from self.__extractNames(element.value)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
586 elif isinstance(assignmentTarget, ast.ExceptHandler):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
587 yield assignmentTarget.name
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
588
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
589 def __isMixedCase(self, name):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
590 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
591 Private method to check, if the given name is mixed case.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
592
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
593 @param name variable name to be checked
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
594 @type str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
595 @return flag indicating mixed case
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
596 @rtype bool
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
597 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
598 return name.lower() != name and name.lstrip("_")[:1].islower()
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
599
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
600 def __globalVariableCheck(self, name):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
601 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
602 Private method to determine the error code for a variable in global scope.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
603
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
604 @param name variable name to be checked
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
605 @type str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
606 @return error code or None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
607 @rtype str or None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
608 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
609 if self.__isMixedCase(name):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
610 return "N823"
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
611
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
612 return None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
613
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
614 def __classVariableCheck(self, name):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
615 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
616 Private method to determine the error code for a variable in class scope.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
617
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
618 @param name variable name to be checked
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
619 @type str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
620 @return error code or None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
621 @rtype str or None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
622 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
623 if self.__isMixedCase(name):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
624 return "N822"
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
625
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
626 return None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
627
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
628 def __functionVariableCheck(self, func, varName):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
629 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
630 Private method to determine the error code for a variable in class scope.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
631
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
632 @param func reference to the function definition node
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
633 @type ast.FunctionDef or ast.AsyncFunctionDef
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
634 @param varName variable name to be checked
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
635 @type str
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
636 @return error code or None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
637 @rtype str or None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
638 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
639 if varName not in func.global_names and varName.lower() != varName:
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
640 return "N821"
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
641
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
642 return None
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
643
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
644 def __isNamedTupel(self, nodeValue):
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
645 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
646 Private method to check, if a node is a named tuple.
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
647
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
648 @param nodeValue node to be checked
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
649 @type ast.AST
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
650 @return flag indicating a nemd tuple
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
651 @rtype bool
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
652 """
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
653 return isinstance(nodeValue, ast.Call) and (
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
654 (
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
655 isinstance(nodeValue.func, ast.Attribute)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
656 and nodeValue.func.attr == "namedtuple"
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
657 )
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
658 or (
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
659 isinstance(nodeValue.func, ast.Name)
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
660 and nodeValue.func.id == "namedtuple"
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
661 )
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
662 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
663
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
664 def __checkModule(self, node, _parents):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
665 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
666 Private method to check module naming conventions (N807, N808).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
667
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
668 Module and package names should be lowercase.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
669
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
670 @param node AST node to check
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
671 @type ast.AST
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
672 @param _parents list of parent nodes (unused)
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
673 @type list of ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
674 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
675 if self.__filename:
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
676 moduleName = os.path.splitext(os.path.basename(self.__filename))[0]
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
677 if moduleName.lower() != moduleName:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
678 self.__error(node, "N807")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
679
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
680 if moduleName == "__init__":
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
681 # we got a package
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
682 packageName = os.path.split(os.path.dirname(self.__filename))[1]
3762
ac51ccb60e35 Fixed an issue in the naming style checker for check N808.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3646
diff changeset
683 if packageName.lower() != packageName:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
684 self.__error(node, "N808")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
685
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
686 def __checkImportAs(self, node, _parents):
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
687 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
688 Private method to check that imports don't change the
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
689 naming convention (N811, N812, N813, N814, N815).
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
690
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
691 @param node AST node to check
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
692 @type ast.Import
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
693 @param _parents list of parent nodes (unused)
10437
2f70ca07f0af Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
694 @type list of ast.AST
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
695 """
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
696 for name in node.names:
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
697 asname = name.asname
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
698 if not asname:
2894
8e4264045fc9 Started implementing a PEP-8 naming checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
699 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
700
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
701 originalName = name.name
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
702 if originalName.isupper():
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
703 if not asname.isupper():
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
704 self.__error(node, "N811")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
705 elif originalName.islower():
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
706 if asname.lower() != asname:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
707 self.__error(node, "N812")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
708 elif asname.islower():
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
709 self.__error(node, "N813")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
710 elif asname.isupper():
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
711 if "".join(filter(str.isupper, originalName)) == asname:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
712 self.__error(node, "N815")
9271
f655c20ff500 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
713 else:
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
714 self.__error(node, "N814")

eric ide

mercurial