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

branch
eric7
changeset 9477
903ee653bf23
parent 9473
3f23dbf37dbe
child 9478
634062017057
equal deleted inserted replaced
9476:3238ffc4b3df 9477:903ee653bf23
30 class ImportNode: 30 class ImportNode:
31 """ 31 """
32 Class representing an import or import from node. 32 Class representing an import or import from node.
33 """ 33 """
34 34
35 def __init__(self, appNames, astNode, checker): 35 def __init__(self, appNames, astNode, checker, sortIgnoringStyle, sortFromFirst):
36 """ 36 """
37 Constructor 37 Constructor
38 38
39 @param appNames list of application package names 39 @param appNames list of application package names
40 @type list of str 40 @type list of str
41 @param astNode reference to the ast node 41 @param astNode reference to the ast node
42 @type ast.AST 42 @type ast.AST
43 @param checker reference to the checker object 43 @param checker reference to the checker object
44 @type ImportsChecker 44 @type ImportsChecker
45 @param sortIgnoringStyle flag indicating to sort ignoring the import style
46 @type bool
47 @param sortFromFirst flag indicating to sort from imports before straight ones
48 @type bool
45 @exception ImportNodeError raised to indicate an invalid node was 49 @exception ImportNodeError raised to indicate an invalid node was
46 given to this class 50 given to this class
47 """ 51 """
48 if not isinstance(astNode, (ast.Import, ast.ImportFrom)): 52 if not isinstance(astNode, (ast.Import, ast.ImportFrom)):
49 raise ImportNodeError("Node type {0} not recognized".format(type(astNode))) 53 raise ImportNodeError("Node type {0} not recognized".format(type(astNode)))
56 if isinstance(astNode, ast.Import): 60 if isinstance(astNode, ast.Import):
57 self.nodeType = NodeTypeEnum.IMPORT 61 self.nodeType = NodeTypeEnum.IMPORT
58 names = astNode.names 62 names = astNode.names
59 63
60 self.moduleName = names[0].name 64 self.moduleName = names[0].name
65 self.asImport = bool(names[0].asname)
61 level = 0 66 level = 0
62 67
63 elif isinstance(astNode, ast.ImportFrom): 68 elif isinstance(astNode, ast.ImportFrom):
64 module = astNode.module 69 module = astNode.module
65 self.moduleName = "" if module is None else module 70 self.moduleName = "" if module is None else module
68 names = [n.name for n in astNode.names] 73 names = [n.name for n in astNode.names]
69 expectedNames = checker.sorted(names, key=checker.moduleKey) 74 expectedNames = checker.sorted(names, key=checker.moduleKey)
70 if names != expectedNames: 75 if names != expectedNames:
71 self.error = (self.node, "I202", ", ".join(expectedNames)) 76 self.error = (self.node, "I202", ", ".join(expectedNames))
72 level = astNode.level 77 level = astNode.level
78
79 self.asImport = any(n.asname for n in astNode.names)
73 80
74 if self.moduleName == "__future__": 81 if self.moduleName == "__future__":
75 group = GroupEnum.FUTURE 82 group = GroupEnum.FUTURE
76 elif self.moduleName.split(".")[0] in checker.getStandardModules(): 83 elif self.moduleName.split(".")[0] in checker.getStandardModules():
77 group = GroupEnum.STDLIB 84 group = GroupEnum.STDLIB
85 ): 92 ):
86 group = GroupEnum.APPLICATION 93 group = GroupEnum.APPLICATION
87 break 94 break
88 95
89 if group == GroupEnum.STDLIB: 96 if group == GroupEnum.STDLIB:
90 self.sorter = group, self.nodeType, self.moduleName 97 self.sorter = (
98 (group, -self.nodeType, self.moduleName)
99 if sortFromFirst
100 else (group, self.nodeType, self.moduleName)
101 )
91 else: 102 else:
92 m = self.moduleName 103 m = self.moduleName
93 dotIndex = m.find(".") 104 dotIndex = m.find(".")
94 topName = m if dotIndex == -1 else m[:dotIndex] 105 topName = m if dotIndex == -1 else m[:dotIndex]
95 self.sorter = group, level, topName, self.nodeType, m 106
107 if sortIgnoringStyle:
108 self.sorter = group, level, topName, self.nodeType, m
109 elif sortFromFirst:
110 self.sorter = group, level, -self.nodeType, topName, m
111 else:
112 self.sorter = group, level, self.nodeType, topName, m
96 113
97 def __eq__(self, other): 114 def __eq__(self, other):
98 """ 115 """
99 Special method implementing the equality operator. 116 Special method implementing the equality operator.
100 117

eric ide

mercurial