Corrected the module sort order in the imports style checker. eric7

Sat, 05 Nov 2022 19:19:05 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 05 Nov 2022 19:19:05 +0100
branch
eric7
changeset 9479
b4dff37325de
parent 9478
634062017057
child 9480
107aca8932ac

Corrected the module sort order in the imports style checker.

src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportNode.py file | annotate | diff | comparison | revisions
src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportsChecker.py file | annotate | diff | comparison | revisions
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportNode.py	Sat Nov 05 17:13:35 2022 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportNode.py	Sat Nov 05 19:19:05 2022 +0100
@@ -71,7 +71,10 @@
             self.nodeType = NodeTypeEnum.IMPORT_FROM
 
             names = [n.name for n in astNode.names]
-            expectedNames = checker.sorted(names, key=checker.moduleKey)
+            expectedNames = checker.sorted(
+                names,
+                key=lambda k: checker.moduleKey(k, subImports=True),
+            )
             if names != expectedNames:
                 self.error = (self.node, "I202", ", ".join(expectedNames))
             level = astNode.level
@@ -95,14 +98,14 @@
 
         if group == GroupEnum.STDLIB:
             self.sorter = (
-                (group, -self.nodeType, self.moduleName)
+                (group, -self.nodeType, checker.moduleKey(self.moduleName))
                 if sortFromFirst
-                else (group, self.nodeType, self.moduleName)
+                else (group, self.nodeType, checker.moduleKey(self.moduleName))
             )
         else:
             m = self.moduleName
             dotIndex = m.find(".")
-            topName = m if dotIndex == -1 else m[:dotIndex]
+            topName = "." * level + m if dotIndex == -1 else m[:dotIndex]
 
             if sortIgnoringStyle:
                 self.sorter = (
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportsChecker.py	Sat Nov 05 17:13:35 2022 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportsChecker.py	Sat Nov 05 19:19:05 2022 +0100
@@ -446,9 +446,8 @@
                         errors.append(n.error)
 
                     if n == p:
-                        if (
-                            self.__args.get("CombinedAsImports", False)
-                            or (not n.asImport and not p.asImport)
+                        if self.__args.get("CombinedAsImports", False) or (
+                            not n.asImport and not p.asImport
                         ):
                             errors.append((n.node, "I203", str(p), str(n)))
                     elif n < p:
@@ -513,7 +512,10 @@
                     # Can't handle anything that isn't a string literal
                     return None
 
-            expectedList = self.sorted(actualList, key=self.moduleKey)
+            expectedList = self.sorted(
+                actualList,
+                key=lambda k: self.moduleKey(k, subImports=True),
+            )
             if expectedList != actualList:
                 return (node, "I204", ", ".join(expectedList))
 
@@ -582,23 +584,27 @@
         """
         return [self.__atoi(c) for c in re.split(r"(\d+)", text)]
 
-    def moduleKey(self, moduleName):
+    def moduleKey(self, moduleName, subImports=False):
         """
         Public method to generate a key for the given module name.
 
         @param moduleName module name
         @type str
+        @param subImports flag indicating a sub import like in
+            'from foo import bar, baz' (defaults to False)
+        @type bool (optional)
         @return generated key
         @rtype str
         """
         prefix = ""
 
-        if moduleName.isupper() and len(moduleName) > 1:
-            prefix = "A"
-        elif moduleName[0:1].isupper():
-            prefix = "B"
-        else:
-            prefix = "C"
+        if subImports:
+            if moduleName.isupper() and len(moduleName) > 1:
+                prefix = "A"
+            elif moduleName[0:1].isupper():
+                prefix = "B"
+            else:
+                prefix = "C"
         if not self.__sortCaseSensitive:
             moduleName = moduleName.lower()
 

eric ide

mercurial