Hi, this patch fixes the trailing whitespace check in check_GNU_style_lib.py.
Atm, the lines passed to the checks contain the eol char, so the trailing whitespace regexp '(\s+)$' matches for a line '123\n', which is in fact without trailing whitespace.
Fixed by removing the eol char. Committed. Thanks, - Tom
check_GNU_style_lib.py: Fix trailing whitespace check 2017-05-28 Tom de Vries <t...@codesourcery.com> * check_GNU_style_lib.py (TrailingWhitespaceCheck.check): Assert no trailing eol. (TrailingWhitespaceTest): New unit test. (check_GNU_style_file): Remove eol before checking. --- contrib/check_GNU_style_lib.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/contrib/check_GNU_style_lib.py b/contrib/check_GNU_style_lib.py index e1031df..63d0538 100755 --- a/contrib/check_GNU_style_lib.py +++ b/contrib/check_GNU_style_lib.py @@ -104,6 +104,7 @@ class TrailingWhitespaceCheck: self.re = re.compile('(\s+)$') def check(self, filename, lineno, line): + assert(len(line) == 0 or line[-1] != '\n') m = self.re.search(line) if m != None: return CheckError(filename, lineno, @@ -223,6 +224,18 @@ class LineLengthTest(unittest.TestCase): self.assertEqual(r.console_error, self.check.limit * 'a' + error_string(' = 123;')) +class TrailingWhitespaceTest(unittest.TestCase): + def setUp(self): + self.check = TrailingWhitespaceCheck() + + def test_trailing_whitespace_check_basic(self): + r = self.check.check('foo', 123, 'a = 123;') + self.assertIsNone(r) + r = self.check.check('foo', 123, 'a = 123; ') + self.assertIsNotNone(r) + r = self.check.check('foo', 123, 'a = 123;\t') + self.assertIsNotNone(r) + def check_GNU_style_file(file, file_encoding, format): checks = [LineLengthCheck(), SpacesCheck(), TrailingWhitespaceCheck(), SentenceSeparatorCheck(), SentenceEndOfCommentCheck(), @@ -244,7 +257,8 @@ def check_GNU_style_file(file, file_encoding, format): for line in hunk: if line.is_added and line.target_line_no != None: for check in checks: - e = check.check(t, line.target_line_no, line.value) + line_chomp = line.value.replace('\n', '') + e = check.check(t, line.target_line_no, line_chomp) if e != None: errors.append(e)