summaryrefslogtreecommitdiff
path: root/cli/cros/lint.py
diff options
context:
space:
mode:
Diffstat (limited to 'cli/cros/lint.py')
-rw-r--r--cli/cros/lint.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/cli/cros/lint.py b/cli/cros/lint.py
index f54c8a6b9..36d07e8e1 100644
--- a/cli/cros/lint.py
+++ b/cli/cros/lint.py
@@ -385,6 +385,8 @@ class SourceChecker(BaseChecker):
class _MessageR9200(object): pass
class _MessageR9201(object): pass
class _MessageR9202(object): pass
+ class _MessageR9203(object): pass
+ class _MessageR9210(object): pass
# pylint: enable=class-missing-docstring,multiple-statements
name = 'source_checker'
@@ -397,6 +399,10 @@ class SourceChecker(BaseChecker):
('missing-shebang'), _MessageR9201),
'R9202': ('Shebang is set, but file is not executable',
('spurious-shebang'), _MessageR9202),
+ 'R9203': ('Unittest not named xxx_unittest.py',
+ ('unittest-misnamed'), _MessageR9203),
+ 'R9210': ('Trailing new lines found at end of file',
+ ('excess-trailing-newlines'), _MessageR9210),
}
options = ()
@@ -405,6 +411,8 @@ class SourceChecker(BaseChecker):
stream = node.file_stream
stream.seek(0)
self._check_shebang(node, stream)
+ self._check_module_name(node)
+ self._check_trailing_lines(node, stream)
def _check_shebang(self, _node, stream):
"""Verify the shebang is version specific"""
@@ -424,6 +432,21 @@ class SourceChecker(BaseChecker):
if parts[0] not in ('#!/usr/bin/python2', '#!/usr/bin/python3'):
self.add_message('R9200')
+ def _check_module_name(self, node):
+ """Make sure the module name is sane"""
+ # Catch various typos.
+ name = node.name.rsplit('.', 2)[-1]
+ if name.rsplit('_', 2)[-1] in ('unittests',):
+ self.add_message('R9203')
+
+ 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."""