src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/SysVersionVisitor.py

Sat, 26 Apr 2025 12:34:32 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 26 Apr 2025 12:34:32 +0200
branch
eric7
changeset 11240
c48c615c04a3
parent 11150
73d80859079c
permissions
-rw-r--r--

MicroPython
- Added a configuration option to disable the support for the no longer produced Pimoroni Pico Wireless Pack.

11150
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a node visitor to check the use of sys.version and sys.version_info.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import ast
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import AstUtilities
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 class SysVersionVisitor(ast.NodeVisitor):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 Class implementing a node visitor to check the use of sys.version and
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 sys.version_info.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 Note: This class is modeled after flake8-2020 v1.8.1.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 def __init__(self):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Constructor
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 super().__init__()
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 self.violations = []
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 self.__fromImports = {}
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 def visit_ImportFrom(self, node):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 Public method to handle a from ... import ... statement.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @param node reference to the node to be processed
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @type ast.ImportFrom
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 for alias in node.names:
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 if node.module is not None and not alias.asname:
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__fromImports[alias.name] = node.module
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.generic_visit(node)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 def __isSys(self, attr, node):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 Private method to check for a reference to sys attribute.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @param attr attribute name
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @type str
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @param node reference to the node to be checked
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @type ast.Node
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @return flag indicating a match
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @rtype bool
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 match = False
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 if (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 isinstance(node, ast.Attribute)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 and isinstance(node.value, ast.Name)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 and node.value.id == "sys"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 and node.attr == attr
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 ) or (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 isinstance(node, ast.Name)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 and node.id == attr
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 and self.__fromImports.get(node.id) == "sys"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 match = True
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 return match
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 def __isSysVersionUpperSlice(self, node, n):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 Private method to check the upper slice of sys.version.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 @param node reference to the node to be checked
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 @type ast.Node
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 @param n slice value to check against
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 @type int
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @return flag indicating a match
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 @rtype bool
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 return (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__isSys("version", node.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 and isinstance(node.slice, ast.Slice)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 and node.slice.lower is None
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 and AstUtilities.isNumber(node.slice.upper)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 and AstUtilities.getValue(node.slice.upper) == n
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 and node.slice.step is None
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 )
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 def visit_Subscript(self, node):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 Public method to handle a subscript.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 @param node reference to the node to be processed
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 @type ast.Subscript
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 if self.__isSysVersionUpperSlice(node, 1):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 self.violations.append((node.value, "M-423"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 elif self.__isSysVersionUpperSlice(node, 3):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.violations.append((node.value, "M-401"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 elif (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 self.__isSys("version", node.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 and isinstance(node.slice, ast.Index)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 and AstUtilities.isNumber(node.slice.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 and AstUtilities.getValue(node.slice.value) == 2
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.violations.append((node.value, "M-402"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 elif (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.__isSys("version", node.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 and isinstance(node.slice, ast.Index)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 and AstUtilities.isNumber(node.slice.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 and AstUtilities.getValue(node.slice.value) == 0
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self.violations.append((node.value, "M-421"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.generic_visit(node)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 def visit_Compare(self, node):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 Public method to handle a comparison.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 @param node reference to the node to be processed
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @type ast.Compare
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 if (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 isinstance(node.left, ast.Subscript)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 and self.__isSys("version_info", node.left.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 and isinstance(node.left.slice, ast.Index)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 and AstUtilities.isNumber(node.left.slice.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 and AstUtilities.getValue(node.left.slice.value) == 0
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 and len(node.ops) == 1
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 and isinstance(node.ops[0], ast.Eq)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 and AstUtilities.isNumber(node.comparators[0])
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 and AstUtilities.getValue(node.comparators[0]) == 3
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.violations.append((node.left, "M-411"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 elif (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 self.__isSys("version", node.left)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 and len(node.ops) == 1
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 and AstUtilities.isString(node.comparators[0])
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 if len(AstUtilities.getValue(node.comparators[0])) == 1:
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 errorCode = "M-422"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 else:
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 errorCode = "M-403"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 self.violations.append((node.left, errorCode))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 elif (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 isinstance(node.left, ast.Subscript)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 and self.__isSys("version_info", node.left.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 and isinstance(node.left.slice, ast.Index)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 and AstUtilities.isNumber(node.left.slice.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 and AstUtilities.getValue(node.left.slice.value) == 1
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 and len(node.ops) == 1
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 and AstUtilities.isNumber(node.comparators[0])
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.violations.append((node, "M-413"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 elif (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 isinstance(node.left, ast.Attribute)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 and self.__isSys("version_info", node.left.value)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 and node.left.attr == "minor"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 and len(node.ops) == 1
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 and AstUtilities.isNumber(node.comparators[0])
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.violations.append((node, "M-414"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 self.generic_visit(node)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 def visit_Attribute(self, node):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 Public method to handle an attribute.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 @param node reference to the node to be processed
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 @type ast.Attribute
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 if (
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 isinstance(node.value, ast.Name)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 and node.value.id == "six"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 and node.attr == "PY3"
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 ):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 self.violations.append((node, "M-412"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 self.generic_visit(node)
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 def visit_Name(self, node):
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 Public method to handle an name.
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @param node reference to the node to be processed
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 @type ast.Name
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 """
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 if node.id == "PY3" and self.__fromImports.get(node.id) == "six":
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 self.violations.append((node, "M-412"))
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
73d80859079c Code Style Checkers
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 self.generic_visit(node)

eric ide

mercurial