kesyog created this revision. Herald added a subscriber: carlosgalvezp. kesyog requested review of this revision. Herald added a project: clang-tools-extra. Herald added a subscriber: cfe-commits.
D90110 <https://reviews.llvm.org/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) Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D119562 Files: clang-tools-extra/clang-tidy/tool/run-clang-tidy.py Index: clang-tools-extra/clang-tidy/tool/run-clang-tidy.py =================================================================== --- clang-tools-extra/clang-tidy/tool/run-clang-tidy.py +++ clang-tools-extra/clang-tidy/tool/run-clang-tidy.py @@ -82,15 +82,19 @@ 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: + start.append('--use-color') + elif use_color is not None: + start.append('--use-color=false') if checks: start.append('-checks=' + checks) if tmpdir is not None: @@ -168,7 +172,8 @@ 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 +236,16 @@ 'after applying fixes') parser.add_argument('-style', default='file', help='The style of reformat ' 'code after applying fixes') + color_group = parser.add_mutually_exclusive_group() + color_group.add_argument('-use-color', action='store_true', dest='use_color', + help='Use colors in diagnostics, overriding clang-tidy\'s default ' + 'behavior. This option overrides the \'UseColor\' option in' + '.clang-tidy file, if any.') + color_group.add_argument('-no-use-color', action='store_false', dest='use_color', + help='Do not use colors in diagnostics, overriding clang-tidy\'s default' + ' behavior. This option overrides the \'UseColor\' option in' + '.clang-tidy file, if any.') + parser.set_defaults(use_color=None) 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 +273,8 @@ 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:
Index: clang-tools-extra/clang-tidy/tool/run-clang-tidy.py =================================================================== --- clang-tools-extra/clang-tidy/tool/run-clang-tidy.py +++ clang-tools-extra/clang-tidy/tool/run-clang-tidy.py @@ -82,15 +82,19 @@ 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: + start.append('--use-color') + elif use_color is not None: + start.append('--use-color=false') if checks: start.append('-checks=' + checks) if tmpdir is not None: @@ -168,7 +172,8 @@ 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 +236,16 @@ 'after applying fixes') parser.add_argument('-style', default='file', help='The style of reformat ' 'code after applying fixes') + color_group = parser.add_mutually_exclusive_group() + color_group.add_argument('-use-color', action='store_true', dest='use_color', + help='Use colors in diagnostics, overriding clang-tidy\'s default ' + 'behavior. This option overrides the \'UseColor\' option in' + '.clang-tidy file, if any.') + color_group.add_argument('-no-use-color', action='store_false', dest='use_color', + help='Do not use colors in diagnostics, overriding clang-tidy\'s default' + ' behavior. This option overrides the \'UseColor\' option in' + '.clang-tidy file, if any.') + parser.set_defaults(use_color=None) 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 +273,8 @@ 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