src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportsChecker.py

Thu, 27 Feb 2025 14:42:39 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 27 Feb 2025 14:42:39 +0100
branch
eric7
changeset 11150
73d80859079c
parent 11147
dee6e106b4d3
permissions
-rw-r--r--

Code Style Checkers
- Refactored the various code style checkers for better maintainability.

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
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3 # Copyright (c) 2021 - 2025 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
9275
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
12 import re
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
14 from CodeStyleTopicChecker import CodeStyleTopicChecker
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
16
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
17 class ImportsChecker(CodeStyleTopicChecker):
8789
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 Class implementing a checker for import statements.
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
21
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 Codes = [
8801
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
23 ## Local imports
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
24 "I-101",
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
25 "I-102",
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
26 "I-103",
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
27 ## Various other import related
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
28 "I-901",
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
29 "I-902",
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
30 "I-903",
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
31 "I-904",
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 ]
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
33 Category = "I"
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35 def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @param source source code to be checked
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @type list of str
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param filename name of the source file
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @type str
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @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
44 @type ast.Module
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @param select list of selected 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 ignore list of codes to be ignored
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @type list of str
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @param expected list of expected codes
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @type list of str
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @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
52 @type bool
8801
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
53 @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
54 @type dict
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
56 super().__init__(
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
57 ImportsChecker.Category,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
58 source,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
59 filename,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
60 tree,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
61 select,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
62 ignore,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
63 expected,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
64 repeat,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
65 args,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
66 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
67
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 checkersWithCodes = [
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
69 (self.__checkLocalImports, ("I-101", "I-102", "I-103")),
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
70 (self.__tidyImports, ("I-901", "I-902", "I-903", "I-904")),
8789
b165effc3c62 Started implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 ]
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
72 self._initializeCheckers(checkersWithCodes)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
73
8801
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
74 #######################################################################
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
75 ## Local imports
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
76 ##
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
77 ## 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
78 #######################################################################
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
79
8801
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
80 def __checkLocalImports(self):
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
81 """
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
82 Private method to check local imports.
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
83 """
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
84 from .LocalImportVisitor import LocalImportVisitor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
85
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
86 visitor = LocalImportVisitor(self.args, self)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
87 visitor.visit(copy.deepcopy(self.tree))
8801
8fbb21be8579 Continued implementing a checker for import statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8789
diff changeset
88 for violation in visitor.violations:
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
89 self.addErrorFromNode(violation[0], violation[1])
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
90
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8801
diff changeset
91 #######################################################################
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
92 ## 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
93 ##
11135
5af56f31c53f Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
94 ## adapted from: flake8-tidy-imports v4.11.0
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
95 #######################################################################
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
96
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
97 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
98 """
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
99 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
100 """
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
101 self.__banRelativeImports = self.args.get("BanRelativeImports", "")
9275
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
102 self.__bannedModules = []
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
103 self.__bannedStructuredPatterns = []
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
104 self.__bannedUnstructuredPatterns = []
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
105 for module in self.args.get("BannedModules", []):
9275
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
106 module = module.strip()
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
107 if "*" in module[:-1] or module == "*":
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
108 # unstructured
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
109 self.__bannedUnstructuredPatterns.append(
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
110 self.__compileUnstructuredGlob(module)
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
111 )
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
112 elif module.endswith(".*"):
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
113 # structured
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
114 self.__bannedStructuredPatterns.append(module)
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
115 # Also check for exact matches without the wildcard
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
116 # e.g. "foo.*" matches "foo"
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
117 prefix = module[:-2]
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
118 if prefix not in self.__bannedModules:
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
119 self.__bannedModules.append(prefix)
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
120 else:
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
121 self.__bannedModules.append(module)
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
122
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
123 # Sort the structured patterns so we match the specifc ones first.
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
124 self.__bannedStructuredPatterns.sort(key=lambda x: len(x[0]), reverse=True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
125
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
126 ruleMethods = []
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
127 if not self._ignoreCode("I-901"):
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
128 ruleMethods.append(self.__checkUnnecessaryAlias)
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
129 if not self._ignoreCode("I-902") and 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
130 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
131 if (
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
132 not self._ignoreCode("I-903") and self.__banRelativeImports == "parents"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
133 ) or (not self._ignoreCode("I-904") and self.__banRelativeImports == "true"):
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
134 ruleMethods.append(self.__checkBannedRelativeImports)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
135
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
136 for node in ast.walk(self.tree):
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
137 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
138 method(node)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
139
9275
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
140 def __compileUnstructuredGlob(self, module):
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
141 """
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
142 Private method to convert a pattern to a regex such that ".*" matches zero or
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
143 more modules.
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
144
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
145 @param module module pattern to be converted
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
146 @type str
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
147 @return compiled regex
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
148 @rtype re.regex object
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
149 """
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
150 parts = module.split(".")
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
151 transformedParts = [
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
152 "(\\..*)?" if p == "*" else "\\." + re.escape(p) for p in parts
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
153 ]
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
154 if parts[0] == "*":
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
155 transformedParts[0] = ".*"
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
156 else:
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
157 transformedParts[0] = re.escape(parts[0])
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
158 return re.compile("".join(transformedParts) + "\\Z")
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
159
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
160 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
161 """
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
162 Private method to check unnecessary import aliases.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
163
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
164 @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
165 @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
166 """
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
167 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
168 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
169 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
170 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
171 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
172 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
173 fromName, importedName = alias.name.rsplit(".", 1)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
174
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
175 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
176 if fromName:
10184
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
177 rewritten = f"from {fromName} import {importedName}"
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
178 else:
10184
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
179 rewritten = f"import {importedName}"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
180
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
181 self.addErrorFromNode(node, "I-901", rewritten)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
182
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
183 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
184 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
185 if alias.name == alias.asname:
10184
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
186 rewritten = f"from {node.module} import {alias.name}"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
187
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
188 self.addErrorFromNode(node, "I-901", rewritten)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
189
9275
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
190 def __isModuleBanned(self, moduleName):
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
191 """
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
192 Private method to check, if the given module name banned.
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
193
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
194 @param moduleName module name to be checked
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
195 @type str
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
196 @return flag indicating a banned module
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
197 @rtype bool
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
198 """
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
199 if moduleName in self.__bannedModules:
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
200 return True
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
201
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
202 # Check unustructed wildcards
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
203 if any(
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
204 bannedPattern.match(moduleName)
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
205 for bannedPattern in self.__bannedUnstructuredPatterns
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
206 ):
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
207 return True
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
208
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
209 # Check structured wildcards
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
210 if any(
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
211 moduleName.startswith(bannedPrefix[:-1])
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
212 for bannedPrefix in self.__bannedStructuredPatterns
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
213 ):
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
214 return True
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
215
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
216 return False
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
217
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
218 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
219 """
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
220 Private method to check import of banned modules.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
221
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
222 @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
223 @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
224 """
10184
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
225 if (
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
226 not bool(self.__bannedModules)
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
227 and not bool(self.__bannedUnstructuredPatterns)
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
228 and not bool(self.__bannedStructuredPatterns)
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
229 ):
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
230 # nothing to check
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
231 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
232
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
233 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
234 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
235 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
236 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
237 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
238 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
239 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
240 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
241 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
242
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
243 # 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
244 moduleNames.sort(key=len, reverse=True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
245
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
246 warned = set()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
247
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
248 for moduleName in moduleNames:
9275
1a7d545d3ef2 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9274
diff changeset
249 if self.__isModuleBanned(moduleName):
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
250 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
251 # 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
252 # 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
253 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
254 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
255 warned.add(moduleName)
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
256 self.addErrorFromNode(node, "I-902", moduleName)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
257
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
258 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
259 """
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
260 Private method to check if relative imports are banned.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
261
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
262 @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
263 @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
264 """
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
265 if not self.__banRelativeImports:
10184
af82cb6e0298 Updated some codestyle checkers for imports and too complex annotations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
266 # nothing to check
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
267 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
268
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
269 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
270 minNodeLevel = 1
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
271 msgCode = "I-903"
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
272 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
273 minNodeLevel = 0
11147
dee6e106b4d3 Modified the code style checker such, that the issue category and issue number are separated by a '-' to make up the issue code (e.g E-901).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
274 msgCode = "I-904"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
275
10186
91c3ba0767ad Updated the 'flake8-bugbear' based checker code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10184
diff changeset
276 if isinstance(node, ast.ImportFrom) and node.level > minNodeLevel:
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11147
diff changeset
277 self.addErrorFromNode(node, msgCode)

eric ide

mercurial