diff options
author | Greg Fitzgerald <gregf@codeaurora.org> | 2014-05-15 18:52:11 +0000 |
---|---|---|
committer | Greg Fitzgerald <gregf@codeaurora.org> | 2014-05-15 18:52:11 +0000 |
commit | f42b49787bff04379e807588d0f1984ddf9f032b (patch) | |
tree | 6c5aa93d3051be9730a42aa79193ec7b2b1d08cb /compiler-rt/lib/sanitizer_common/scripts/litlint.py | |
parent | 54bb2e0092149569882ce07e90703d5b44084a51 (diff) | |
download | bcm5719-llvm-f42b49787bff04379e807588d0f1984ddf9f032b.tar.gz bcm5719-llvm-f42b49787bff04379e807588d0f1984ddf9f032b.zip |
cleanup and test litlint
llvm-svn: 208907
Diffstat (limited to 'compiler-rt/lib/sanitizer_common/scripts/litlint.py')
-rwxr-xr-x | compiler-rt/lib/sanitizer_common/scripts/litlint.py | 72 |
1 files changed, 59 insertions, 13 deletions
diff --git a/compiler-rt/lib/sanitizer_common/scripts/litlint.py b/compiler-rt/lib/sanitizer_common/scripts/litlint.py index b82eec29049..1e78448b63d 100755 --- a/compiler-rt/lib/sanitizer_common/scripts/litlint.py +++ b/compiler-rt/lib/sanitizer_common/scripts/litlint.py @@ -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) |