Other utilities (notoriously the linux kernel's checkpatch.pl) have a more standardized form for printing file and lines. With this change, the template used to print gains two enhancements: 1. Color 2. Conformance with the kernel's version of checkpatch.pl
Signed-off-by: Aaron Conole <acon...@redhat.com> --- utilities/checkpatch.py | 81 ++++++++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py index b1e70e1..06c0a56 100755 --- a/utilities/checkpatch.py +++ b/utilities/checkpatch.py @@ -23,33 +23,41 @@ __errors = 0 __warnings = 0 print_file_name = None checking_file = False +total_line = 0 +colors = False -def print_file(): - global print_file_name - if print_file_name: - print("In file %s" % print_file_name) - print_file_name = None +def get_color_end(): + global colors + if colors: + return "\033[00m" + return "" -def print_error(message, lineno=None): +def get_red_begin(): + global colors + if colors: + return "\033[91m" + return "" + + +def get_yellow_begin(): + global colors + if colors: + return "\033[93m" + return "" + + +def print_error(message): global __errors - print_file() - if lineno is not None: - print("E(%d): %s" % (lineno, message)) - else: - print("E: %s" % (message)) + print("%sERROR%s: %s" % (get_red_begin(), get_color_end(), message)) __errors = __errors + 1 -def print_warning(message, lineno=None): +def print_warning(message): global __warnings - print_file() - if lineno: - print("W(%d): %s" % (lineno, message)) - else: - print("W: %s" % (message)) + print("%sWARNING%s: %s" % (get_yellow_begin(), get_color_end(), message)) __warnings = __warnings + 1 @@ -176,33 +184,29 @@ checks = [ 'match_name': lambda x: not any([fmt in x for fmt in line_length_blacklist]), 'check': lambda x: line_length_check(x), - 'print': - lambda(x): print_warning("Line is greater than 79-characters long", x)}, + 'print': lambda: print_warning("Line length is >79-characters long")}, {'regex': '$(?<!\.mk)', 'match_name': None, 'check': lambda x: not leading_whitespace_is_spaces(x), - 'print': - lambda(x): print_warning("Line has non-spaces leading whitespace", x)}, + 'print': lambda: print_warning("Line has non-spaces leading whitespace")}, {'regex': None, 'match_name': None, 'check': lambda x: trailing_whitespace_or_crlf(x), - 'print': lambda x: print_warning("Line has trailing whitespace", x)}, + 'print': lambda: print_warning("Line has trailing whitespace")}, {'regex': '(.c|.h)(.in)?$', 'match_name': None, 'check': lambda x: not if_and_for_whitespace_checks(x), - 'print': lambda x: print_error("Improper whitespace around control block", - x)}, + 'print': lambda: print_error("Improper whitespace around control block")}, {'regex': '(.c|.h)(.in)?$', 'match_name': None, 'check': lambda x: not if_and_for_end_with_bracket_check(x), - 'print': lambda x: print_error("Inappropriate bracing around statement", - x)}, + 'print': lambda: print_error("Inappropriate bracing around statement")}, {'regex': '(.c|.h)(.in)?$', 'match_name': None, 'check': lambda x: pointer_whitespace_check(x), 'print': - lambda x: print_error("Inappropriate spacing in pointer declaration", x)} + lambda: print_error("Inappropriate spacing in pointer declaration")} ] @@ -225,18 +229,23 @@ def get_file_type_checks(filename): def run_checks(current_file, line, lineno): """Runs the various checks for the particular line. This will take filename into account.""" + global checking_file, total_line print_line = False for check in get_file_type_checks(current_file): if check['check'](line): - check['print'](lineno) + check['print']() print_line = True if print_line: - print("\n%s\n" % line) + if checking_file: + print("%s:%d:" % (current_file, lineno)) + else: + print("#%d FILE: %s:%d:" % (total_line, current_file, lineno)) + print("%s\n" % line) def ovs_checkpatch_parse(text): - global print_file_name + global print_file_name, total_line lineno = 0 signatures = [] co_authors = [] @@ -257,6 +266,7 @@ def ovs_checkpatch_parse(text): previous_file = current_file lineno = lineno + 1 + total_line = total_line + 1 if len(line) <= 0: continue @@ -335,7 +345,7 @@ def usage(): def ovs_checkpatch_file(filename): - global __warnings, __errors, checking_file + global __warnings, __errors, checking_file, total_line try: mail = email.message_from_file(open(filename, 'r')) except: @@ -347,7 +357,10 @@ def ovs_checkpatch_file(filename): continue result = ovs_checkpatch_parse(part.get_payload(decode=True)) if result < 0: - print("Warnings: %d, Errors: %d" % (__warnings, __errors)) + print("Lines checked: %d, Warnings: %d, Errors: %d" % + (total_line, __warnings, __errors)) + else: + print("Lines checked: %d, no obvious problems found" % (total_line)) return result @@ -381,6 +394,10 @@ if __name__ == '__main__': else: print("Unknown option '%s'" % o) sys.exit(-1) + + if sys.stdout.isatty(): + colors = True + try: filename = args[0] except: -- 2.9.3 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev