src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/NameOrder/NameOrderChecker.py

Sat, 26 Apr 2025 12:34:32 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 26 Apr 2025 12:34:32 +0200
branch
eric7
changeset 11240
c48c615c04a3
parent 11150
73d80859079c
permissions
-rw-r--r--

MicroPython
- Added a configuration option to disable the support for the no longer produced Pimoroni Pico Wireless Pack.

10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
35b27af462ef Code Style Checker
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>
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a checker for import statements.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import ast
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import re
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
13 from CodeStyleTopicChecker import CodeStyleTopicChecker
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
15
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
16 class NameOrderChecker(CodeStyleTopicChecker):
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 Class implementing a checker for name ordering.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 Note: Name ordering is checked for import statements, the '__all__' statement
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 and exception names of exception handlers.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Codes = [
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 ## Imports order
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
26 "NO-101",
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
27 "NO-102",
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
28 "NO-103",
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
29 "NO-104",
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
30 "NO-105",
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 ]
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
32 Category = "NO"
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 Constructor
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param source source code to be checked
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @type list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param filename name of the source file
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @param tree AST tree of the source code
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @type ast.Module
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @param select list of selected codes
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @param ignore list of codes to be ignored
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @type list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @param expected list of expected codes
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @type list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @param repeat flag indicating to report each occurrence of a code
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @type bool
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @param args dictionary of arguments for the various checks
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @type dict
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
55 super().__init__(
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
56 NameOrderChecker.Category,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
57 source,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
58 filename,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
59 tree,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
60 select,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
61 ignore,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
62 expected,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
63 repeat,
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
64 args,
11142
2f0fb22c1d63 Fixed a few issues in the code style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
65 )
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 # parameters for import sorting
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 if args["SortOrder"] == "native":
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__sortingFunction = sorted
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 else:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 # naturally is the default sort order
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.__sortingFunction = self.__naturally
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__sortCaseSensitive = args["SortCaseSensitive"]
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 checkersWithCodes = [
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
76 (self.__checkNameOrder, ("NO-101", "NO-102", "NO-103", "NO-104", "NO-105")),
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 ]
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
78 self._initializeCheckers(checkersWithCodes)
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 #######################################################################
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 ## Name Order
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 ##
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 ## adapted from: flake8-alphabetize v0.0.21
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 #######################################################################
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 def __checkNameOrder(self):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 """
10052
041d0785dd42 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10046
diff changeset
88 Private method to check the order of import statements and handled exceptions.
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 from .ImportNode import ImportNode
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 errors = []
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 imports = []
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
94 importNodes, aListNode, eListNodes = self.__findNodes(self.tree)
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 # check for an error in '__all__'
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 allError = self.__findErrorInAll(aListNode)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 if allError is not None:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 errors.append(allError)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 errors.extend(self.__findExceptionListErrors(eListNodes))
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 for importNode in importNodes:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 if isinstance(importNode, ast.Import) and len(importNode.names) > 1:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 # skip suck imports because its already handled by pycodestyle
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 continue
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 imports.append(
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 ImportNode(
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
110 self.args.get("ApplicationPackageNames", []),
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 importNode,
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self,
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
113 self.args.get("SortIgnoringStyle", False),
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
114 self.args.get("SortFromFirst", False),
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 )
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 )
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 lenImports = len(imports)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 if lenImports > 0:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 p = imports[0]
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 if p.error is not None:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 errors.append(p.error)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 if lenImports > 1:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 for n in imports[1:]:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 if n.error is not None:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 errors.append(n.error)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 if n == p:
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
130 if self.args.get("CombinedAsImports", False) or (
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 not n.asImport and not p.asImport
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 ):
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
133 errors.append((n.node, "NO-103", str(p), str(n)))
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 elif n < p:
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
135 errors.append((n.node, "NO-101", str(n), str(p)))
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 p = n
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 for error in errors:
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
140 self.addErrorFromNode(error[0], error[1], *error[2:])
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 def __findExceptionListNodes(self, tree):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 Private method to find all exception types handled by given tree.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 @param tree reference to the ast node tree to be parsed
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 @type ast.AST
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 @return list of exception types
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @rtype list of ast.Name
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 nodes = []
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 for node in ast.walk(tree):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 if isinstance(node, ast.ExceptHandler):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 nodeType = node.type
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 if isinstance(nodeType, (ast.List, ast.Tuple)):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 nodes.append(nodeType)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 return nodes
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 def __findNodes(self, tree):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 Private method to find all import and import from nodes of the given
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 tree.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 @param tree reference to the ast node tree to be parsed
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 @type ast.AST
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 @return tuple containing a list of import nodes, the '__all__' node and
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 exception nodes
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 @rtype tuple of (ast.Import | ast.ImportFrom, ast.List | ast.Tuple,
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 ast.List | ast.Tuple)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 importNodes = []
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 aListNode = None
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 eListNodes = self.__findExceptionListNodes(tree)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 if isinstance(tree, ast.Module):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 body = tree.body
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 for n in body:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 if isinstance(n, (ast.Import, ast.ImportFrom)):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 importNodes.append(n)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 elif isinstance(n, ast.Assign):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 for t in n.targets:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 if isinstance(t, ast.Name) and t.id == "__all__":
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 value = n.value
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 if isinstance(value, (ast.List, ast.Tuple)):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 aListNode = value
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 return importNodes, aListNode, eListNodes
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 def __findErrorInAll(self, node):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 Private method to check the '__all__' node for errors.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 @param node reference to the '__all__' node
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 @type ast.List or ast.Tuple
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
200 @return tuple containing a reference to the node, an error code and the error
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 arguments
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 @rtype tuple of (ast.List | ast.Tuple, str, str)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 if node is not None:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 actualList = []
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 for el in node.elts:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 if isinstance(el, ast.Constant):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 actualList.append(el.value)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 else:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 # Can't handle anything that isn't a string literal
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 return None
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 expectedList = self.sorted(
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 actualList,
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 key=lambda k: self.moduleKey(k, subImports=True),
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 )
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 if expectedList != actualList:
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
218 return (node, "NO-104", ", ".join(expectedList))
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 return None
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 def __findExceptionListStr(self, node):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 Private method to get the exception name out of an exception handler type node.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 @param node node to be treated
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 @type ast.Name or ast.Attribute
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 @return string containing the exception name
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 @rtype str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 if isinstance(node, ast.Name):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 return node.id
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 elif isinstance(node, ast.Attribute):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 return f"{self.__findExceptionListStr(node.value)}.{node.attr}"
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 return ""
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 def __findExceptionListErrors(self, nodes):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 Private method to check the exception node for errors.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 @param nodes list of exception nodes
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 @type list of ast.List or ast.Tuple
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 @return DESCRIPTION
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 @rtype TYPE
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 errors = []
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 for node in nodes:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 actualList = [self.__findExceptionListStr(elt) for elt in node.elts]
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 expectedList = self.sorted(actualList)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 if expectedList != actualList:
11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11145
diff changeset
254 errors.append((node, "NO-105", ", ".join(expectedList)))
10046
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 return errors
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 def sorted(self, toSort, key=None, reverse=False):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 Public method to sort the given list of names.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 @param toSort list of names to be sorted
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 @type list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 @param key function to generate keys (defaults to None)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 @type function (optional)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 @param reverse flag indicating a reverse sort (defaults to False)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 @type bool (optional)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 @return sorted list of names
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 @rtype list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 return self.__sortingFunction(toSort, key=key, reverse=reverse)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 def __naturally(self, toSort, key=None, reverse=False):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 Private method to sort the given list of names naturally.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 Note: Natural sorting maintains the sort order of numbers (i.e.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 [Q1, Q10, Q2] is sorted as [Q1, Q2, Q10] while the Python
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 standard sort would yield [Q1, Q10, Q2].
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 @param toSort list of names to be sorted
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 @type list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 @param key function to generate keys (defaults to None)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 @type function (optional)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 @param reverse flag indicating a reverse sort (defaults to False)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 @type bool (optional)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 @return sorted list of names
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 @rtype list of str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 if key is None:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 keyCallback = self.__naturalKeys
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 else:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 def keyCallback(text):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 return self.__naturalKeys(key(text))
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 return sorted(toSort, key=keyCallback, reverse=reverse)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 def __atoi(self, text):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 Private method to convert the given text to an integer number.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 @param text text to be converted
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 @type str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 @return integer number
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 @rtype int
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 return int(text) if text.isdigit() else text
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 def __naturalKeys(self, text):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 Private method to generate keys for natural sorting.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 @param text text to generate a key for
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 @type str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 @return key for natural sorting
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 @rtype list of str or int
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 return [self.__atoi(c) for c in re.split(r"(\d+)", text)]
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 def moduleKey(self, moduleName, subImports=False):
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 Public method to generate a key for the given module name.
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 @param moduleName module name
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 @type str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 @param subImports flag indicating a sub import like in
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 'from foo import bar, baz' (defaults to False)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 @type bool (optional)
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 @return generated key
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 @rtype str
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 """
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 prefix = ""
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 if subImports:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 if moduleName.isupper() and len(moduleName) > 1:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 prefix = "A"
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 elif moduleName[0:1].isupper():
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 prefix = "B"
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 else:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 prefix = "C"
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 if not self.__sortCaseSensitive:
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 moduleName = moduleName.lower()
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
35b27af462ef Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 return f"{prefix}{moduleName}"

eric ide

mercurial