Sun, 26 Jun 2022 17:21:11 +0200
Changed default max. line length of code documentation style checker and code style fixer to 88 characters because this gives better looking code (see 'Black' tool).
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
8881
54e42bc2437a
Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8811
diff
changeset
|
3 | # Copyright (c) 2021 - 2022 Detlev Offenbach <detlev@die-offenbachs.de> |
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a checker for import statements. |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
8802
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
10 | import ast |
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import copy |
8801
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
12 | import sys |
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | class ImportsChecker: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | Class implementing a checker for import statements. |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | Codes = [ |
8801
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
20 | ## Local imports |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
21 | "I101", "I102", "I103", |
8802
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
22 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
23 | ## Imports order |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
24 | "I201", "I202", "I203", "I204", |
8808
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
25 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
26 | ## Various other import related |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
27 | "I901", "I902", "I903", "I904", |
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | ] |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | def __init__(self, source, filename, tree, select, ignore, expected, |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | repeat, args): |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | Constructor |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | @param source source code to be checked |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | @type list of str |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | @param filename name of the source file |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | @type str |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | @param tree AST tree of the source code |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | @type ast.Module |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | @param select list of selected codes |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | @type list of str |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @param ignore list of codes to be ignored |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @type list of str |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | @param expected list of expected codes |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | @type list of str |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | @param repeat flag indicating to report each occurrence of a code |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | @type bool |
8801
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
49 | @param args dictionary of arguments for the various checks |
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | @type dict |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | self.__select = tuple(select) |
8801
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
53 | self.__ignore = ("",) if select else tuple(ignore) |
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | self.__expected = expected[:] |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | self.__repeat = repeat |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | self.__filename = filename |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | self.__source = source[:] |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | self.__tree = copy.deepcopy(tree) |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | self.__args = args |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | # statistics counters |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | self.counters = {} |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | # collection of detected errors |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | self.errors = [] |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | checkersWithCodes = [ |
8801
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
68 | (self.__checkLocalImports, ("I101", "I102", "I103")), |
8808
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
69 | (self.__checkImportOrder, ("I201", "I202", "I203", "I204")), |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
70 | (self.__tidyImports, ("I901", "I902", "I903", "I904")), |
8789
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | ] |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | self.__checkers = [] |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | for checker, codes in checkersWithCodes: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | if any(not (code and self.__ignoreCode(code)) |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | for code in codes): |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | self.__checkers.append(checker) |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | def __ignoreCode(self, code): |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | Private method to check if the message code should be ignored. |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | @param code message code to check for |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | @type str |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | @return flag indicating to ignore the given code |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | @rtype bool |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | return (code.startswith(self.__ignore) and |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | not code.startswith(self.__select)) |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | def __error(self, lineNumber, offset, code, *args): |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | Private method to record an issue. |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | @param lineNumber line number of the issue |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | @type int |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | @param offset position within line of the issue |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | @type int |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | @param code message code |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | @type str |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | @param args arguments for the message |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | @type list |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | if self.__ignoreCode(code): |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | return |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | if code in self.counters: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | self.counters[code] += 1 |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | else: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | self.counters[code] = 1 |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | # Don't care about expected codes |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | if code in self.__expected: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | return |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | if code and (self.counters[code] == 1 or self.__repeat): |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | # record the issue with one based line number |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | self.errors.append( |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | { |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | "file": self.__filename, |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | "line": lineNumber + 1, |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | "offset": offset, |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | "code": code, |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | "args": args, |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | } |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | ) |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | def run(self): |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130 | Public method to check the given source against miscellaneous |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | conditions. |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | """ |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | if not self.__filename: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | # don't do anything, if essential data is missing |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | return |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | if not self.__checkers: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | # don't do anything, if no codes were selected |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | return |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | for check in self.__checkers: |
b165effc3c62
Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | check() |
8801
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
143 | |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
144 | def getStandardModules(self): |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
145 | """ |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
146 | Public method to get a list of modules of the standard library. |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
147 | |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
148 | @return set of builtin modules |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
149 | @rtype set of str |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
150 | """ |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
151 | try: |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
152 | return sys.stdlib_module_names |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
153 | except AttributeError: |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
154 | return { |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
155 | "__future__", "__main__", "_dummy_thread", "_thread", "abc", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
156 | "aifc", "argparse", "array", "ast", "asynchat", "asyncio", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
157 | "asyncore", "atexit", "audioop", "base64", "bdb", "binascii", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
158 | "binhex", "bisect", "builtins", "bz2", "calendar", "cgi", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
159 | "cgitb", "chunk", "cmath", "cmd", "code", "codecs", "codeop", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
160 | "collections", "colorsys", "compileall", "concurrent", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
161 | "configparser", "contextlib", "contextvars", "copy", "copyreg", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
162 | "cProfile", "crypt", "csv", "ctypes", "curses", "dataclasses", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
163 | "datetime", "dbm", "decimal", "difflib", "dis", "distutils", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
164 | "doctest", "dummy_threading", "email", "encodings", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
165 | "ensurepip", "enum", "errno", "faulthandler", "fcntl", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
166 | "filecmp", "fileinput", "fnmatch", "formatter", "fractions", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
167 | "ftplib", "functools", "gc", "getopt", "getpass", "gettext", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
168 | "glob", "grp", "gzip", "hashlib", "heapq", "hmac", "html", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
169 | "http", "imaplib", "imghdr", "imp", "importlib", "inspect", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
170 | "io", "ipaddress", "itertools", "json", "keyword", "lib2to3", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
171 | "linecache", "locale", "logging", "lzma", "mailbox", "mailcap", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
172 | "marshal", "math", "mimetypes", "mmap", "modulefinder", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
173 | "msilib", "msvcrt", "multiprocessing", "netrc", "nis", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
174 | "nntplib", "numbers", "operator", "optparse", "os", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
175 | "ossaudiodev", "parser", "pathlib", "pdb", "pickle", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
176 | "pickletools", "pipes", "pkgutil", "platform", "plistlib", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
177 | "poplib", "posix", "pprint", "profile", "pstats", "pty", "pwd", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
178 | "py_compile", "pyclbr", "pydoc", "queue", "quopri", "random", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
179 | "re", "readline", "reprlib", "resource", "rlcompleter", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
180 | "runpy", "sched", "secrets", "select", "selectors", "shelve", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
181 | "shlex", "shutil", "signal", "site", "smtpd", "smtplib", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
182 | "sndhdr", "socket", "socketserver", "spwd", "sqlite3", "ssl", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
183 | "stat", "statistics", "string", "stringprep", "struct", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
184 | "subprocess", "sunau", "symbol", "symtable", "sys", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
185 | "sysconfig", "syslog", "tabnanny", "tarfile", "telnetlib", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
186 | "tempfile", "termios", "test", "textwrap", "threading", "time", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
187 | "timeit", "tkinter", "token", "tokenize", "trace", "traceback", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
188 | "tracemalloc", "tty", "turtle", "turtledemo", "types", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
189 | "typing", "unicodedata", "unittest", "urllib", "uu", "uuid", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
190 | "venv", "warnings", "wave", "weakref", "webbrowser", "winreg", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
191 | "winsound", "wsgiref", "xdrlib", "xml", "xmlrpc", "zipapp", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
192 | "zipfile", "zipimport", "zlib", "zoneinfo", |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
193 | } |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
194 | |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
195 | ####################################################################### |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
196 | ## Local imports |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
197 | ## |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
198 | ## adapted from: flake8-local-import v1.0.6 |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
199 | ####################################################################### |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
200 | |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
201 | def __checkLocalImports(self): |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
202 | """ |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
203 | Private method to check local imports. |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
204 | """ |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
205 | from .LocalImportVisitor import LocalImportVisitor |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
206 | |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
207 | visitor = LocalImportVisitor(self.__args, self) |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
208 | visitor.visit(copy.deepcopy(self.__tree)) |
8fbb21be8579
Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8789
diff
changeset
|
209 | for violation in visitor.violations: |
8802
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
210 | if not self.__ignoreCode(violation[1]): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
211 | node = violation[0] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
212 | reason = violation[1] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
213 | self.__error(node.lineno - 1, node.col_offset, reason) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
214 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
215 | ####################################################################### |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
216 | ## Import order |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
217 | ## |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
218 | ## adapted from: flake8-alphabetize v0.0.17 |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
219 | ####################################################################### |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
220 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
221 | def __checkImportOrder(self): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
222 | """ |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
223 | Private method to check the order of import statements. |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
224 | """ |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
225 | from .ImportNode import ImportNode |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
226 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
227 | errors = [] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
228 | imports = [] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
229 | importNodes, listNode = self.__findNodes(self.__tree) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
230 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
231 | # check for an error in '__all__' |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
232 | allError = self.__findErrorInAll(listNode) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
233 | if allError is not None: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
234 | errors.append(allError) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
235 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
236 | for importNode in importNodes: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
237 | if ( |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
238 | isinstance(importNode, ast.Import) and |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
239 | len(importNode.names) > 1 |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
240 | ): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
241 | # skip suck imports because its already handled by pycodestyle |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
242 | continue |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
243 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
244 | imports.append(ImportNode( |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
245 | self.__args.get("ApplicationPackageNames", []), |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
246 | importNode, self)) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
247 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
248 | lenImports = len(imports) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
249 | if lenImports > 0: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
250 | p = imports[0] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
251 | if p.error is not None: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
252 | errors.append(p.error) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
253 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
254 | if lenImports > 1: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
255 | for n in imports[1:]: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
256 | if n.error is not None: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
257 | errors.append(n.error) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
258 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
259 | if n == p: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
260 | errors.append((n.node, "I203", str(p), str(n))) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
261 | elif n < p: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
262 | errors.append((n.node, "I201", str(n), str(p))) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
263 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
264 | p = n |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
265 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
266 | for error in errors: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
267 | if not self.__ignoreCode(error[1]): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
268 | node = error[0] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
269 | reason = error[1] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
270 | args = error[2:] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
271 | self.__error(node.lineno - 1, node.col_offset, reason, *args) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
272 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
273 | def __findNodes(self, tree): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
274 | """ |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
275 | Private method to find all import and import from nodes of the given |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
276 | tree. |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
277 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
278 | @param tree reference to the ast node tree to be parsed |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
279 | @type ast.AST |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
280 | @return tuple containing a list of import nodes and the '__all__' node |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
281 | @rtype tuple of (ast.Import | ast.ImportFrom, ast.List | ast.Tuple) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
282 | """ |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
283 | importNodes = [] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
284 | listNode = None |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
285 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
286 | if isinstance(tree, ast.Module): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
287 | body = tree.body |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
288 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
289 | for n in body: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
290 | if isinstance(n, (ast.Import, ast.ImportFrom)): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
291 | importNodes.append(n) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
292 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
293 | elif isinstance(n, ast.Assign): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
294 | for t in n.targets: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
295 | if isinstance(t, ast.Name) and t.id == "__all__": |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
296 | value = n.value |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
297 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
298 | if isinstance(value, (ast.List, ast.Tuple)): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
299 | listNode = value |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
300 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
301 | return importNodes, listNode |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
302 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
303 | def __findErrorInAll(self, node): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
304 | """ |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
305 | Private method to check the '__all__' node for errors. |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
306 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
307 | @param node reference to the '__all__' node |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
308 | @type ast.List or ast.Tuple |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
309 | @return tuple containing a reference to the node and an error code |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
310 | @rtype rtype tuple of (ast.List | ast.Tuple, str) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
311 | """ |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
312 | if node is not None: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
313 | actualList = [] |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
314 | for el in node.elts: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
315 | if isinstance(el, ast.Constant): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
316 | actualList.append(el.value) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
317 | elif isinstance(el, ast.Str): |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
318 | actualList.append(el.s) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
319 | else: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
320 | # Can't handle anything that isn't a string literal |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
321 | return None |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
322 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
323 | expectedList = sorted(actualList) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
324 | if expectedList != actualList: |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
325 | return (node, "I204", ", ".join(expectedList)) |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
326 | |
129a973fc33e
Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8801
diff
changeset
|
327 | return None |
8808
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
328 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
329 | ####################################################################### |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
330 | ## Tidy imports |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
331 | ## |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
332 | ## adapted from: flake8-tidy-imports v4.5.0 |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
333 | ####################################################################### |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
334 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
335 | def __tidyImports(self): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
336 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
337 | Private method to check various other import related topics. |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
338 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
339 | self.__bannedModules = self.__args.get("BannedModules", []) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
340 | self.__banRelativeImports = self.__args.get("BanRelativeImports", "") |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
341 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
342 | ruleMethods = [] |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
343 | if not self.__ignoreCode("I901"): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
344 | ruleMethods.append(self.__checkUnnecessaryAlias) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
345 | if ( |
8811
9ff6b1b5f601
Fixed a code style issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8808
diff
changeset
|
346 | not self.__ignoreCode("I902") and |
9ff6b1b5f601
Fixed a code style issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8808
diff
changeset
|
347 | bool(self.__bannedModules) |
8808
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
348 | ): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
349 | ruleMethods.append(self.__checkBannedImport) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
350 | if ( |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
351 | (not self.__ignoreCode("I903") and |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
352 | self.__banRelativeImports == "parents") or |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
353 | (not self.__ignoreCode("I904") and |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
354 | self.__banRelativeImports == "true") |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
355 | ): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
356 | ruleMethods.append(self.__checkBannedRelativeImports) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
357 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
358 | for node in ast.walk(self.__tree): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
359 | for method in ruleMethods: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
360 | method(node) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
361 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
362 | def __checkUnnecessaryAlias(self, node): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
363 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
364 | Private method to check unnecessary import aliases. |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
365 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
366 | @param node reference to the node to be checked |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
367 | @type ast.AST |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
368 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
369 | if isinstance(node, ast.Import): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
370 | for alias in node.names: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
371 | if "." not in alias.name: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
372 | fromName = None |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
373 | importedName = alias.name |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
374 | else: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
375 | fromName, importedName = alias.name.rsplit(".", 1) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
376 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
377 | if importedName == alias.asname: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
378 | if fromName: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
379 | rewritten = "from {0} import {1}".format( |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
380 | fromName, importedName) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
381 | else: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
382 | rewritten = "import {0}".format(importedName) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
383 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
384 | self.__error(node.lineno - 1, node.col_offset, "I901", |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
385 | rewritten) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
386 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
387 | elif isinstance(node, ast.ImportFrom): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
388 | for alias in node.names: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
389 | if alias.name == alias.asname: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
390 | rewritten = "from {0} import {1}".format( |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
391 | node.module, alias.name) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
392 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
393 | self.__error(node.lineno - 1, node.col_offset, "I901", |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
394 | rewritten) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
395 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
396 | def __checkBannedImport(self, node): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
397 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
398 | Private method to check import of banned modules. |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
399 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
400 | @param node reference to the node to be checked |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
401 | @type ast.AST |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
402 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
403 | if not bool(self.__bannedModules): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
404 | return |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
405 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
406 | if isinstance(node, ast.Import): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
407 | moduleNames = [alias.name for alias in node.names] |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
408 | elif isinstance(node, ast.ImportFrom): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
409 | nodeModule = node.module or "" |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
410 | moduleNames = [nodeModule] |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
411 | for alias in node.names: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
412 | moduleNames.append("{0}.{1}".format(nodeModule, alias.name)) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
413 | else: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
414 | return |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
415 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
416 | # Sort from most to least specific paths. |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
417 | moduleNames.sort(key=len, reverse=True) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
418 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
419 | warned = set() |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
420 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
421 | for moduleName in moduleNames: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
422 | if moduleName in self.__bannedModules: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
423 | if any(mod.startswith(moduleName) for mod in warned): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
424 | # Do not show an error for this line if we already showed |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
425 | # a more specific error. |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
426 | continue |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
427 | else: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
428 | warned.add(moduleName) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
429 | self.__error(node.lineno - 1, node.col_offset, "I902", |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
430 | moduleName) |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
431 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
432 | def __checkBannedRelativeImports(self, node): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
433 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
434 | Private method to check if relative imports are banned. |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
435 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
436 | @param node reference to the node to be checked |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
437 | @type ast.AST |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
438 | """ |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
439 | if not self.__banRelativeImports: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
440 | return |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
441 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
442 | elif self.__banRelativeImports == "parents": |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
443 | minNodeLevel = 1 |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
444 | msgCode = "I903" |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
445 | else: |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
446 | minNodeLevel = 0 |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
447 | msgCode = "I904" |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
448 | |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
449 | if ( |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
450 | self.__banRelativeImports and |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
451 | isinstance(node, ast.ImportFrom) and |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
452 | node.level > minNodeLevel |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
453 | ): |
033fa34447d0
Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8802
diff
changeset
|
454 | self.__error(node.lineno - 1, node.col_offset, msgCode) |