eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py

branch
maintenance
changeset 8043
0acf98cd089a
parent 7924
8a96736d465e
parent 7988
c4c17121eff8
child 8176
31965986ecd1
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py	Mon Feb 01 10:38:16 2021 +0100
@@ -17,6 +17,10 @@
 
 import AstUtilities
 
+from eradicate import Eradicator
+
+from .MiscellaneousDefaults import MiscellaneousCheckerDefaultArgs
+
 
 def composeCallPath(node):
     """
@@ -24,8 +28,8 @@
     
     @param node node to assemble call path for
     @type ast.Node
-    @return call path components
-    @rtype str
+    @yield call path components
+    @ytype str
     """
     if isinstance(node, ast.Attribute):
         for v in composeCallPath(node.value):
@@ -154,6 +158,8 @@
         import builtins
         self.__builtins = [b for b in dir(builtins)
                            if b not in self.BuiltinsWhiteList]
+        
+        self.__eradicator = Eradicator()
 
         # statistics counters
         self.counters = {}
@@ -195,20 +201,16 @@
             (self.__checkCommentedCode, ("M891",)),
         ]
         
-        self.__defaultArgs = {
-            "BuiltinsChecker": {
-                "chr": ["unichr", ],
-                "str": ["unicode", ],
-            },
-            "CodingChecker": 'latin-1, utf-8',
-            "CopyrightChecker": {
-                "Author": "",
-                "MinFilesize": 0,
-            },
-            "CommentedCodeChecker": {
-                "Aggressive": False,
-            }
-        }
+        # the eradicate whitelist
+        commentedCodeCheckerArgs = self.__args.get(
+            "CommentedCodeChecker",
+            MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"])
+        commentedCodeCheckerWhitelist = commentedCodeCheckerArgs.get(
+            "WhiteList",
+            MiscellaneousCheckerDefaultArgs[
+                "CommentedCodeChecker"]["WhiteList"])
+        self.__eradicator.update_whitelist(commentedCodeCheckerWhitelist,
+                                           extend_default=False)
         
         self.__checkers = []
         for checker, codes in checkersWithCodes:
@@ -336,7 +338,8 @@
         
         encodings = [e.lower().strip()
                      for e in self.__args.get(
-                     "CodingChecker", self.__defaultArgs["CodingChecker"])
+                     "CodingChecker",
+                     MiscellaneousCheckerDefaultArgs["CodingChecker"])
                      .split(",")]
         lineno, coding = self.__getCoding()
         if coding:
@@ -351,13 +354,14 @@
         """
         source = "".join(self.__source)
         copyrightArgs = self.__args.get(
-            "CopyrightChecker", self.__defaultArgs["CopyrightChecker"])
+            "CopyrightChecker",
+            MiscellaneousCheckerDefaultArgs["CopyrightChecker"])
         copyrightMinFileSize = copyrightArgs.get(
             "MinFilesize",
-            self.__defaultArgs["CopyrightChecker"]["MinFilesize"])
+            MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["MinFilesize"])
         copyrightAuthor = copyrightArgs.get(
             "Author",
-            self.__defaultArgs["CopyrightChecker"]["Author"])
+            MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["Author"])
         copyrightRegexStr = (
             r"Copyright\s+(\(C\)\s+)?(\d{{4}}\s+-\s+)?\d{{4}}\s+{author}"
         )
@@ -384,15 +388,15 @@
         """
         Private method to check for commented code.
         """
-        from eradicate import commented_out_code_line_numbers
-        
         source = "".join(self.__source)
         commentedCodeCheckerArgs = self.__args.get(
-            "CommentedCodeChecker", self.__defaultArgs["CommentedCodeChecker"])
+            "CommentedCodeChecker",
+            MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"])
         aggressive = commentedCodeCheckerArgs.get(
             "Aggressive",
-            self.__defaultArgs["CommentedCodeChecker"]["Aggressive"])
-        for markedLine in commented_out_code_line_numbers(
+            MiscellaneousCheckerDefaultArgs[
+                "CommentedCodeChecker"]["Aggressive"])
+        for markedLine in self.__eradicator.commented_out_code_line_numbers(
                 source, aggressive=aggressive):
             self.__error(markedLine - 1, 0, "M891")
     
@@ -558,18 +562,14 @@
                 numArgs = len(call.args)
                 if strArgs:
                     numArgs -= 1
-                if sys.version_info < (3, 5):
-                    hasKwArgs = bool(call.kwargs)
-                    hasStarArgs = bool(call.starargs)
-                else:
-                    hasKwArgs = any(kw.arg is None for kw in call.keywords)
-                    hasStarArgs = sum(1 for arg in call.args
-                                      if isinstance(arg, ast.Starred))
-                    
-                    if hasKwArgs:
-                        keywords.discard(None)
-                    if hasStarArgs:
-                        numArgs -= 1
+                hasKwArgs = any(kw.arg is None for kw in call.keywords)
+                hasStarArgs = sum(1 for arg in call.args
+                                  if isinstance(arg, ast.Starred))
+                
+                if hasKwArgs:
+                    keywords.discard(None)
+                if hasStarArgs:
+                    numArgs -= 1
                 
                 # if starargs or kwargs is not None, it can't count the
                 # parameters but at least check if the args are used
@@ -649,7 +649,8 @@
             pass
         
         ignoreBuiltinAssignments = self.__args.get(
-            "BuiltinsChecker", self.__defaultArgs["BuiltinsChecker"])
+            "BuiltinsChecker",
+            MiscellaneousCheckerDefaultArgs["BuiltinsChecker"])
         
         for node in ast.walk(self.__tree):
             if isinstance(node, ast.Assign):
@@ -1294,13 +1295,12 @@
         @param node reference to the node to be processed
         @type ast.JoinedStr
         """
-        if sys.version_info >= (3, 6):
-            if self.__withinLoggingStatement():
-                if any(isinstance(i, ast.FormattedValue) for i in node.values):
-                    if self.__withinLoggingArgument():
-                        self.violations.append((node, "M654"))
-                        
-                        super(LoggingVisitor, self).generic_visit(node)
+        if self.__withinLoggingStatement():
+            if any(isinstance(i, ast.FormattedValue) for i in node.values):
+                if self.__withinLoggingArgument():
+                    self.violations.append((node, "M654"))
+                    
+                    super(LoggingVisitor, self).generic_visit(node)
 
 
 class BugBearVisitor(ast.NodeVisitor):
@@ -1504,12 +1504,11 @@
         @param node reference to the node to be processed
         @type ast.JoinedStr
         """
-        if sys.version_info >= (3, 6):
-            for value in node.values:
-                if isinstance(value, ast.FormattedValue):
-                    return
-            
-            self.violations.append((node, "M508"))
+        for value in node.values:
+            if isinstance(value, ast.FormattedValue):
+                return
+        
+        self.violations.append((node, "M508"))
     
     def __checkForM502(self, node):
         """

eric ide

mercurial