--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py Fri Apr 09 21:14:51 2021 +0200 +++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py Sat Apr 10 12:34:29 2021 +0200 @@ -66,6 +66,8 @@ super(SimplifyNodeVisitor, self).__init__() self.__error = errorCallback + + self.__classDefinitionStack = [] def visit_Expr(self, node): """ @@ -85,7 +87,7 @@ @param node reference to the Assign node @type ast.Assign """ - self.__check121(node) + self.__check181(node) self.generic_visit(node) @@ -168,6 +170,7 @@ @type ast.Call """ self.__check115(node) + self.__check182(node) self.generic_visit(node) @@ -201,10 +204,15 @@ @param node reference to the ClassDef node @type ast.ClassDef """ + # register the name of the class being defined + self.__classDefinitionStack.append(node.name) + self.__check119(node) self.__check120(node) self.generic_visit(node) + + self.__classDefinitionStack.pop() def visit_UnaryOp(self, node): """ @@ -1067,8 +1075,10 @@ ): self.__error(node.lineno - 1, node.col_offset, "Y120", node.name) + # TODO: extend to cover 'class FooBar(Foo, object):' + # => class FooBar(Foo): - def __check121(self, node): + def __check181(self, node): """ Private method to check for assignments that could be converted into an augmented assignment. @@ -1087,9 +1097,30 @@ ): newNode = ast.AugAssign(node.targets[0], node.value.op, node.value.right) - self.__error(node.lineno - 1, node.col_offset, "Y121", + self.__error(node.lineno - 1, node.col_offset, "Y181", unparse(newNode), unparse(node)) + def __check182(self, node): + """ + Private method to check for calls of type 'super(Foo, self)' that could + be shortened to 'super()'. + + @param node reference to the AST node to be checked + @type ast.Call + """ + # super(Foo, self) + if ( + self.__classDefinitionStack and + isinstance(node.func, ast.Name) and + node.func.id == "super" and + len(node.args) == 2 and + all(isinstance(arg, ast.Name) for arg in node.args) and + node.args[0].id == self.__classDefinitionStack[-1] and + node.args[1].id == "self" + ): + self.__error(node.lineno - 1, node.col_offset, "Y182", + unparse(node)) + def __check201(self, node): """ Private method to check for calls where an unary 'not' is used for