16 |
16 |
17 import Utilities |
17 import Utilities |
18 |
18 |
19 Pep8FixableIssues = ["E101", "W191", "E201", "E202", "E203", "E211", "E221", |
19 Pep8FixableIssues = ["E101", "W191", "E201", "E202", "E203", "E211", "E221", |
20 "E222", "E225", "E231", "E241", "E251", "E261", "E262", |
20 "E222", "E225", "E231", "E241", "E251", "E261", "E262", |
21 "W291", "W292", "W293", "E301", "E302", "E303", "E304", |
21 "W291", "W292", "W293", "E301", "E302", "E303", "E304", |
22 "W391", "W603"] |
22 "W391", "W603"] |
|
23 |
23 |
24 |
24 class Pep8Fixer(QObject): |
25 class Pep8Fixer(QObject): |
25 """ |
26 """ |
26 Class implementing a fixer for certain PEP 8 issues. |
27 Class implementing a fixer for certain PEP 8 issues. |
27 """ |
28 """ |
46 self.__fixCodes = [c.strip() for c in fixCodes.split(",") if c.strip()] |
47 self.__fixCodes = [c.strip() for c in fixCodes.split(",") if c.strip()] |
47 self.fixed = 0 |
48 self.fixed = 0 |
48 |
49 |
49 if not inPlace: |
50 if not inPlace: |
50 self.__origName = self.__filename |
51 self.__origName = self.__filename |
51 self.__filename = os.path.join(os.path.dirname(self.__filename), |
52 self.__filename = os.path.join(os.path.dirname(self.__filename), |
52 "fixed_" + os.path.basename(self.__filename)) |
53 "fixed_" + os.path.basename(self.__filename)) |
53 |
54 |
54 self.__fixes = { |
55 self.__fixes = { |
55 "E101" : self.__fixTabs, |
56 "E101": self.__fixTabs, |
56 "W191" : self.__fixTabs, |
57 "W191": self.__fixTabs, |
57 "E201" : self.__fixWhitespaceAfter, |
58 "E201": self.__fixWhitespaceAfter, |
58 "E202" : self.__fixWhitespaceBefore, |
59 "E202": self.__fixWhitespaceBefore, |
59 "E203" : self.__fixWhitespaceBefore, |
60 "E203": self.__fixWhitespaceBefore, |
60 "E211" : self.__fixWhitespaceBefore, |
61 "E211": self.__fixWhitespaceBefore, |
61 "E221" : self.__fixWhitespaceAroundOperator, |
62 "E221": self.__fixWhitespaceAroundOperator, |
62 "E222" : self.__fixWhitespaceAroundOperator, |
63 "E222": self.__fixWhitespaceAroundOperator, |
63 "E225" : self.__fixMissingWhitespaceAroundOperator, |
64 "E225": self.__fixMissingWhitespaceAroundOperator, |
64 "E231" : self.__fixMissingWhitespaceAfter, |
65 "E231": self.__fixMissingWhitespaceAfter, |
65 "E241" : self.__fixWhitespaceAroundOperator, |
66 "E241": self.__fixWhitespaceAroundOperator, |
66 "E251" : self.__fixWhitespaceAroundEquals, |
67 "E251": self.__fixWhitespaceAroundEquals, |
67 "E261" : self.__fixWhitespaceBeforeInline, |
68 "E261": self.__fixWhitespaceBeforeInline, |
68 "E262" : self.__fixWhitespaceAfterInline, |
69 "E262": self.__fixWhitespaceAfterInline, |
69 "W291" : self.__fixWhitespace, |
70 "W291": self.__fixWhitespace, |
70 "W292" : self.__fixNewline, |
71 "W292": self.__fixNewline, |
71 "W293" : self.__fixWhitespace, |
72 "W293": self.__fixWhitespace, |
72 "E301" : self.__fixOneBlankLine, |
73 "E301": self.__fixOneBlankLine, |
73 "E302" : self.__fixTwoBlankLines, |
74 "E302": self.__fixTwoBlankLines, |
74 "E303" : self.__fixTooManyBlankLines, |
75 "E303": self.__fixTooManyBlankLines, |
75 "E304" : self.__fixBlankLinesAfterDecorator, |
76 "E304": self.__fixBlankLinesAfterDecorator, |
76 "W391" : self.__fixTrailingBlankLines, |
77 "W391": self.__fixTrailingBlankLines, |
77 "W603" : self.__fixNotEqual, |
78 "W603": self.__fixNotEqual, |
78 } |
79 } |
79 self.__modified = False |
80 self.__modified = False |
80 self.__stack = [] # these need to be fixed before the file is saved |
81 self.__stack = [] # these need to be fixed before the file is saved |
81 # but after all inline fixes |
82 # but after all inline fixes |
82 |
83 |
177 @param line line number of the issue (integer) |
178 @param line line number of the issue (integer) |
178 @param pos position inside line (integer) |
179 @param pos position inside line (integer) |
179 @return flag indicating an applied fix (boolean) and a message for |
180 @return flag indicating an applied fix (boolean) and a message for |
180 the fix (string) |
181 the fix (string) |
181 """ |
182 """ |
182 self.__source[line - 1] = re.sub(r'[\t ]*$', "", |
183 self.__source[line - 1] = re.sub(r'[\t ]*$', "", |
183 self.__source[line - 1]) |
184 self.__source[line - 1]) |
184 return (True, self.trUtf8("Whitespace stripped from end of line.")) |
185 return (True, self.trUtf8("Whitespace stripped from end of line.")) |
185 |
186 |
186 def __fixNewline(self, code, line, pos): |
187 def __fixNewline(self, code, line, pos): |
187 """ |
188 """ |
411 self.__source[line] = self.__source[line][:pos - 1] + \ |
412 self.__source[line] = self.__source[line][:pos - 1] + \ |
412 self.__source[line][pos:] |
413 self.__source[line][pos:] |
413 pos -= 1 |
414 pos -= 1 |
414 return (True, self.trUtf8("Extraneous whitespace removed.")) |
415 return (True, self.trUtf8("Extraneous whitespace removed.")) |
415 |
416 |
416 def __fixMissingWhitespaceAroundOperator(self, code, line, pos, |
417 def __fixMissingWhitespaceAroundOperator(self, code, line, pos, |
417 apply=False): |
418 apply=False): |
418 """ |
419 """ |
419 Private method to fix missing whitespace after ',;:'. |
420 Private method to fix missing whitespace after ',;:'. |
420 |
421 |
421 @param code code of the issue (string) |
422 @param code code of the issue (string) |