https://github.com/zeyi2 updated https://github.com/llvm/llvm-project/pull/189522
>From 2d64b22624c32e88a1c4fb719518e0a300003426 Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Tue, 31 Mar 2026 10:52:58 +0800 Subject: [PATCH 1/2] [clang-tidy] Add helper for deprecated check aliases --- .../clang-tidy/ClangTidyCheck.cpp | 5 ++ clang-tools-extra/clang-tidy/ClangTidyCheck.h | 4 ++ .../clang-tidy/ClangTidyOptionsTest.cpp | 71 ++++++++++++++++++- 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp index 30ba36737571a..6d9b27b03dfa8 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -46,6 +46,11 @@ void ClangTidyCheck::run(const ast_matchers::MatchFinder::MatchResult &Result) { check(Result); } +bool ClangTidyCheck::isDeprecatedAlias(StringRef CanonicalName) const { + return Context->isCheckEnabled(CheckName) && + !Context->isCheckEnabled(CanonicalName); +} + ClangTidyCheck::OptionsView::OptionsView( StringRef CheckName, const ClangTidyOptions::OptionMap &CheckOptions, ClangTidyContext *Context) diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h b/clang-tools-extra/clang-tidy/ClangTidyCheck.h index 905e419cdf0ca..1641c10b75a07 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h @@ -497,6 +497,10 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback { return Context->areDiagsSelfContained(); } StringRef getID() const override { return CheckName; } + + /// Returns true when this check instance is running under a deprecated + /// name and the user should be prompted to migrate to CanonicalName. + bool isDeprecatedAlias(StringRef CanonicalName) const; }; /// Read a named option from the ``Context`` and parse it as a bool. diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp index aee3313f2263b..f6b5a2031b95e 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp @@ -298,7 +298,9 @@ TEST(ParseConfiguration, CollectDiags) { namespace { class TestCheck : public ClangTidyCheck { public: - TestCheck(ClangTidyContext *Context) : ClangTidyCheck("test", Context) {} + TestCheck(ClangTidyContext *Context) : TestCheck("test", Context) {} + TestCheck(StringRef Name, ClangTidyContext *Context) + : ClangTidyCheck(Name, Context) {} template <typename... Args> auto getLocal(Args &&... Arguments) { return Options.get(std::forward<Args>(Arguments)...); @@ -317,6 +319,10 @@ class TestCheck : public ClangTidyCheck { auto getIntGlobal(Args &&... Arguments) { return Options.getLocalOrGlobal<IntType>(std::forward<Args>(Arguments)...); } + + bool usesDeprecatedAlias(StringRef CanonicalName) const { + return isDeprecatedAlias(CanonicalName); + } }; #define CHECK_VAL(Value, Expected) \ @@ -359,6 +365,69 @@ TEST(CheckOptionsValidation, MissingOptions) { EXPECT_TRUE(DiagConsumer.take().empty()); } +TEST(CheckOptionsValidation, DeprecatedAliasHelper) { + ClangTidyOptions Options; + Options.Checks = "performance-faster-string-find"; + + ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( + ClangTidyGlobalOptions(), Options)); + TestCheck TestCheck("performance-faster-string-find", &Context); + + EXPECT_TRUE(TestCheck.usesDeprecatedAlias( + "performance-prefer-single-char-overloads")); +} + +TEST(CheckOptionsValidation, DeprecatedAliasHelperDisabledByCanonicalCheck) { + ClangTidyOptions Options; + Options.Checks = + "performance-faster-string-find,performance-prefer-single-char-overloads"; + + ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( + ClangTidyGlobalOptions(), Options)); + TestCheck TestCheck("performance-faster-string-find", &Context); + + EXPECT_FALSE(TestCheck.usesDeprecatedAlias( + "performance-prefer-single-char-overloads")); +} + +TEST(CheckOptionsValidation, DeprecatedAliasHelperEnabledByWildcardAlias) { + ClangTidyOptions Options; + Options.Checks = "performance-faster*"; + + ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( + ClangTidyGlobalOptions(), Options)); + TestCheck TestCheck("performance-faster-string-find", &Context); + + EXPECT_TRUE(TestCheck.usesDeprecatedAlias( + "performance-prefer-single-char-overloads")); +} + +TEST(CheckOptionsValidation, + DeprecatedAliasHelperDisabledByWildcardAliasAndCanonicalCheck) { + ClangTidyOptions Options; + Options.Checks = + "performance-faster*,performance-prefer-single-char-overloads"; + + ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( + ClangTidyGlobalOptions(), Options)); + TestCheck TestCheck("performance-faster-string-find", &Context); + + EXPECT_FALSE(TestCheck.usesDeprecatedAlias( + "performance-prefer-single-char-overloads")); +} + +TEST(CheckOptionsValidation, DeprecatedAliasHelperDisabledByWildcard) { + ClangTidyOptions Options; + Options.Checks = "performance-*"; + + ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( + ClangTidyGlobalOptions(), Options)); + TestCheck TestCheck("performance-faster-string-find", &Context); + + EXPECT_FALSE(TestCheck.usesDeprecatedAlias( + "performance-prefer-single-char-overloads")); +} + TEST(CheckOptionsValidation, ValidIntOptions) { ClangTidyOptions Options; auto &CheckOptions = Options.CheckOptions; >From 128d43065648bff917abbc35a48ab6982a1b521c Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Sat, 4 Apr 2026 12:48:52 +0800 Subject: [PATCH 2/2] better? --- .../clang-tidy/ClangTidyCheck.cpp | 5 -- clang-tools-extra/clang-tidy/ClangTidyCheck.h | 4 -- .../clang-tidy/utils/CheckUtils.h | 19 +++++++ .../clang-tidy/ClangTidyOptionsTest.cpp | 49 +++++++++---------- 4 files changed, 41 insertions(+), 36 deletions(-) create mode 100644 clang-tools-extra/clang-tidy/utils/CheckUtils.h diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp index 6d9b27b03dfa8..30ba36737571a 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -46,11 +46,6 @@ void ClangTidyCheck::run(const ast_matchers::MatchFinder::MatchResult &Result) { check(Result); } -bool ClangTidyCheck::isDeprecatedAlias(StringRef CanonicalName) const { - return Context->isCheckEnabled(CheckName) && - !Context->isCheckEnabled(CanonicalName); -} - ClangTidyCheck::OptionsView::OptionsView( StringRef CheckName, const ClangTidyOptions::OptionMap &CheckOptions, ClangTidyContext *Context) diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h b/clang-tools-extra/clang-tidy/ClangTidyCheck.h index 1641c10b75a07..905e419cdf0ca 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h @@ -497,10 +497,6 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback { return Context->areDiagsSelfContained(); } StringRef getID() const override { return CheckName; } - - /// Returns true when this check instance is running under a deprecated - /// name and the user should be prompted to migrate to CanonicalName. - bool isDeprecatedAlias(StringRef CanonicalName) const; }; /// Read a named option from the ``Context`` and parse it as a bool. diff --git a/clang-tools-extra/clang-tidy/utils/CheckUtils.h b/clang-tools-extra/clang-tidy/utils/CheckUtils.h new file mode 100644 index 0000000000000..e7809debcc925 --- /dev/null +++ b/clang-tools-extra/clang-tidy/utils/CheckUtils.h @@ -0,0 +1,19 @@ +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_CHECKUTILS_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_CHECKUTILS_H + +#include "../ClangTidyDiagnosticConsumer.h" + +namespace clang::tidy::utils { + +/// Returns true when a check is running under a deprecated name and the user +/// should be prompted to migrate to CanonicalName. +inline bool isDeprecatedAlias(const ClangTidyContext &Context, + StringRef DeprecatedName, + StringRef CanonicalName) { + return Context.isCheckEnabled(DeprecatedName) && + !Context.isCheckEnabled(CanonicalName); +} + +} // namespace clang::tidy::utils + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_CHECKUTILS_H diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp index f6b5a2031b95e..af1da978741b9 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp @@ -1,6 +1,7 @@ #include "ClangTidyOptions.h" #include "ClangTidyCheck.h" #include "ClangTidyDiagnosticConsumer.h" +#include "utils/CheckUtils.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/ScopedPrinter.h" #include "llvm/Testing/Annotations/Annotations.h" @@ -298,9 +299,7 @@ TEST(ParseConfiguration, CollectDiags) { namespace { class TestCheck : public ClangTidyCheck { public: - TestCheck(ClangTidyContext *Context) : TestCheck("test", Context) {} - TestCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} + TestCheck(ClangTidyContext *Context) : ClangTidyCheck("test", Context) {} template <typename... Args> auto getLocal(Args &&... Arguments) { return Options.get(std::forward<Args>(Arguments)...); @@ -319,10 +318,6 @@ class TestCheck : public ClangTidyCheck { auto getIntGlobal(Args &&... Arguments) { return Options.getLocalOrGlobal<IntType>(std::forward<Args>(Arguments)...); } - - bool usesDeprecatedAlias(StringRef CanonicalName) const { - return isDeprecatedAlias(CanonicalName); - } }; #define CHECK_VAL(Value, Expected) \ @@ -365,67 +360,67 @@ TEST(CheckOptionsValidation, MissingOptions) { EXPECT_TRUE(DiagConsumer.take().empty()); } -TEST(CheckOptionsValidation, DeprecatedAliasHelper) { +TEST(CheckOptionsValidation, DeprecatedAliasUtils) { ClangTidyOptions Options; Options.Checks = "performance-faster-string-find"; ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); - TestCheck TestCheck("performance-faster-string-find", &Context); - EXPECT_TRUE(TestCheck.usesDeprecatedAlias( - "performance-prefer-single-char-overloads")); + EXPECT_TRUE( + utils::isDeprecatedAlias(Context, "performance-faster-string-find", + "performance-prefer-single-char-overloads")); } -TEST(CheckOptionsValidation, DeprecatedAliasHelperDisabledByCanonicalCheck) { +TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByCanonicalCheck) { ClangTidyOptions Options; Options.Checks = "performance-faster-string-find,performance-prefer-single-char-overloads"; ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); - TestCheck TestCheck("performance-faster-string-find", &Context); - EXPECT_FALSE(TestCheck.usesDeprecatedAlias( - "performance-prefer-single-char-overloads")); + EXPECT_FALSE( + utils::isDeprecatedAlias(Context, "performance-faster-string-find", + "performance-prefer-single-char-overloads")); } -TEST(CheckOptionsValidation, DeprecatedAliasHelperEnabledByWildcardAlias) { +TEST(CheckOptionsValidation, DeprecatedAliasUtilsEnabledByWildcardAlias) { ClangTidyOptions Options; Options.Checks = "performance-faster*"; ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); - TestCheck TestCheck("performance-faster-string-find", &Context); - EXPECT_TRUE(TestCheck.usesDeprecatedAlias( - "performance-prefer-single-char-overloads")); + EXPECT_TRUE( + utils::isDeprecatedAlias(Context, "performance-faster-string-find", + "performance-prefer-single-char-overloads")); } TEST(CheckOptionsValidation, - DeprecatedAliasHelperDisabledByWildcardAliasAndCanonicalCheck) { + DeprecatedAliasUtilsDisabledByWildcardAliasAndCanonicalCheck) { ClangTidyOptions Options; Options.Checks = "performance-faster*,performance-prefer-single-char-overloads"; ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); - TestCheck TestCheck("performance-faster-string-find", &Context); - EXPECT_FALSE(TestCheck.usesDeprecatedAlias( - "performance-prefer-single-char-overloads")); + EXPECT_FALSE( + utils::isDeprecatedAlias(Context, "performance-faster-string-find", + "performance-prefer-single-char-overloads")); } -TEST(CheckOptionsValidation, DeprecatedAliasHelperDisabledByWildcard) { +TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByWildcard) { ClangTidyOptions Options; Options.Checks = "performance-*"; ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); - TestCheck TestCheck("performance-faster-string-find", &Context); - EXPECT_FALSE(TestCheck.usesDeprecatedAlias( - "performance-prefer-single-char-overloads")); + EXPECT_FALSE( + utils::isDeprecatedAlias(Context, "performance-faster-string-find", + "performance-prefer-single-char-overloads")); } TEST(CheckOptionsValidation, ValidIntOptions) { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
