aboutsummaryrefslogtreecommitdiffstats
path: root/utils/lint/common_lint.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/lint/common_lint.py')
-rw-r--r--utils/lint/common_lint.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/utils/lint/common_lint.py b/utils/lint/common_lint.py
new file mode 100644
index 0000000..e982680
--- /dev/null
+++ b/utils/lint/common_lint.py
@@ -0,0 +1,97 @@
+#!/usr/bin/python
+#
+# Common lint functions applicable to multiple types of files.
+
+import re
+
+def VerifyLineLength(filename, lines, max_length):
+ """Checks to make sure the file has no lines with lines exceeding the length
+ limit.
+
+ Args:
+ filename: the file under consideration as string
+ lines: contents of the file as string array
+ max_length: maximum acceptable line length as number
+
+ Returns:
+ A list of tuples with format [(filename, line number, msg), ...] with any
+ violations found.
+ """
+ lint = []
+ line_num = 1
+ for line in lines:
+ length = len(line.rstrip('\n'))
+ if length > max_length:
+ lint.append((filename, line_num,
+ 'Line exceeds %d chars (%d)' % (max_length, length)))
+ line_num += 1
+ return lint
+
+def VerifyTabs(filename, lines):
+ """Checks to make sure the file has no tab characters.
+
+ Args:
+ filename: the file under consideration as string
+ lines: contents of the file as string array
+
+ Returns:
+ A list of tuples with format [(line_number, msg), ...] with any violations
+ found.
+ """
+ lint = []
+ tab_re = re.compile(r'\t')
+ line_num = 1
+ for line in lines:
+ if tab_re.match(line.rstrip('\n')):
+ lint.append((filename, line_num, 'Tab found instead of whitespace'))
+ line_num += 1
+ return lint
+
+
+def VerifyTrailingWhitespace(filename, lines):
+ """Checks to make sure the file has no lines with trailing whitespace.
+
+ Args:
+ filename: the file under consideration as string
+ lines: contents of the file as string array
+
+ Returns:
+ A list of tuples with format [(filename, line number, msg), ...] with any
+ violations found.
+ """
+ lint = []
+ trailing_whitespace_re = re.compile(r'\s+$')
+ line_num = 1
+ for line in lines:
+ if trailing_whitespace_re.match(line.rstrip('\n')):
+ lint.append((filename, line_num, 'Trailing whitespace'))
+ line_num += 1
+ return lint
+
+
+class BaseLint:
+ def RunOnFile(filename, lines):
+ raise Exception('RunOnFile() unimplemented')
+
+
+def RunLintOverAllFiles(linter, filenames):
+ """Runs linter over the contents of all files.
+
+ Args:
+ lint: subclass of BaseLint, implementing RunOnFile()
+ filenames: list of all files whose contents will be linted
+
+ Returns:
+ A list of tuples with format [(filename, line number, msg), ...] with any
+ violations found.
+ """
+ lint = []
+ for filename in filenames:
+ file = open(filename, 'r')
+ if not file:
+ print 'Cound not open %s' % filename
+ continue
+ lines = file.readlines()
+ lint.extend(linter.RunOnFile(filename, lines))
+
+ return lint