Author: Kesavan Yogeswaran Date: 2022-02-20T22:00:28Z New Revision: c57b8ca721dd2e88ed96b7df65a518fdab738445
URL: https://github.com/llvm/llvm-project/commit/c57b8ca721dd2e88ed96b7df65a518fdab738445 DIFF: https://github.com/llvm/llvm-project/commit/c57b8ca721dd2e88ed96b7df65a518fdab738445.diff LOG: [clang-tidy] Provide fine control of color in run-clang-tidy D90110 modified the behavior of `run-clang-tidy` to always pass the `--use-color` option to clang-tidy, which enabled colored diagnostics output regardless of TTY status or .clang-tidy settings. This left the user with no option to disable the colored output. This presents an issue when trying to parse the output of run-clang-tidy programmaticall, as the output is polluted with ANSI escape characters. This PR fixes this issue in two ways: 1. It restores the default behavior of `run-clang-tidy` to let `clang-tidy` decide whether to color output. This allows the user to configure color via the `UseColor` option in a .clang-tidy file. 2. It adds mutually exclusive, optional `-use-color` and `-no-use-color` argument flags that let the user explicitly set the color option via the invocation. After this change the default behavior of `run-clang-tidy` when no .clang-tidy file is available is now to show no color, presumably because `clang-tidy` detects that the output is being piped and defaults to not showing colored output. This seems like an acceptable tradeoff to respect .clang-tidy configurations, as users can still use the `-use-color` option to explicitly enable color. Fixes #49441 (50097 in Bugzilla) Reviewed By: njames93 Differential Revision: https://reviews.llvm.org/D119562 Added: Modified: clang-tools-extra/clang-tidy/tool/run-clang-tidy.py Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py index 090646c1b061b..fa98c217e2381 100755 --- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py +++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py @@ -62,6 +62,21 @@ import queue as queue +def strtobool(val): + """Convert a string representation of truth to a bool following LLVM's CLI argument parsing.""" + + val = val.lower() + if val in ['', 'true', '1']: + return True + elif val in ['false', '0']: + return False + + # Return ArgumentTypeError so that argparse does not substitute its own error message + raise argparse.ArgumentTypeError( + "'{}' is invalid value for boolean argument! Try 0 or 1.".format(val) + ) + + def find_compilation_database(path): """Adjusts the directory until a compilation database is found.""" result = './' @@ -82,15 +97,20 @@ def make_absolute(f, directory): def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path, header_filter, allow_enabling_alpha_checkers, extra_arg, extra_arg_before, quiet, config, - line_filter): + line_filter, use_color): """Gets a command line for clang-tidy.""" - start = [clang_tidy_binary, '--use-color'] + start = [clang_tidy_binary] if allow_enabling_alpha_checkers: start.append('-allow-enabling-analyzer-alpha-checkers') if header_filter is not None: start.append('-header-filter=' + header_filter) if line_filter is not None: start.append('-line-filter=' + line_filter) + if use_color is not None: + if use_color: + start.append('--use-color') + else: + start.append('--use-color=false') if checks: start.append('-checks=' + checks) if tmpdir is not None: @@ -168,7 +188,8 @@ def run_tidy(args, tmpdir, build_path, queue, lock, failed_files): tmpdir, build_path, args.header_filter, args.allow_enabling_alpha_checkers, args.extra_arg, args.extra_arg_before, - args.quiet, args.config, args.line_filter) + args.quiet, args.config, args.line_filter, + args.use_color) proc = subprocess.Popen(invocation, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, err = proc.communicate() @@ -231,6 +252,10 @@ def main(): 'after applying fixes') parser.add_argument('-style', default='file', help='The style of reformat ' 'code after applying fixes') + parser.add_argument('-use-color', type=strtobool, nargs='?', const=True, + help='Use colors in diagnostics, overriding clang-tidy\'s' + ' default behavior. This option overrides the \'UseColor' + '\' option in .clang-tidy file, if any.') parser.add_argument('-p', dest='build_path', help='Path used to read a compile command database.') parser.add_argument('-extra-arg', dest='extra_arg', @@ -258,7 +283,8 @@ def main(): None, build_path, args.header_filter, args.allow_enabling_alpha_checkers, args.extra_arg, args.extra_arg_before, - args.quiet, args.config, args.line_filter) + args.quiet, args.config, args.line_filter, + args.use_color) invocation.append('-list-checks') invocation.append('-') if args.quiet: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits