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

Sat, 31 Dec 2022 16:23:21 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Dec 2022 16:23:21 +0100
branch
eric7
changeset 9653
e67609152c5e
parent 9480
107aca8932ac
permissions
-rw-r--r--

Updated copyright for 2023.

8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9653
e67609152c5e Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9480
diff changeset
3 # Copyright (c) 2021 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a class representing an import or import from node.
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 #
9458
3b41bb7d1623 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9278
diff changeset
11 # adapted from flake8-alphabetize v0.0.18
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 #
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 import ast
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9458
diff changeset
15
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from functools import total_ordering
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from .ImportsEnums import GroupEnum, NodeTypeEnum
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
9272
06ed98a19b79 Changed some exception names to comply with PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
21 class ImportNodeError(Exception):
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class representing an exception for an invalid import node.
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
25
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 pass
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @total_ordering
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 class ImportNode:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 Class representing an import or import from node.
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
34
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
35 def __init__(self, appNames, astNode, checker, sortIgnoringStyle, sortFromFirst):
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @param appNames list of application package names
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @type list of str
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param astNode reference to the ast node
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @type ast.AST
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @param checker reference to the checker object
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type ImportsChecker
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
45 @param sortIgnoringStyle flag indicating to sort ignoring the import style
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
46 @type bool
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
47 @param sortFromFirst flag indicating to sort from imports before straight ones
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
48 @type bool
9272
06ed98a19b79 Changed some exception names to comply with PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
49 @exception ImportNodeError raised to indicate an invalid node was
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 given to this class
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
8808
033fa34447d0 Finished implementing a checker for import statements (unnecessary alias, banned relative and banned modules).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8802
diff changeset
52 if not isinstance(astNode, (ast.Import, ast.ImportFrom)):
9278
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9272
diff changeset
53 raise ImportNodeError("Node type {0} not recognized".format(type(astNode)))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
54
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.node = astNode
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.error = None
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 level = None
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 group = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
59
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 if isinstance(astNode, ast.Import):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.nodeType = NodeTypeEnum.IMPORT
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 names = astNode.names
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.moduleName = names[0].name
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
65 self.asImport = bool(names[0].asname)
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 level = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
67
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 elif isinstance(astNode, ast.ImportFrom):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 module = astNode.module
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.moduleName = "" if module is None else module
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.nodeType = NodeTypeEnum.IMPORT_FROM
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 names = [n.name for n in astNode.names]
9479
b4dff37325de Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9478
diff changeset
74 expectedNames = checker.sorted(
b4dff37325de Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9478
diff changeset
75 names,
b4dff37325de Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9478
diff changeset
76 key=lambda k: checker.moduleKey(k, subImports=True),
b4dff37325de Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9478
diff changeset
77 )
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 if names != expectedNames:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.error = (self.node, "I202", ", ".join(expectedNames))
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 level = astNode.level
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
81
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
82 self.asImport = any(n.asname for n in astNode.names)
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
83
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 if self.moduleName == "__future__":
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 group = GroupEnum.FUTURE
9458
3b41bb7d1623 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9278
diff changeset
86 elif self.moduleName.split(".")[0] in checker.getStandardModules():
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 group = GroupEnum.STDLIB
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 elif level > 0:
9480
107aca8932ac Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9479
diff changeset
89 group = GroupEnum.LOCALPATH
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 else:
9480
107aca8932ac Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9479
diff changeset
91 group = GroupEnum.THIRDPARTY
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 for name in appNames:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
93 if name == self.moduleName or self.moduleName.startswith(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
94 "{0}.".format(name)
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 ):
9480
107aca8932ac Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9479
diff changeset
96 group = GroupEnum.FIRSTPARTY
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 if group == GroupEnum.STDLIB:
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
100 self.sorter = (
9479
b4dff37325de Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9478
diff changeset
101 (group, -self.nodeType, checker.moduleKey(self.moduleName))
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
102 if sortFromFirst
9479
b4dff37325de Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9478
diff changeset
103 else (group, self.nodeType, checker.moduleKey(self.moduleName))
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
104 )
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 else:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 m = self.moduleName
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 dotIndex = m.find(".")
9480
107aca8932ac Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9479
diff changeset
108 topName = "." * level + (m if dotIndex == -1 else m[:dotIndex])
107aca8932ac Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9479
diff changeset
109 level = -level
9478
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
110
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
111 if sortIgnoringStyle:
9478
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
112 self.sorter = (
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
113 group,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
114 level,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
115 checker.moduleKey(topName),
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
116 self.nodeType,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
117 m,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
118 )
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
119 elif sortFromFirst:
9478
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
120 self.sorter = (
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
121 group,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
122 level,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
123 -self.nodeType,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
124 checker.moduleKey(topName),
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
125 m,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
126 )
9477
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
127 else:
9478
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
128 self.sorter = (
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
129 group,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
130 level,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
131 self.nodeType,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
132 checker.moduleKey(topName),
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
133 m,
634062017057 Corrected the module sort order in the imports style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9477
diff changeset
134 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
135
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 def __eq__(self, other):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 Special method implementing the equality operator.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
139
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 @param other reference to the object to compare
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 @type ImportNode
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 @return flag indicating equality
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 @rtype bool
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 return self.sorter == other.sorter
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
146
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 def __lt__(self, other):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 Special method implementing the less than operator.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 @param other reference to the object to compare
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 @type ImportNode
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 @return flag indicating a less than situation
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 @rtype bool
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 return self.sorter < other.sorter
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
157
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 def __str__(self):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 Special method to create a string representation of the instance.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
161
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 @return string representation of the instance
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 @rtype str
9272
06ed98a19b79 Changed some exception names to comply with PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
164 @exception ImportNodeError raised to indicate an invalid node was
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 given to this class
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
167 if self.nodeType not in (NodeTypeEnum.IMPORT, NodeTypeEnum.IMPORT_FROM):
9272
06ed98a19b79 Changed some exception names to comply with PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
168 raise ImportNodeError(
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 "The node type {0} is not recognized.".format(self.nodeType)
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
171
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 if self.nodeType == NodeTypeEnum.IMPORT:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 return "import {0}".format(self.moduleName)
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 elif self.nodeType == NodeTypeEnum.IMPORT_FROM:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 level = self.node.level
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 levelStr = "" if level == 0 else "." * level
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 names = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
178 n.name + ("" if n.asname is None else " as {0}".format(n.asname))
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 for n in self.node.names
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 ]
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 return "from {0}{1} import {2}".format(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
182 levelStr, self.moduleName, ", ".join(names)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
183 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
184
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 return None

eric ide

mercurial