[clang-tools-extra] b56aeba - [clang-tidy] Add filtering of check options by enabled checks in '--dump-config' (#147142)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 13 13:44:34 PDT 2025
Author: Baranov Victor
Date: 2025-07-13T23:44:30+03:00
New Revision: b56aebaf82f250ac35d18bcb4d4bf6806af91f49
URL: https://github.com/llvm/llvm-project/commit/b56aebaf82f250ac35d18bcb4d4bf6806af91f49
DIFF: https://github.com/llvm/llvm-project/commit/b56aebaf82f250ac35d18bcb4d4bf6806af91f49.diff
LOG: [clang-tidy] Add filtering of check options by enabled checks in '--dump-config' (#147142)
Added function to filter out `CheckOptions` that come from
`ClangTidyOptions::getDefaults()`, but does not have a corresponding
check enabled in the `Checks` configuration.
Fixes https://github.com/llvm/llvm-project/issues/146693.
Added:
clang-tools-extra/test/clang-tidy/infrastructure/dump-config-filtering.cpp
Modified:
clang-tools-extra/clang-tidy/ClangTidy.cpp
clang-tools-extra/clang-tidy/ClangTidy.h
clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
clang-tools-extra/docs/ReleaseNotes.rst
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp
index ad59b90cebb95..e84be0461f280 100644
--- a/clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -505,6 +505,20 @@ getCheckNames(const ClangTidyOptions &Options,
return Factory.getCheckNames();
}
+void filterCheckOptions(ClangTidyOptions &Options,
+ const std::vector<std::string> &EnabledChecks) {
+ ClangTidyOptions::OptionMap FilteredOptions;
+ for (const auto &[OptionName, Value] : Options.CheckOptions) {
+ const size_t CheckNameEndPos = OptionName.find('.');
+ if (CheckNameEndPos == StringRef::npos)
+ continue;
+ const StringRef CheckName = OptionName.substr(0, CheckNameEndPos);
+ if (llvm::binary_search(EnabledChecks, CheckName))
+ FilteredOptions[OptionName] = Value;
+ }
+ Options.CheckOptions = std::move(FilteredOptions);
+}
+
ClangTidyOptions::OptionMap
getCheckOptions(const ClangTidyOptions &Options,
bool AllowEnablingAnalyzerAlphaCheckers) {
diff --git a/clang-tools-extra/clang-tidy/ClangTidy.h b/clang-tools-extra/clang-tidy/ClangTidy.h
index 4ffd49f6ebf50..454261bbd6840 100644
--- a/clang-tools-extra/clang-tidy/ClangTidy.h
+++ b/clang-tools-extra/clang-tidy/ClangTidy.h
@@ -76,6 +76,11 @@ ClangTidyOptions::OptionMap
getCheckOptions(const ClangTidyOptions &Options,
bool AllowEnablingAnalyzerAlphaCheckers);
+/// Filters CheckOptions in \p Options to only include options specified in
+/// the \p EnabledChecks which is a sorted vector.
+void filterCheckOptions(ClangTidyOptions &Options,
+ const std::vector<std::string> &EnabledChecks);
+
/// Run a set of clang-tidy checks on a set of files.
///
/// \param EnableCheckProfile If provided, it enables check profile collection
diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
index 4336c723bd7cd..4de1caec5ec8c 100644
--- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
+++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
@@ -659,9 +659,10 @@ int clangTidyMain(int argc, const char **argv) {
if (DumpConfig) {
EffectiveOptions.CheckOptions =
getCheckOptions(EffectiveOptions, AllowEnablingAnalyzerAlphaCheckers);
- llvm::outs() << configurationAsText(ClangTidyOptions::getDefaults().merge(
- EffectiveOptions, 0))
- << "\n";
+ ClangTidyOptions OptionsToDump =
+ ClangTidyOptions::getDefaults().merge(EffectiveOptions, 0);
+ filterCheckOptions(OptionsToDump, EnabledChecks);
+ llvm::outs() << configurationAsText(OptionsToDump) << "\n";
return 0;
}
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index ee7329fa8610b..36a41b4bdf42d 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -108,6 +108,9 @@ Improvements to clang-tidy
- Improved :program:`clang-tidy-
diff .py` script. Add the `-warnings-as-errors`
argument to treat warnings as errors.
+- Improved :program:`clang-tidy` to show `CheckOptions` only for checks enabled
+ in `Checks` when running ``--dump-config``.
+
- Fixed bug in :program:`clang-tidy` by which `HeaderFilterRegex` did not take
effect when passed via the `.clang-tidy` file.
diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/dump-config-filtering.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/dump-config-filtering.cpp
new file mode 100644
index 0000000000000..f22ec7edb1775
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/infrastructure/dump-config-filtering.cpp
@@ -0,0 +1,12 @@
+// RUN: clang-tidy -checks='-*,misc-unused-parameters' -dump-config %s -- 2>/dev/null | FileCheck %s --check-prefix=CHECK
+// RUN: clang-tidy -checks='-*' -dump-config %s -- 2>/dev/null | FileCheck %s --check-prefix=CHECK-DISABLED
+
+// CHECK: CheckOptions:
+// CHECK-NEXT: misc-unused-parameters.IgnoreVirtual: 'false'
+// CHECK-NEXT: misc-unused-parameters.StrictMode: 'false'
+// CHECK-NEXT: SystemHeaders: false
+
+// CHECK-DISABLED: CheckOptions: {}
+// CHECK-DISABLED-NEXT: SystemHeaders: false
+
+int main() { return 0; }
More information about the cfe-commits
mailing list