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

changeset 7980
2c3f14a3c595
parent 7972
4fc11172df1b
child 7988
c4c17121eff8
equal deleted inserted replaced
7979:54b73174ab61 7980:2c3f14a3c595
16 import tokenize 16 import tokenize
17 17
18 import AstUtilities 18 import AstUtilities
19 19
20 from eradicate import Eradicator 20 from eradicate import Eradicator
21
22 from .MiscellaneousDefaults import MiscellaneousCheckerDefaultArgs
21 23
22 24
23 def composeCallPath(node): 25 def composeCallPath(node):
24 """ 26 """
25 Generator function to assemble the call path of a given node. 27 Generator function to assemble the call path of a given node.
155 157
156 import builtins 158 import builtins
157 self.__builtins = [b for b in dir(builtins) 159 self.__builtins = [b for b in dir(builtins)
158 if b not in self.BuiltinsWhiteList] 160 if b not in self.BuiltinsWhiteList]
159 161
160 # TODO: add support for eradicator whitelist
161 self.__eradicator = Eradicator() 162 self.__eradicator = Eradicator()
162 163
163 # statistics counters 164 # statistics counters
164 self.counters = {} 165 self.counters = {}
165 166
198 (self.__checkReturn, ("M831", "M832", "M833", "M834")), 199 (self.__checkReturn, ("M831", "M832", "M833", "M834")),
199 (self.__checkLineContinuation, ("M841",)), 200 (self.__checkLineContinuation, ("M841",)),
200 (self.__checkCommentedCode, ("M891",)), 201 (self.__checkCommentedCode, ("M891",)),
201 ] 202 ]
202 203
203 self.__defaultArgs = { 204 # the eradicate whitelist
204 "BuiltinsChecker": { 205 commentedCodeCheckerArgs = self.__args.get(
205 "chr": ["unichr", ], 206 "CommentedCodeChecker",
206 "str": ["unicode", ], 207 MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"])
207 }, 208 commentedCodeCheckerWhitelist = commentedCodeCheckerArgs.get(
208 "CodingChecker": 'latin-1, utf-8', 209 "WhiteList",
209 "CopyrightChecker": { 210 MiscellaneousCheckerDefaultArgs[
210 "Author": "", 211 "CommentedCodeChecker"]["WhiteList"])
211 "MinFilesize": 0, 212 self.__eradicator.update_whitelist(commentedCodeCheckerWhitelist,
212 }, 213 extend_default=False)
213 "CommentedCodeChecker": {
214 "Aggressive": False,
215 }
216 }
217 214
218 self.__checkers = [] 215 self.__checkers = []
219 for checker, codes in checkersWithCodes: 216 for checker, codes in checkersWithCodes:
220 if any(not (code and self.__ignoreCode(code)) 217 if any(not (code and self.__ignoreCode(code))
221 for code in codes): 218 for code in codes):
339 if len(self.__source) == 0: 336 if len(self.__source) == 0:
340 return 337 return
341 338
342 encodings = [e.lower().strip() 339 encodings = [e.lower().strip()
343 for e in self.__args.get( 340 for e in self.__args.get(
344 "CodingChecker", self.__defaultArgs["CodingChecker"]) 341 "CodingChecker",
342 MiscellaneousCheckerDefaultArgs["CodingChecker"])
345 .split(",")] 343 .split(",")]
346 lineno, coding = self.__getCoding() 344 lineno, coding = self.__getCoding()
347 if coding: 345 if coding:
348 if coding.lower() not in encodings: 346 if coding.lower() not in encodings:
349 self.__error(lineno, 0, "M102", coding) 347 self.__error(lineno, 0, "M102", coding)
354 """ 352 """
355 Private method to check the presence of a copyright statement. 353 Private method to check the presence of a copyright statement.
356 """ 354 """
357 source = "".join(self.__source) 355 source = "".join(self.__source)
358 copyrightArgs = self.__args.get( 356 copyrightArgs = self.__args.get(
359 "CopyrightChecker", self.__defaultArgs["CopyrightChecker"]) 357 "CopyrightChecker",
358 MiscellaneousCheckerDefaultArgs["CopyrightChecker"])
360 copyrightMinFileSize = copyrightArgs.get( 359 copyrightMinFileSize = copyrightArgs.get(
361 "MinFilesize", 360 "MinFilesize",
362 self.__defaultArgs["CopyrightChecker"]["MinFilesize"]) 361 MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["MinFilesize"])
363 copyrightAuthor = copyrightArgs.get( 362 copyrightAuthor = copyrightArgs.get(
364 "Author", 363 "Author",
365 self.__defaultArgs["CopyrightChecker"]["Author"]) 364 MiscellaneousCheckerDefaultArgs["CopyrightChecker"]["Author"])
366 copyrightRegexStr = ( 365 copyrightRegexStr = (
367 r"Copyright\s+(\(C\)\s+)?(\d{{4}}\s+-\s+)?\d{{4}}\s+{author}" 366 r"Copyright\s+(\(C\)\s+)?(\d{{4}}\s+-\s+)?\d{{4}}\s+{author}"
368 ) 367 )
369 368
370 tocheck = max(1024, copyrightMinFileSize) 369 tocheck = max(1024, copyrightMinFileSize)
389 """ 388 """
390 Private method to check for commented code. 389 Private method to check for commented code.
391 """ 390 """
392 source = "".join(self.__source) 391 source = "".join(self.__source)
393 commentedCodeCheckerArgs = self.__args.get( 392 commentedCodeCheckerArgs = self.__args.get(
394 "CommentedCodeChecker", self.__defaultArgs["CommentedCodeChecker"]) 393 "CommentedCodeChecker",
394 MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"])
395 aggressive = commentedCodeCheckerArgs.get( 395 aggressive = commentedCodeCheckerArgs.get(
396 "Aggressive", 396 "Aggressive",
397 self.__defaultArgs["CommentedCodeChecker"]["Aggressive"]) 397 MiscellaneousCheckerDefaultArgs[
398 "CommentedCodeChecker"]["Aggressive"])
398 for markedLine in self.__eradicator.commented_out_code_line_numbers( 399 for markedLine in self.__eradicator.commented_out_code_line_numbers(
399 source, aggressive=aggressive): 400 source, aggressive=aggressive):
400 self.__error(markedLine - 1, 0, "M891") 401 self.__error(markedLine - 1, 0, "M891")
401 402
402 def __checkLineContinuation(self): 403 def __checkLineContinuation(self):
646 functionDefs.append(ast.AsyncFunctionDef) 647 functionDefs.append(ast.AsyncFunctionDef)
647 except AttributeError: 648 except AttributeError:
648 pass 649 pass
649 650
650 ignoreBuiltinAssignments = self.__args.get( 651 ignoreBuiltinAssignments = self.__args.get(
651 "BuiltinsChecker", self.__defaultArgs["BuiltinsChecker"]) 652 "BuiltinsChecker",
653 MiscellaneousCheckerDefaultArgs["BuiltinsChecker"])
652 654
653 for node in ast.walk(self.__tree): 655 for node in ast.walk(self.__tree):
654 if isinstance(node, ast.Assign): 656 if isinstance(node, ast.Assign):
655 # assign statement 657 # assign statement
656 for element in node.targets: 658 for element in node.targets:

eric ide

mercurial