From bed3479f4f77fc2bda35cdf4fd902530f50bd9a3 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 21 Oct 2015 02:13:18 -0400 Subject: cros lint: detect & warn about trailing newlines So we don't have to have reviewers catch these errors, add a linter check. BUG=None TEST=`cros lint` detected a few files with bad trailing newlines Change-Id: I6dd90e25516e77902fa91227b2d4c4036cc7d11a Reviewed-on: https://chromium-review.googlesource.com/307175 Commit-Ready: Mike Frysinger Tested-by: Mike Frysinger Reviewed-by: Paul Hobbs --- cli/cros/lint.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cli/cros/lint.py b/cli/cros/lint.py index f54c8a6b9..5f9547105 100644 --- a/cli/cros/lint.py +++ b/cli/cros/lint.py @@ -385,6 +385,7 @@ class SourceChecker(BaseChecker): class _MessageR9200(object): pass class _MessageR9201(object): pass class _MessageR9202(object): pass + class _MessageR9210(object): pass # pylint: enable=class-missing-docstring,multiple-statements name = 'source_checker' @@ -397,6 +398,8 @@ class SourceChecker(BaseChecker): ('missing-shebang'), _MessageR9201), 'R9202': ('Shebang is set, but file is not executable', ('spurious-shebang'), _MessageR9202), + 'R9210': ('Trailing new lines found at end of file', + ('excess-trailing-newlines'), _MessageR9210), } options = () @@ -405,6 +408,7 @@ class SourceChecker(BaseChecker): stream = node.file_stream stream.seek(0) self._check_shebang(node, stream) + self._check_trailing_lines(node, stream) def _check_shebang(self, _node, stream): """Verify the shebang is version specific""" @@ -424,6 +428,14 @@ class SourceChecker(BaseChecker): if parts[0] not in ('#!/usr/bin/python2', '#!/usr/bin/python3'): self.add_message('R9200') + def _check_trailing_lines(self, _node, stream): + """Reject trailing lines""" + st = os.fstat(stream.fileno()) + if st.st_size > 1: + stream.seek(st.st_size - 2) + if not stream.read().strip('\n'): + self.add_message('R9210') + class ChromiteLoggingChecker(BaseChecker): """Make sure we enforce rules on importing logging.""" -- cgit v1.2.3