--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportNode.py Sat Nov 05 13:02:04 2022 +0100 +++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportNode.py Sat Nov 05 13:03:31 2022 +0100 @@ -32,7 +32,7 @@ Class representing an import or import from node. """ - def __init__(self, appNames, astNode, checker): + def __init__(self, appNames, astNode, checker, sortIgnoringStyle, sortFromFirst): """ Constructor @@ -42,6 +42,10 @@ @type ast.AST @param checker reference to the checker object @type ImportsChecker + @param sortIgnoringStyle flag indicating to sort ignoring the import style + @type bool + @param sortFromFirst flag indicating to sort from imports before straight ones + @type bool @exception ImportNodeError raised to indicate an invalid node was given to this class """ @@ -58,6 +62,7 @@ names = astNode.names self.moduleName = names[0].name + self.asImport = bool(names[0].asname) level = 0 elif isinstance(astNode, ast.ImportFrom): @@ -71,6 +76,8 @@ self.error = (self.node, "I202", ", ".join(expectedNames)) level = astNode.level + self.asImport = any(n.asname for n in astNode.names) + if self.moduleName == "__future__": group = GroupEnum.FUTURE elif self.moduleName.split(".")[0] in checker.getStandardModules(): @@ -87,12 +94,22 @@ break if group == GroupEnum.STDLIB: - self.sorter = group, self.nodeType, self.moduleName + self.sorter = ( + (group, -self.nodeType, self.moduleName) + if sortFromFirst + else (group, self.nodeType, self.moduleName) + ) else: m = self.moduleName dotIndex = m.find(".") topName = m if dotIndex == -1 else m[:dotIndex] - self.sorter = group, level, topName, self.nodeType, m + + if sortIgnoringStyle: + self.sorter = group, level, topName, self.nodeType, m + elif sortFromFirst: + self.sorter = group, level, -self.nodeType, topName, m + else: + self.sorter = group, level, self.nodeType, topName, m def __eq__(self, other): """