src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/eradicate.py

Wed, 20 Jul 2022 16:03:55 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 20 Jul 2022 16:03:55 +0200
branch
eric7
changeset 9251
e0f98cc25bf5
parent 9209
b99e7fd55fd3
child 9849
99782ca569ed
permissions
-rw-r--r--

Third Party packages
- upgraded eradicate to 2.1.0

7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
1 # Copyright (C) 2012-2018 Steven Myint
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 #
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Permission is hereby granted, free of charge, to any person obtaining
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 # a copy of this software and associated documentation files (the
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5 # "Software"), to deal in the Software without restriction, including
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 # without limitation the rights to use, copy, modify, merge, publish,
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 # distribute, sublicense, and/or sell copies of the Software, and to
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 # permit persons to whom the Software is furnished to do so, subject to
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 # the following conditions:
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 #
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 # The above copyright notice and this permission notice shall be included
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 # in all copies or substantial portions of the Software.
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 #
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """Removes commented-out Python code."""
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
24 from __future__ import print_function
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
25 from __future__ import unicode_literals
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
26
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 import difflib
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 import io
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 import os
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 import re
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 import tokenize
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
9251
e0f98cc25bf5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
33 __version__ = '2.1.0'
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
36 class Eradicator(object):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
37 """Eradicate comments."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
38 BRACKET_REGEX = re.compile(r'^[()\[\]{}\s]+$')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
39 CODING_COMMENT_REGEX = re.compile(r'.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
40 DEF_STATEMENT_REGEX = re.compile(r"def .+\)[\s]+->[\s]+[a-zA-Z_][a-zA-Z0-9_]*:$")
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
41 FOR_STATEMENT_REGEX = re.compile(r"for [a-zA-Z_][a-zA-Z0-9_]* in .+:$")
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
42 HASH_NUMBER = re.compile(r'#[0-9]')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
43 MULTILINE_ASSIGNMENT_REGEX = re.compile(r'^\s*\w+\s*=.*[(\[{]$')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
44 PARTIAL_DICTIONARY_REGEX = re.compile(r'^\s*[\'"]\w+[\'"]\s*:.+[,{]\s*$')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
45 PRINT_RETURN_REGEX = re.compile(r'^(print|return)\b\s*')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
46 WITH_STATEMENT_REGEX = re.compile(r"with .+ as [a-zA-Z_][a-zA-Z0-9_]*:$")
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
48 CODE_INDICATORS = ['(', ')', '[', ']', '{', '}', ':', '=', '%',
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
49 'print', 'return', 'break', 'continue', 'import']
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
50 CODE_KEYWORDS = [r'elif\s+.*', 'else', 'try', 'finally', r'except\s+.*']
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
51 CODE_KEYWORDS_AGGR = CODE_KEYWORDS + [r'if\s+.*']
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
52 WHITESPACE_HASH = ' \t\v\n#'
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
54 DEFAULT_WHITELIST = (
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
55 r'pylint',
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
56 r'pyright',
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
57 r'noqa',
9251
e0f98cc25bf5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
58 r'nosec',
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
59 r'type:\s*ignore',
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
60 r'fmt:\s*(on|off)',
9251
e0f98cc25bf5 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
61 r'isort:\s*(on|off|skip|skip_file|split|dont-add-imports(:\s*\[.*?\])?)',
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
62 r'TODO',
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
63 r'FIXME',
7980
2c3f14a3c595 CodeStyleCheckerDialog: added a commented code whitelist patterns to the Miscellaneous Checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7978
diff changeset
64 r'XXX'
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
65 )
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
66 WHITELIST_REGEX = re.compile(r'|'.join(DEFAULT_WHITELIST), flags=re.IGNORECASE)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
67
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
68 def comment_contains_code(self, line, aggressive=True):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
69 """Return True comment contains code."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
70 line = line.lstrip()
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
71 if not line.startswith('#'):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
72 return False
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
74 line = line.lstrip(self.WHITESPACE_HASH).strip()
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
75
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
76 # Ignore non-comment related hashes. For example, "# Issue #999".
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
77 if self.HASH_NUMBER.search(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
78 return False
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
79
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
80 # Ignore whitelisted comments
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
81 if self.WHITELIST_REGEX.search(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
82 return False
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
84 if self.CODING_COMMENT_REGEX.match(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
85 return False
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
87 # Check that this is possibly code.
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
88 for symbol in self.CODE_INDICATORS:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
89 if symbol in line:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
90 break
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
91 else:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
92 return False
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
93
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
94 if self.multiline_case(line, aggressive=aggressive):
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 return True
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
97 for symbol in self.CODE_KEYWORDS_AGGR if aggressive else self.CODE_KEYWORDS:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
98 if re.match(r'^\s*' + symbol + r'\s*:\s*$', line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
99 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
100
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
101 line = self.PRINT_RETURN_REGEX.sub('', line)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
102
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
103 if self.PARTIAL_DICTIONARY_REGEX.match(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
104 return True
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
106 try:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
107 compile(line, '<string>', 'exec')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
108 except (SyntaxError, TypeError, UnicodeDecodeError):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
109 return False
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
110 else:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
111 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
112
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
113
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
114 def multiline_case(self, line, aggressive=True):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
115 """Return True if line is probably part of some multiline code."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
116 if aggressive:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
117 for ending in ')]}':
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
118 if line.endswith(ending + ':'):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
119 return True
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
121 if line.strip() == ending + ',':
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
122 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
123
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
124 # Check whether a function/method definition with return value
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
125 # annotation
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
126 if self.DEF_STATEMENT_REGEX.search(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
127 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
128
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
129 # Check weather a with statement
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
130 if self.WITH_STATEMENT_REGEX.search(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
131 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
132
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
133 # Check weather a for statement
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
134 if self.FOR_STATEMENT_REGEX.search(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
135 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
136
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
137 if line.endswith('\\'):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
138 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
139
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
140 if self.MULTILINE_ASSIGNMENT_REGEX.match(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
141 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
142
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
143 if self.BRACKET_REGEX.match(line):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
144 return True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
145
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 return False
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
149 def commented_out_code_line_numbers(self, source, aggressive=True):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
150 """Yield line numbers of commented-out code."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
151 sio = io.StringIO(source)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
152 try:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
153 for token in tokenize.generate_tokens(sio.readline):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
154 token_type = token[0]
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
155 start_row = token[2][0]
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
156 line = token[4]
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
158 if (token_type == tokenize.COMMENT and
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
159 line.lstrip().startswith('#') and
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
160 self.comment_contains_code(line, aggressive)):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
161 yield start_row
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
162 except (tokenize.TokenError, IndentationError):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
163 pass
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
166 def filter_commented_out_code(self, source, aggressive=True):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
167 """Yield code with commented out code removed."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
168 marked_lines = list(self.commented_out_code_line_numbers(source,
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
169 aggressive))
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
170 sio = io.StringIO(source)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
171 previous_line = ''
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
172 for line_number, line in enumerate(sio.readlines(), start=1):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
173 if (line_number not in marked_lines or
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
174 previous_line.rstrip().endswith('\\')):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
175 yield line
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
176 previous_line = line
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
179 def fix_file(self, filename, args, standard_out):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
180 """Run filter_commented_out_code() on file."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
181 encoding = self.detect_encoding(filename)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
182 with self.open_with_encoding(filename, encoding=encoding) as input_file:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
183 source = input_file.read()
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
184
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
185 filtered_source = ''.join(self.filter_commented_out_code(source,
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
186 args.aggressive))
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
187
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
188 if source != filtered_source:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
189 if args.in_place:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
190 with self.open_with_encoding(filename, mode='w',
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
191 encoding=encoding) as output_file:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
192 output_file.write(filtered_source)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
193 else:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
194 diff = difflib.unified_diff(
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
195 source.splitlines(),
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
196 filtered_source.splitlines(),
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
197 'before/' + filename,
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
198 'after/' + filename,
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
199 lineterm='')
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
200 standard_out.write('\n'.join(list(diff) + ['']))
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
201 return True
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
204 def open_with_encoding(self, filename, encoding, mode='r'):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
205 """Return opened file with a specific encoding."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
206 return io.open(filename, mode=mode, encoding=encoding,
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
207 newline='') # Preserve line endings
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
210 def detect_encoding(self, filename):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
211 """Return file encoding."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
212 try:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
213 with open(filename, 'rb') as input_file:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
214 from lib2to3.pgen2 import tokenize as lib2to3_tokenize
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
215 encoding = lib2to3_tokenize.detect_encoding(input_file.readline)[0]
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
217 # Check for correctness of encoding.
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
218 with self.open_with_encoding(filename, encoding) as input_file:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
219 input_file.read()
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
221 return encoding
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
222 except (SyntaxError, LookupError, UnicodeDecodeError):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
223 return 'latin-1'
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
225 def update_whitelist(self, new_whitelist, extend_default=True):
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
226 """Updates the whitelist."""
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
227 if extend_default:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
228 self.WHITELIST_REGEX = re.compile(
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
229 r'|'.join(list(self.DEFAULT_WHITELIST) + new_whitelist),
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
230 flags=re.IGNORECASE)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
231 else:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
232 self.WHITELIST_REGEX = re.compile(
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
233 r'|'.join(new_whitelist),
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
234 flags=re.IGNORECASE)
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 def main(argv, standard_out, standard_error):
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """Main entry point."""
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 import argparse
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 parser = argparse.ArgumentParser(description=__doc__, prog='eradicate')
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 parser.add_argument('-i', '--in-place', action='store_true',
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 help='make changes to files instead of printing diffs')
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 parser.add_argument('-r', '--recursive', action='store_true',
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 help='drill down directories recursively')
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 parser.add_argument('-a', '--aggressive', action='store_true',
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 help='make more aggressive changes; '
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 'this may result in false positives')
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
248 parser.add_argument('-e', '--error', action="store_true",
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
249 help="Exit code based on result of check")
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 parser.add_argument('--version', action='version',
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 version='%(prog)s ' + __version__)
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
252 parser.add_argument('--whitelist', action="store",
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
253 help=(
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
254 'String of "#" separated comment beginnings to whitelist. '
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
255 'Single parts are interpreted as regex. '
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
256 'OVERWRITING the default whitelist: {}'
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
257 ).format(Eradicator.DEFAULT_WHITELIST))
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
258 parser.add_argument('--whitelist-extend', action="store",
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
259 help=(
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
260 'String of "#" separated comment beginnings to whitelist '
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
261 'Single parts are interpreted as regex. '
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
262 'Overwrites --whitelist. '
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
263 'EXTENDING the default whitelist: {} '
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
264 ).format(Eradicator.DEFAULT_WHITELIST))
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 parser.add_argument('files', nargs='+', help='files to format')
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 args = parser.parse_args(argv[1:])
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
269 eradicator = Eradicator()
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
270
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
271 if args.whitelist_extend:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
272 eradicator.update_whitelist(args.whitelist_extend.split('#'), True)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
273 elif args.whitelist:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
274 eradicator.update_whitelist(args.whitelist.split('#'), False)
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
275
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 filenames = list(set(args.files))
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
277 change_or_error = False
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 while filenames:
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 name = filenames.pop(0)
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 if args.recursive and os.path.isdir(name):
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 for root, directories, children in os.walk('{}'.format(name)):
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 filenames += [os.path.join(root, f) for f in children
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 if f.endswith('.py') and
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 not f.startswith('.')]
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 directories[:] = [d for d in directories
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 if not d.startswith('.')]
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 else:
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 try:
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
289 change_or_error = eradicator.fix_file(name, args=args, standard_out=standard_out) or change_or_error
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
290 except IOError as exception:
7040
f89952e5fc11 Code Style Checker: added check for commented code that should be removed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 print('{}'.format(exception), file=standard_error)
7972
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
292 change_or_error = True
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
293 if change_or_error and args.error:
4fc11172df1b Code Style Checker: upgraded eradicate.py to version 2.0.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7836
diff changeset
294 return 1

eric ide

mercurial