eric6/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py

changeset 8209
14470a65a52e
parent 8205
4a0f1f896341
child 8210
b5903eaa7a7b
--- 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

eric ide

mercurial