Tue, 06 Apr 2021 17:53:39 +0200
Code Style Checker
- added a simplify check to detect assignments that could be converted to augmented assignments
--- 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)
--- 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"],