diff options
Diffstat (limited to 'contrib/llvm/utils/lint/common_lint.py')
-rw-r--r-- | contrib/llvm/utils/lint/common_lint.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/contrib/llvm/utils/lint/common_lint.py b/contrib/llvm/utils/lint/common_lint.py new file mode 100644 index 0000000..e982680 --- /dev/null +++ b/contrib/llvm/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 |