[compiler-rt] r208907 - cleanup and test litlint

Greg Fitzgerald gregf at codeaurora.org
Thu May 15 11:52:11 PDT 2014


Author: garious
Date: Thu May 15 13:52:11 2014
New Revision: 208907

URL: http://llvm.org/viewvc/llvm-project?rev=208907&view=rev
Log:
cleanup and test litlint

Added:
    compiler-rt/trunk/lib/sanitizer_common/scripts/litlint_test.py   (with props)
Modified:
    compiler-rt/trunk/lib/sanitizer_common/scripts/litlint.py

Modified: compiler-rt/trunk/lib/sanitizer_common/scripts/litlint.py
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/scripts/litlint.py?rev=208907&r1=208906&r2=208907&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/scripts/litlint.py (original)
+++ compiler-rt/trunk/lib/sanitizer_common/scripts/litlint.py Thu May 15 13:52:11 2014
@@ -1,26 +1,72 @@
 #!/usr/bin/python
 #
-# lit-lint
+# litlint
 #
-# Check that the RUN commands in lit tests can be executed with an emulator.
+# Ensure RUN commands in lit tests are free of common errors.
+#
+# If any errors are detected, litlint returns a nonzero exit code.
 #
 
 import optparse
 import re
 import sys
 
-parser = optparse.OptionParser()
-parser.add_option('--filter')  # ignored
-(options, filenames) = parser.parse_args()
-
+# Compile regex once for all files
 runRegex = re.compile(r'(?<!-o)(?<!%run) %t\s')
-errorMsg = "litlint: {}:{}: error: missing %run before %t.\n\t{}"
+
+def LintLine(s):
+  """ Validate a line
+
+  Args:
+    s: str, the line to validate
+
+  Returns:
+    Returns an error message and a 1-based column number if an error was
+    detected, otherwise (None, None).
+  """
+
+  # Check that RUN command can be executed with an emulator
+  m = runRegex.search(s)
+  if m:
+    start, end = m.span()
+    return ('missing %run before %t', start + 2)
+
+  # No errors
+  return (None, None)
+
 
 def LintFile(p):
-    with open(p, 'r') as f:
-        for i, s in enumerate(f.readlines()):
-            if runRegex.search(s):
-               sys.stderr.write(errorMsg.format(p, i, s))
+  """ Check that each RUN command can be executed with an emulator
+
+  Args:
+    p: str, valid path to a file
+
+  Returns:
+    The number of errors detected.
+  """
+  errs = 0
+  with open(p, 'r') as f:
+    for i, s in enumerate(f.readlines(), start=1):
+      msg, col = LintLine(s)
+      if msg != None:
+        errs += 1
+        errorMsg = 'litlint: {}:{}:{}: error: {}.\n{}{}\n'
+        arrow = (col-1) * ' ' + '^'
+        sys.stderr.write(errorMsg.format(p, i, col, msg, s, arrow))
+  return errs
+
+
+if __name__ == "__main__":
+  # Parse args
+  parser = optparse.OptionParser()
+  parser.add_option('--filter')  # ignored
+  (options, filenames) = parser.parse_args()
+
+  # Lint each file
+  errs = 0
+  for p in filenames:
+    errs += LintFile(p)
 
-for p in filenames:
-    LintFile(p)
+  # If errors, return nonzero
+  if errs > 0:
+    sys.exit(1)

Added: compiler-rt/trunk/lib/sanitizer_common/scripts/litlint_test.py
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/scripts/litlint_test.py?rev=208907&view=auto
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/scripts/litlint_test.py (added)
+++ compiler-rt/trunk/lib/sanitizer_common/scripts/litlint_test.py Thu May 15 13:52:11 2014
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+
+# Tests for litlint.py
+#
+# Usage: python litlint_test.py
+#
+# Returns nonzero if any test fails
+
+import litlint
+import unittest
+
+class TestLintLine(unittest.TestCase):
+  def test_missing_run(self):
+    f = litlint.LintLine
+    self.assertEqual(f(' %t '),     ('missing %run before %t', 2))
+    self.assertEqual(f(' %t\n'),    ('missing %run before %t', 2))
+    self.assertEqual(f(' %t.so '),  (None, None))
+    self.assertEqual(f(' %t.o '),   (None, None))
+    self.assertEqual(f('%run %t '), (None, None))
+    self.assertEqual(f('-o %t '),   (None, None))
+
+if __name__ == '__main__':
+  unittest.main()

Propchange: compiler-rt/trunk/lib/sanitizer_common/scripts/litlint_test.py
------------------------------------------------------------------------------
    svn:executable = *





More information about the llvm-commits mailing list