[clang-tools-extra] [clang-tidy] Add helper for deprecated check aliases (PR #189522)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 30 19:53:47 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tidy
Author: Zeyi Xu (zeyi2)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/189522.diff
3 Files Affected:
- (modified) clang-tools-extra/clang-tidy/ClangTidyCheck.cpp (+5)
- (modified) clang-tools-extra/clang-tidy/ClangTidyCheck.h (+4)
- (modified) clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp (+70-1)
``````````diff
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;
``````````
</details>
https://github.com/llvm/llvm-project/pull/189522
More information about the cfe-commits
mailing list