Code Style Checker

Tue, 06 Apr 2021 17:53:39 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 06 Apr 2021 17:53:39 +0200
changeset 8202
df194f43119c
parent 8201
a1149b1b4456
child 8203
dbcdb07cb600

Code Style Checker
- added a simplify check to detect assignments that could be converted to augmented assignments

eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyChecker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py file | annotate | diff | comparison | revisions
--- a/eric6/APIs/Python3/eric6.api	Mon Apr 05 10:55:02 2021 +0200
+++ b/eric6/APIs/Python3/eric6.api	Tue Apr 06 17:53:39 2021 +0200
@@ -3494,6 +3494,7 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.AST_CONST_TYPES?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.BOOL_CONST_TYPES?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.STR_TYPES?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_Assign?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_BoolOp?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_Call?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_ClassDef?4(node)
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Mon Apr 05 10:55:02 2021 +0200
+++ b/eric6/Documentation/Help/source.qhp	Tue Apr 06 17:53:39 2021 +0200
@@ -13378,6 +13378,7 @@
       <keyword name="SimplifyNodeVisitor.__check118" id="SimplifyNodeVisitor.__check118" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check118" />
       <keyword name="SimplifyNodeVisitor.__check119" id="SimplifyNodeVisitor.__check119" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check119" />
       <keyword name="SimplifyNodeVisitor.__check120" id="SimplifyNodeVisitor.__check120" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check120" />
+      <keyword name="SimplifyNodeVisitor.__check121" id="SimplifyNodeVisitor.__check121" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check121" />
       <keyword name="SimplifyNodeVisitor.__check201" id="SimplifyNodeVisitor.__check201" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check201" />
       <keyword name="SimplifyNodeVisitor.__check202" id="SimplifyNodeVisitor.__check202" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check202" />
       <keyword name="SimplifyNodeVisitor.__check203" id="SimplifyNodeVisitor.__check203" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check203" />
@@ -13402,6 +13403,7 @@
       <keyword name="SimplifyNodeVisitor.__isSameExpression" id="SimplifyNodeVisitor.__isSameExpression" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__isSameExpression" />
       <keyword name="SimplifyNodeVisitor.__isStatementEqual" id="SimplifyNodeVisitor.__isStatementEqual" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__isStatementEqual" />
       <keyword name="SimplifyNodeVisitor.__negateTest" id="SimplifyNodeVisitor.__negateTest" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__negateTest" />
+      <keyword name="SimplifyNodeVisitor.visit_Assign" id="SimplifyNodeVisitor.visit_Assign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_Assign" />
       <keyword name="SimplifyNodeVisitor.visit_BoolOp" id="SimplifyNodeVisitor.visit_BoolOp" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_BoolOp" />
       <keyword name="SimplifyNodeVisitor.visit_Call" id="SimplifyNodeVisitor.visit_Call" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_Call" />
       <keyword name="SimplifyNodeVisitor.visit_ClassDef" id="SimplifyNodeVisitor.visit_ClassDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_ClassDef" />
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html	Mon Apr 05 10:55:02 2021 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html	Tue Apr 06 17:53:39 2021 +0200
@@ -150,6 +150,10 @@
 <td>Private method to check for classes that inherit from object.</td>
 </tr>
 <tr>
+<td><a href="#SimplifyNodeVisitor.__check121">__check121</a></td>
+<td>Private method to check for assignments that could be converted into an augmented assignment</td>
+</tr>
+<tr>
 <td><a href="#SimplifyNodeVisitor.__check201">__check201</a></td>
 <td>Private method to check for calls where an unary 'not' is used for an unequality.</td>
 </tr>
@@ -246,6 +250,10 @@
 <td>Private method negate the given Compare node.</td>
 </tr>
 <tr>
+<td><a href="#SimplifyNodeVisitor.visit_Assign">visit_Assign</a></td>
+<td>Public method to process an Assign node.</td>
+</tr>
+<tr>
 <td><a href="#SimplifyNodeVisitor.visit_BoolOp">visit_BoolOp</a></td>
 <td>Public method to process a BoolOp node.</td>
 </tr>
@@ -591,6 +599,21 @@
 reference to the AST node to be checked
 </dd>
 </dl>
+<a NAME="SimplifyNodeVisitor.__check121" ID="SimplifyNodeVisitor.__check121"></a>
+<h4>SimplifyNodeVisitor.__check121</h4>
+<b>__check121</b>(<i>node</i>)
+
+<p>
+        Private method to check for assignments that could be converted into
+        an augmented assignment
+</p>
+<dl>
+
+<dt><i>node</i> (ast.Assign)</dt>
+<dd>
+reference to the AST node to be checked
+</dd>
+</dl>
 <a NAME="SimplifyNodeVisitor.__check201" ID="SimplifyNodeVisitor.__check201"></a>
 <h4>SimplifyNodeVisitor.__check201</h4>
 <b>__check201</b>(<i>node</i>)
@@ -1041,6 +1064,20 @@
 ast.Compare
 </dd>
 </dl>
+<a NAME="SimplifyNodeVisitor.visit_Assign" ID="SimplifyNodeVisitor.visit_Assign"></a>
+<h4>SimplifyNodeVisitor.visit_Assign</h4>
+<b>visit_Assign</b>(<i>node</i>)
+
+<p>
+        Public method to process an Assign node.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.Assign)</dt>
+<dd>
+reference to the Assign node
+</dd>
+</dl>
 <a NAME="SimplifyNodeVisitor.visit_BoolOp" ID="SimplifyNodeVisitor.visit_BoolOp"></a>
 <h4>SimplifyNodeVisitor.visit_BoolOp</h4>
 <b>visit_BoolOp</b>(<i>node</i>)
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyChecker.py	Mon Apr 05 10:55:02 2021 +0200
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyChecker.py	Tue Apr 06 17:53:39 2021 +0200
@@ -21,7 +21,7 @@
         # Python-specifics
         "Y101", "Y102", "Y103", "Y104", "Y105", "Y106", "Y107", "Y108",
         "Y109", "Y110", "Y111", "Y112", "Y113", "Y114", "Y115", "Y116",
-        "Y117", "Y118", "Y119", "Y120",
+        "Y117", "Y118", "Y119", "Y120", "Y121",
         
         # Comparations
         "Y201", "Y202", "Y203", "Y204", "Y205", "Y206", "Y207", "Y208",
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py	Mon Apr 05 10:55:02 2021 +0200
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py	Tue Apr 06 17:53:39 2021 +0200
@@ -78,6 +78,17 @@
         
         self.generic_visit(node)
     
+    def visit_Assign(self, node):
+        """
+        Public method to process an Assign node.
+        
+        @param node reference to the Assign node
+        @type ast.Assign
+        """
+        self.__check121(node)
+        
+        self.generic_visit(node)
+    
     def visit_BoolOp(self, node):
         """
         Public method to process a BoolOp node.
@@ -1057,6 +1068,28 @@
             self.__error(node.lineno - 1, node.col_offset, "Y120",
                          node.name)
     
+    def __check121(self, node):
+        """
+        Private method to check for assignments that could be converted into
+        an augmented assignment
+        
+        @param node reference to the AST node to be checked
+        @type ast.Assign
+        """
+        # a = a - b
+        if (
+            len(node.targets) == 1 and
+            isinstance(node.targets[0], ast.Name) and
+            isinstance(node.value, ast.BinOp) and
+            isinstance(node.value.left, ast.Name) and
+            node.value.left.id == node.targets[0].id and
+            not isinstance(node.value.right, ast.Tuple)
+        ):
+            newNode = ast.AugAssign(node.targets[0], node.value.op,
+                                    node.value.right)
+            self.__error(node.lineno - 1, node.col_offset, "Y121",
+                         unparse(newNode), unparse(node))
+    
     def __check201(self, node):
         """
         Private method to check for calls where an unary 'not' is used for
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py	Mon Apr 05 10:55:02 2021 +0200
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py	Tue Apr 06 17:53:39 2021 +0200
@@ -76,6 +76,9 @@
     "Y120": QCoreApplication.translate(
         "SimplifyChecker",
         '''Use "class {0}:" instead of "class {0}(object):"'''),
+    "Y121": QCoreApplication.translate(
+        "SimplifyChecker",
+        '''Use "{0}" instead of "{1}"'''),
     
     # Comparations
     "Y201": QCoreApplication.translate(
@@ -150,6 +153,8 @@
     "Y119": ["Foo"],
     "Y120": ["Foo"],
     
+    "Y131": ["foo += 42", "foo = foo + 42"],
+    
     # Comparations
     "Y201": ["foo", "bar"],
     "Y202": ["foo", "bar"],

eric ide

mercurial