https://github.com/HerrCai0907 updated https://github.com/llvm/llvm-project/pull/96122
>From 41993ea6903668c41eef8a4477f5914c894f7109 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Wed, 19 Jun 2024 23:20:09 +0000 Subject: [PATCH 1/8] [clang-tidy] add option to avoid "no checks enabled" error When clang-tidy get an empty checks, it will throw "no checks enabled" error and exit with non-zero return value. It make clang-tidy's wrapper program confused when in big project some files don't want to be checked and use `-checks=-*` to disable all checks. --- clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp | 12 ++++++++++-- clang-tools-extra/docs/ReleaseNotes.rst | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index 7388f20ef288e..b579aff4394c9 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -325,6 +325,14 @@ option is recognized. )"), cl::init(false), cl::cat(ClangTidyCategory)); +static cl::opt<bool> AllowEmptyCheckList("allow-empty-checks", desc(R"( +Allow empty enabled checks. This suppresses +the "no checks enabled" error when disabling +all of the checks. +)"), + cl::init(false), + cl::cat(ClangTidyCategory)); + namespace clang::tidy { static void printStats(const ClangTidyStats &Stats) { @@ -598,7 +606,7 @@ int clangTidyMain(int argc, const char **argv) { } if (ListChecks) { - if (EnabledChecks.empty()) { + if (EnabledChecks.empty() && !AllowEmptyCheckList) { llvm::errs() << "No checks enabled.\n"; return 1; } @@ -651,7 +659,7 @@ int clangTidyMain(int argc, const char **argv) { return 0; } - if (EnabledChecks.empty()) { + if (EnabledChecks.empty() && !AllowEmptyCheckList) { llvm::errs() << "Error: no checks enabled.\n"; llvm::cl::PrintHelpMessage(/*Hidden=*/false, /*Categorized=*/true); return 1; diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 3bdd735f7dcf7..54cfcafd121b6 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -125,6 +125,9 @@ Improvements to clang-tidy - Added argument `--exclude-header-filter` and config option `ExcludeHeaderFilterRegex` to exclude headers from analysis via a RegEx. +- Added argument `--allow-empty-checks` and config option `AllowEmptyCheckList` + to suppress "no checks enabled" error when disabling all of the checks. + New checks ^^^^^^^^^^ >From 9302feee8fa9d19711ad2126dddbd73c044502b0 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Thu, 20 Jun 2024 17:58:10 +0800 Subject: [PATCH 2/8] fix acc comment --- clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp | 6 +++--- clang-tools-extra/docs/ReleaseNotes.rst | 4 ++-- clang-tools-extra/docs/clang-tidy/index.rst | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index b579aff4394c9..1475816827ac4 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -325,7 +325,7 @@ option is recognized. )"), cl::init(false), cl::cat(ClangTidyCategory)); -static cl::opt<bool> AllowEmptyCheckList("allow-empty-checks", desc(R"( +static cl::opt<bool> AllowNoChecks("allow-no-checks", desc(R"( Allow empty enabled checks. This suppresses the "no checks enabled" error when disabling all of the checks. @@ -606,7 +606,7 @@ int clangTidyMain(int argc, const char **argv) { } if (ListChecks) { - if (EnabledChecks.empty() && !AllowEmptyCheckList) { + if (EnabledChecks.empty() && !AllowNoChecks) { llvm::errs() << "No checks enabled.\n"; return 1; } @@ -659,7 +659,7 @@ int clangTidyMain(int argc, const char **argv) { return 0; } - if (EnabledChecks.empty() && !AllowEmptyCheckList) { + if (EnabledChecks.empty() && !AllowNoChecks) { llvm::errs() << "Error: no checks enabled.\n"; llvm::cl::PrintHelpMessage(/*Hidden=*/false, /*Categorized=*/true); return 1; diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 54cfcafd121b6..e9a9cd47e9215 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -125,8 +125,8 @@ Improvements to clang-tidy - Added argument `--exclude-header-filter` and config option `ExcludeHeaderFilterRegex` to exclude headers from analysis via a RegEx. -- Added argument `--allow-empty-checks` and config option `AllowEmptyCheckList` - to suppress "no checks enabled" error when disabling all of the checks. +- Added argument `--allow-no-checks` to suppress "no checks enabled" error + when disabling all of the checks. New checks ^^^^^^^^^^ diff --git a/clang-tools-extra/docs/clang-tidy/index.rst b/clang-tools-extra/docs/clang-tidy/index.rst index 9ccacefa3c2c5..c8fc34c61caeb 100644 --- a/clang-tools-extra/docs/clang-tidy/index.rst +++ b/clang-tools-extra/docs/clang-tidy/index.rst @@ -240,6 +240,9 @@ An overview of all the command-line options: This option's value is appended to the value of the 'WarningsAsErrors' option in .clang-tidy file, if any. + --allow-no-checks - Allow empty enabled checks. This suppresses + the "no checks enabled" error when disabling + all of the checks. -p <build-path> is used to read a compile command database. >From 8171fb5ae9920274b5cc94bc14c72188c2c49628 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Thu, 20 Jun 2024 14:13:20 +0000 Subject: [PATCH 3/8] fix --- clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp | 6 +++++- .../test/clang-tidy/infrastructure/allow-no-checks.cpp | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index 1475816827ac4..d42dafa8ffc36 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -659,7 +659,11 @@ int clangTidyMain(int argc, const char **argv) { return 0; } - if (EnabledChecks.empty() && !AllowNoChecks) { + if (EnabledChecks.empty()) { + if (AllowNoChecks) { + llvm::outs() << "No checks enabled.\n"; + return 0; + } llvm::errs() << "Error: no checks enabled.\n"; llvm::cl::PrintHelpMessage(/*Hidden=*/false, /*Categorized=*/true); return 1; diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp new file mode 100644 index 0000000000000..61776ae17044e --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp @@ -0,0 +1,5 @@ +// RUN: not clang-tidy %s -checks='-*' +// RUN: clang-tidy %s -checks='-*' --allow-no-checks | FileCheck --match-full-lines %s + + +// CHECK: No checks enabled. \ No newline at end of file >From 78cb07b907e176fc4c16358216a31921dfdfeebb Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Thu, 20 Jun 2024 14:19:05 +0000 Subject: [PATCH 4/8] support in run-clang-tidy --- clang-tools-extra/clang-tidy/tool/run-clang-tidy.py | 9 +++++++++ 1 file changed, 9 insertions(+) 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 4dd20bec81d3b..7063a18cf9f5d 100755 --- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py +++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py @@ -107,6 +107,7 @@ def get_tidy_invocation( plugins, warnings_as_errors, exclude_header_filter, + allow_no_checks, ): """Gets a command line for clang-tidy.""" start = [clang_tidy_binary] @@ -147,6 +148,8 @@ def get_tidy_invocation( start.append("-load=" + plugin) if warnings_as_errors: start.append("--warnings-as-errors=" + warnings_as_errors) + if allow_no_checks: + start.append("--allow-no-checks") start.append(f) return start @@ -402,6 +405,11 @@ def main(): default=None, help="Upgrades warnings to errors. Same format as '-checks'", ) + parser.add_argument( + "-allow-no-checks", + action="store_true", + help="Allow empty enabled checks.", + ) args = parser.parse_args() db_path = "compile_commands.json" @@ -463,6 +471,7 @@ def main(): args.plugins, args.warnings_as_errors, args.exclude_header_filter, + args.allow_no_checks, ) invocation.append("-list-checks") invocation.append("-") >From 586283ebf94af4862af514251372ad6a80d1e5a7 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcong....@bmw.com> Date: Sat, 22 Jun 2024 09:22:55 +0800 Subject: [PATCH 5/8] fix --- clang-tools-extra/clang-tidy/tool/run-clang-tidy.py | 1 + 1 file changed, 1 insertion(+) 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 7063a18cf9f5d..c9379586682d9 100755 --- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py +++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py @@ -235,6 +235,7 @@ def run_tidy(args, clang_tidy_binary, tmpdir, build_path, queue, lock, failed_fi args.plugins, args.warnings_as_errors, args.exclude_header_filter, + args.allow_no_checks, ) proc = subprocess.Popen( >From fb7b211a50a81d17689831f56629fd6daf894920 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Sun, 23 Jun 2024 15:05:28 +0800 Subject: [PATCH 6/8] Update clang-tools-extra/docs/ReleaseNotes.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Danny Mösch <danny.moe...@icloud.com> --- clang-tools-extra/docs/ReleaseNotes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 2a2eabe575b0b..39c78e66c6cab 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -126,7 +126,7 @@ Improvements to clang-tidy to exclude headers from analysis via a RegEx. - Added argument `--allow-no-checks` to suppress "no checks enabled" error - when disabling all of the checks. + when disabling all of the checks by `--checks='-*'`. New checks ^^^^^^^^^^ >From cd9077aa3dc4617832ce0435bd2e7f5da59f0f16 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcong....@bmw.com> Date: Mon, 24 Jun 2024 20:59:11 +0800 Subject: [PATCH 7/8] new line --- .../test/clang-tidy/infrastructure/allow-no-checks.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp index 61776ae17044e..a1f059b92384d 100644 --- a/clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp +++ b/clang-tools-extra/test/clang-tidy/infrastructure/allow-no-checks.cpp @@ -1,5 +1,4 @@ // RUN: not clang-tidy %s -checks='-*' // RUN: clang-tidy %s -checks='-*' --allow-no-checks | FileCheck --match-full-lines %s - -// CHECK: No checks enabled. \ No newline at end of file +// CHECK: No checks enabled. >From d70e54daa6612ca5c49eb0163f2edf4e56d73089 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcong....@bmw.com> Date: Mon, 24 Jun 2024 21:02:25 +0800 Subject: [PATCH 8/8] add option in clang-tidy-diff.py --- clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py index b048460abf2fc..62cb4297c50f7 100755 --- a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py +++ b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py @@ -229,6 +229,11 @@ def main(): default=[], help="Load the specified plugin in clang-tidy.", ) + parser.add_argument( + "-allow-no-checks", + action="store_true", + help="Allow empty enabled checks.", + ) clang_tidy_args = [] argv = sys.argv[1:] @@ -327,6 +332,8 @@ def main(): common_clang_tidy_args.append("-p=%s" % args.build_path) if args.use_color: common_clang_tidy_args.append("--use-color") + if args.allow_no_checks: + common_clang_tidy_args.append("--allow-no-checks") for arg in args.extra_arg: common_clang_tidy_args.append("-extra-arg=%s" % arg) for arg in args.extra_arg_before: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits