-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[clang-tidy] add option to avoid "no checks enabled" error #96122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang-tidy] add option to avoid "no checks enabled" error #96122
Conversation
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.
@llvm/pr-subscribers-clang-tools-extra @llvm/pr-subscribers-clang-tidy Author: Congcong Cai (HerrCai0907) ChangesWhen clang-tidy get an empty checks, it will throw "no checks enabled" error and exit with non-zero return value. Full diff: https://github.com/llvm/llvm-project/pull/96122.diff 2 Files Affected:
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
^^^^^^^^^^
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if a reason for this parameter is not to fail wrapper scripts, then maybe run-clang-tidy.py / run-clang-tidy-diff.py should also be updated.
Both of them is fine because they only count the failed file and don't do any check about failure. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
´run-clang-tidy.pyand
clang-tidy-diff.py` should probably expose an option to enable this option via the script (maybe with an adjustment to the release notes).
if (EnabledChecks.empty() && !AllowNoChecks) { | ||
llvm::errs() << "Error: no checks enabled.\n"; | ||
llvm::cl::PrintHelpMessage(/*Hidden=*/false, /*Categorized=*/true); | ||
return 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it would be better to exit clang-tidy at this point, when there are no checks present and AllowNoChecks
is enabled. The current behavior of this PR for invoking clang-tidy
to check a file would be:
- if no checks are enabled and
AllowNoChecks
is true- continue executing clang-tidy even though no checks are enabled
I think it should be:
- if no checks are enabled
- if
AllowNoChecks
is true thenreturn 0
, else error out withreturn 1
- if
Co-authored-by: Danny Mösch <[email protected]>
// RUN: clang-tidy %s -checks='-*' --allow-no-checks | FileCheck --match-full-lines %s | ||
|
||
|
||
// CHECK: No checks enabled. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missing newline
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the same should probably be done for diff-clang-tidy.py
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Where is diff-clang-tidy.py
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I found it. It is named clang-tidy-diff.py
…i0907/llvm-project into tidy-support-empty-checks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
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. --------- Co-authored-by: Danny Mösch <[email protected]>
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. --------- Co-authored-by: Danny Mösch <[email protected]>
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.