Added some basic lint tools for C++ and generic lint tool applicable to all
types of files (TableGen, LLVM assembly, HTML files, etc.)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61592 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/lint/common_lint.py b/utils/lint/common_lint.py
new file mode 100644
index 0000000..9567031
--- /dev/null
+++ b/utils/lint/common_lint.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+#
+# Common lint functions applicable to multiple types of files.
+
+import re
+
+def VerifyLineLength(filename, lines, max_length):
+  """Checkes 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
+  """
+  line_num = 1
+  for line in lines:
+    length = len(line.rstrip())  # strip off EOL char(s)
+    if length > max_length:
+      print '%s:%d:Line exceeds %d chars (%d)' % (filename, line_num,
+                                                  max_length, length)
+    line_num += 1
+
+
+def VerifyTrailingWhitespace(filename, lines):
+  """Checkes 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
+  """
+  trailing_whitespace_re = re.compile(r'\s+$')
+  line_num = 1
+  for line in lines:
+    if trailing_whitespace_re.match(line):
+      print '%s:%d:Trailing whitespace' % (filename, line_num)
+    line_num += 1
+
+
+class BaseLint:
+  def RunOnFile(filename, lines):
+    raise Exception('RunOnFile() unimplemented')
+
+
+def RunLintOverAllFiles(lint, 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
+  """
+  for filename in filenames:
+    file = open(filename, 'r')
+    if not file:
+      print 'Cound not open %s' % filename
+      continue
+    lines = file.readlines()
+    lint.RunOnFile(filename, lines)