diff -r 866adc8c315b -r 0acf98cd089a eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py --- 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): """