--- 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()