Thu, 30 Nov 2023 16:39:46 +0100
Code Style Checker
- Updated the logging checker to support more cases (flake8_logging_format 0.9.0).
8186 | 1 | # -*- coding: utf-8 -*- |
2 | ||
9653
e67609152c5e
Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9278
diff
changeset
|
3 | # Copyright (c) 2021 - 2023 Detlev Offenbach <detlev@die-offenbachs.de> |
8186 | 4 | # |
5 | ||
6 | """ | |
7 | Module implementing the checker for simplifying Python code. | |
8 | """ | |
9 | ||
10 | import ast | |
8198
1c765dc90c21
Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8195
diff
changeset
|
11 | import copy |
8186 | 12 | |
8189
17df5c8df8c1
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8186
diff
changeset
|
13 | from .SimplifyNodeVisitor import SimplifyNodeVisitor |
8186 | 14 | |
15 | ||
8207
d359172d11be
Applied some more code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8202
diff
changeset
|
16 | class SimplifyChecker: |
8186 | 17 | """ |
18 | Class implementing a checker for to help simplifying Python code. | |
19 | """ | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
20 | |
8186 | 21 | Codes = [ |
8189
17df5c8df8c1
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8186
diff
changeset
|
22 | # Python-specifics |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
23 | "Y101", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
24 | "Y102", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
25 | "Y103", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
26 | "Y104", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
27 | "Y105", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
28 | "Y106", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
29 | "Y107", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
30 | "Y108", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
31 | "Y109", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
32 | "Y110", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
33 | "Y111", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
34 | "Y112", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
35 | "Y113", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
36 | "Y114", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
37 | "Y115", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
38 | "Y116", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
39 | "Y117", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
40 | "Y118", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
41 | "Y119", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
42 | "Y120", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
43 | "Y121", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
44 | "Y122", |
9277
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
45 | "Y123", |
8209
14470a65a52e
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8207
diff
changeset
|
46 | # Python-specifics not part of flake8-simplify |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
47 | "Y181", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
48 | "Y182", |
8189
17df5c8df8c1
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8186
diff
changeset
|
49 | # Comparations |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
50 | "Y201", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
51 | "Y202", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
52 | "Y203", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
53 | "Y204", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
54 | "Y205", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
55 | "Y206", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
56 | "Y207", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
57 | "Y208", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
58 | "Y211", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
59 | "Y212", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
60 | "Y213", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
61 | "Y221", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
62 | "Y222", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
63 | "Y223", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
64 | "Y224", |
8195
db7f2badd374
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8194
diff
changeset
|
65 | # Opinionated |
db7f2badd374
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8194
diff
changeset
|
66 | "Y301", |
8211
8322a6f219ff
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8210
diff
changeset
|
67 | # General Code Style |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
68 | "Y401", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
69 | "Y402", |
9277
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
70 | # Additional Checks |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
71 | "Y901", |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
72 | "Y904", |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
73 | "Y905", |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
74 | "Y906", |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
75 | "Y907", |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
76 | "Y909", |
10047
cc9ead6d1c46
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
77 | "Y910", |
10355
f3187412ecf4
Updated the 'Simplify' checker to support more cases.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10047
diff
changeset
|
78 | "Y911", |
8186 | 79 | ] |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
80 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
81 | def __init__(self, source, filename, tree, selected, ignored, expected, repeat): |
8186 | 82 | """ |
83 | Constructor | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
84 | |
8186 | 85 | @param source source code to be checked |
86 | @type list of str | |
87 | @param filename name of the source file | |
88 | @type str | |
8198
1c765dc90c21
Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8195
diff
changeset
|
89 | @param tree AST tree of the source code |
1c765dc90c21
Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8195
diff
changeset
|
90 | @type ast.Module |
8186 | 91 | @param selected list of selected codes |
92 | @type list of str | |
93 | @param ignored list of codes to be ignored | |
94 | @type list of str | |
95 | @param expected list of expected codes | |
96 | @type list of str | |
97 | @param repeat flag indicating to report each occurrence of a code | |
98 | @type bool | |
99 | """ | |
100 | self.__select = tuple(selected) | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
101 | self.__ignore = ("",) if selected else tuple(ignored) |
8186 | 102 | self.__expected = expected[:] |
103 | self.__repeat = repeat | |
104 | self.__filename = filename | |
105 | self.__source = source[:] | |
8198
1c765dc90c21
Code Style Checker: changed code such, that the AST tree is built only once and passed to each checker module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8195
diff
changeset
|
106 | self.__tree = copy.deepcopy(tree) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
107 | |
8186 | 108 | # statistics counters |
109 | self.counters = {} | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
110 | |
8186 | 111 | # collection of detected errors |
112 | self.errors = [] | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
113 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
114 | self.__checkCodes = (code for code in self.Codes if not self.__ignoreCode(code)) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
115 | |
8186 | 116 | def __ignoreCode(self, code): |
117 | """ | |
118 | Private method to check if the message code should be ignored. | |
119 | ||
120 | @param code message code to check for | |
121 | @type str | |
122 | @return flag indicating to ignore the given code | |
123 | @rtype bool | |
124 | """ | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
125 | return code.startswith(self.__ignore) and not code.startswith(self.__select) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
126 | |
8186 | 127 | def __error(self, lineNumber, offset, code, *args): |
128 | """ | |
129 | Private method to record an issue. | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
130 | |
8186 | 131 | @param lineNumber line number of the issue |
132 | @type int | |
133 | @param offset position within line of the issue | |
134 | @type int | |
135 | @param code message code | |
136 | @type str | |
137 | @param args arguments for the message | |
138 | @type list | |
139 | """ | |
140 | if self.__ignoreCode(code): | |
141 | return | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
142 | |
8225
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
143 | # record the issue with one based line number |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
144 | errorInfo = { |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
145 | "file": self.__filename, |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
146 | "line": lineNumber + 1, |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
147 | "offset": offset, |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
148 | "code": code, |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
149 | "args": args, |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
150 | } |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
151 | |
8225
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
152 | if errorInfo not in self.errors: |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
153 | # this issue was not seen before |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
154 | if code in self.counters: |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
155 | self.counters[code] += 1 |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
156 | else: |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
157 | self.counters[code] = 1 |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
158 | |
8225
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
159 | # Don't care about expected codes |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
160 | if code in self.__expected: |
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
161 | return |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
162 | |
8225
811b7fa1b8a9
SimplifyChecker: added code to prevent duplicate error counting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8224
diff
changeset
|
163 | if code and (self.counters[code] == 1 or self.__repeat): |
8224
e0ecde23e7b2
SimplifyChecker: added code to prevent duplicate error reports.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8216
diff
changeset
|
164 | self.errors.append(errorInfo) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
165 | |
8186 | 166 | def run(self): |
167 | """ | |
168 | Public method to check the given source against functions | |
169 | to be replaced by 'pathlib' equivalents. | |
170 | """ | |
171 | if not self.__filename: | |
172 | # don't do anything, if essential data is missing | |
173 | return | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
174 | |
8186 | 175 | if not self.__checkCodes: |
176 | # don't do anything, if no codes were selected | |
177 | return | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
178 | |
8191
9125da0c227e
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8189
diff
changeset
|
179 | # Add parent information |
9277
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
180 | self.__addMeta(self.__tree) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
181 | |
8189
17df5c8df8c1
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8186
diff
changeset
|
182 | visitor = SimplifyNodeVisitor(self.__error) |
8186 | 183 | visitor.visit(self.__tree) |
9278
36448ca469c2
Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9277
diff
changeset
|
184 | |
9277
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
185 | def __addMeta(self, root, level=0): |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
186 | """ |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
187 | Private method to amend the nodes of the given AST tree with backward and |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
188 | forward references. |
9278
36448ca469c2
Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9277
diff
changeset
|
189 | |
9277
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
190 | @param root reference to the root node of the tree |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
191 | @type ast.AST |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
192 | @param level nesting level (defaults to 0) |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
193 | @type int (optional) |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
194 | """ |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
195 | previousSibling = None |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
196 | for node in ast.iter_child_nodes(root): |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
197 | if level == 0: |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
198 | node.parent = root |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
199 | node.previous_sibling = previousSibling |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
200 | node.next_sibling = None |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
201 | if previousSibling: |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
202 | node.previous_sibling.next_sibling = node |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
203 | previousSibling = node |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
204 | for child in ast.iter_child_nodes(node): |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
205 | child.parent = node |
471c5a263d53
Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
206 | self.__addMeta(node, level=level + 1) |