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

Sat, 05 Nov 2022 13:03:31 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 05 Nov 2022 13:03:31 +0100
branch
eric7
changeset 9477
903ee653bf23
parent 9473
3f23dbf37dbe
child 9478
634062017057
permissions
-rw-r--r--

Changed the imports style checker to be in sync with some isort options.

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
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8808
diff changeset
3 # Copyright (c) 2021 - 2022 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]
9458
3b41bb7d1623 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9278
diff changeset
74 expectedNames = checker.sorted(names, key=checker.moduleKey)
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 if names != expectedNames:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 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
77 level = astNode.level
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78
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
79 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
80
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 if self.moduleName == "__future__":
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 group = GroupEnum.FUTURE
9458
3b41bb7d1623 Code Style Checker
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9278
diff changeset
83 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
84 group = GroupEnum.STDLIB
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 elif level > 0:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 group = GroupEnum.APPLICATION
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 else:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 group = GroupEnum.THIRD_PARTY
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 for name in appNames:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
90 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
91 "{0}.".format(name)
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 ):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 group = GroupEnum.APPLICATION
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 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
97 self.sorter = (
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
98 (group, -self.nodeType, self.moduleName)
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
99 if sortFromFirst
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 else (group, self.nodeType, self.moduleName)
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
101 )
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 else:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 m = self.moduleName
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 dotIndex = m.find(".")
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 topName = m if dotIndex == -1 else m[:dotIndex]
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
106
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
107 if sortIgnoringStyle:
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
108 self.sorter = group, level, topName, self.nodeType, m
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
109 elif sortFromFirst:
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
110 self.sorter = group, level, -self.nodeType, topName, m
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 else:
903ee653bf23 Changed the imports style checker to be in sync with some isort options.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
112 self.sorter = group, level, self.nodeType, topName, m
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
113
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 def __eq__(self, other):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 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
117
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @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
119 @type ImportNode
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 @return flag indicating equality
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @rtype bool
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 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
124
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 def __lt__(self, other):
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 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
128
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 @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
130 @type ImportNode
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 @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
132 @rtype bool
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 """
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 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
135
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 def __str__(self):
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 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
139
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 @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
141 @rtype str
9272
06ed98a19b79 Changed some exception names to comply with PEP-8.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
142 @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
143 given to this class
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
145 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
146 raise ImportNodeError(
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 "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
148 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
149
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 if self.nodeType == NodeTypeEnum.IMPORT:
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 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
152 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
153 level = self.node.level
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 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
155 names = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
156 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
157 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
158 ]
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 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
160 levelStr, self.moduleName, ", ".join(names)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
161 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
162
8802
129a973fc33e Continued implementing a checker for import statements (import order).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 return None

eric ide

mercurial