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/5] [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/5] 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) { >From d8baf651cdf070d2036471bd7a091a05abe62dcc Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Sun, 12 Apr 2026 23:58:07 +0800 Subject: [PATCH 3/5] better --- .../fuchsia/TemporaryObjectsCheck.cpp | 13 +++ .../fuchsia/TemporaryObjectsCheck.h | 4 +- .../clang-tidy/utils/CheckUtils.h | 23 ++++-- .../temporary-objects-deprecated-alias.cpp | 20 +++++ .../clang-tidy/ClangTidyOptionsTest.cpp | 82 +++++++++++++++---- 5 files changed, 116 insertions(+), 26 deletions(-) create mode 100644 clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp diff --git a/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.cpp index 3acd5fb555532..2fa83b41869ea 100644 --- a/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.cpp +++ b/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "TemporaryObjectsCheck.h" +#include "../utils/CheckUtils.h" #include "../utils/OptionsUtils.h" #include "clang/AST/ASTContext.h" #include "clang/ASTMatchers/ASTMatchFinder.h" @@ -19,6 +20,9 @@ namespace clang::tidy::fuchsia { namespace { +constexpr llvm::StringLiteral DeprecatedCheckName = "zircon-temporary-objects"; +constexpr llvm::StringLiteral CanonicalCheckName = "fuchsia-temporary-objects"; + AST_MATCHER_P(CXXRecordDecl, matchesAnyName, ArrayRef<StringRef>, Names) { const std::string QualifiedName = Node.getQualifiedNameAsString(); return llvm::is_contained(Names, QualifiedName); @@ -26,6 +30,15 @@ AST_MATCHER_P(CXXRecordDecl, matchesAnyName, ArrayRef<StringRef>, Names) { } // namespace +TemporaryObjectsCheck::TemporaryObjectsCheck(StringRef Name, + ClangTidyContext *Context) + : ClangTidyCheck(Name, Context), + Names(utils::options::parseStringList(Options.get("Names", ""))) { + if (Name == DeprecatedCheckName) + utils::diagDeprecatedCheckAlias(*this, *Context, DeprecatedCheckName, + CanonicalCheckName); +} + void TemporaryObjectsCheck::registerMatchers(MatchFinder *Finder) { // Matcher for default constructors. Finder->addMatcher( diff --git a/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.h b/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.h index 805dae4d577d8..74ab2a1be401c 100644 --- a/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.h +++ b/clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.h @@ -21,9 +21,7 @@ namespace clang::tidy::fuchsia { /// https://clang.llvm.org/extra/clang-tidy/checks/fuchsia/temporary-objects.html class TemporaryObjectsCheck : public ClangTidyCheck { public: - TemporaryObjectsCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - Names(utils::options::parseStringList(Options.get("Names", ""))) {} + TemporaryObjectsCheck(StringRef Name, ClangTidyContext *Context); bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { return LangOpts.CPlusPlus; } diff --git a/clang-tools-extra/clang-tidy/utils/CheckUtils.h b/clang-tools-extra/clang-tidy/utils/CheckUtils.h index e7809debcc925..2830ade597e14 100644 --- a/clang-tools-extra/clang-tidy/utils/CheckUtils.h +++ b/clang-tools-extra/clang-tidy/utils/CheckUtils.h @@ -1,17 +1,24 @@ #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_CHECKUTILS_H #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_CHECKUTILS_H -#include "../ClangTidyDiagnosticConsumer.h" +#include "../ClangTidyCheck.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); +/// Emits a configuration diagnostic when a deprecated check alias is enabled +/// and the canonical check name is not also enabled. +inline void diagDeprecatedCheckAlias(ClangTidyCheck &Check, + const ClangTidyContext &Context, + StringRef DeprecatedName, + StringRef CanonicalName) { + if (!Context.isCheckEnabled(DeprecatedName) || + Context.isCheckEnabled(CanonicalName)) + return; + + Check.configurationDiag( + "%0 is deprecated and will be removed in a future release; " + "consider using %1 instead") + << DeprecatedName << CanonicalName; } } // namespace clang::tidy::utils diff --git a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp new file mode 100644 index 0000000000000..725dc22d00bc0 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp @@ -0,0 +1,20 @@ +// RUN: clang-tidy %s -checks='-*,zircon-temporary-objects' \ +// RUN: -config="{CheckOptions: {zircon-temporary-objects.Names: 'Foo'}}" \ +// RUN: -header-filter='.*' -- 2>&1 | FileCheck %s --check-prefix=CHECK-OLD +// RUN: clang-tidy %s -checks='-*,zircon-temporary-objects,fuchsia-temporary-objects' \ +// RUN: -config="{CheckOptions: {zircon-temporary-objects.Names: 'Foo', \ +// RUN: fuchsia-temporary-objects.Names: 'Foo'}}" \ +// RUN: -header-filter='.*' -- 2>&1 | FileCheck %s --check-prefix=CHECK-BOTH \ +// RUN: -implicit-check-not='deprecated and will be removed in a future release' + +class Foo { +public: + Foo() = default; +}; + +void f() { + Foo(); + // CHECK-OLD: warning: zircon-temporary-objects is deprecated and will be removed in a future release; consider using fuchsia-temporary-objects instead [clang-tidy-config] + // CHECK-OLD: :[[@LINE-2]]:3: warning: creating a temporary object of type 'Foo' is prohibited [zircon-temporary-objects] + // CHECK-BOTH: :[[@LINE-3]]:3: warning: creating a temporary object of type 'Foo' is prohibited +} diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp index af1da978741b9..3e87d40d21a36 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp @@ -366,10 +366,24 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtils) { ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); + ClangTidyDiagnosticConsumer DiagConsumer(Context); + auto DiagOpts = std::make_unique<DiagnosticOptions>(); + DiagnosticsEngine DE(DiagnosticIDs::create(), *DiagOpts, &DiagConsumer, + false); + Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - EXPECT_TRUE( - utils::isDeprecatedAlias(Context, "performance-faster-string-find", - "performance-prefer-single-char-overloads")); + TestCheck TestCheck("performance-faster-string-find", &Context); + utils::diagDeprecatedCheckAlias(TestCheck, Context, + "performance-faster-string-find", + "performance-prefer-single-char-overloads"); + + EXPECT_THAT( + DiagConsumer.take(), + ElementsAre(AllOf( + ToolDiagMessage("performance-faster-string-find is deprecated and " + "will be removed in a future release; consider using " + "performance-prefer-single-char-overloads instead"), + ToolDiagLevel(Warning)))); } TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByCanonicalCheck) { @@ -379,10 +393,18 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByCanonicalCheck) { ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); + ClangTidyDiagnosticConsumer DiagConsumer(Context); + auto DiagOpts = std::make_unique<DiagnosticOptions>(); + DiagnosticsEngine DE(DiagnosticIDs::create(), *DiagOpts, &DiagConsumer, + false); + Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - EXPECT_FALSE( - utils::isDeprecatedAlias(Context, "performance-faster-string-find", - "performance-prefer-single-char-overloads")); + TestCheck TestCheck("performance-faster-string-find", &Context); + utils::diagDeprecatedCheckAlias(TestCheck, Context, + "performance-faster-string-find", + "performance-prefer-single-char-overloads"); + + EXPECT_TRUE(DiagConsumer.take().empty()); } TEST(CheckOptionsValidation, DeprecatedAliasUtilsEnabledByWildcardAlias) { @@ -391,10 +413,24 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtilsEnabledByWildcardAlias) { ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); + ClangTidyDiagnosticConsumer DiagConsumer(Context); + auto DiagOpts = std::make_unique<DiagnosticOptions>(); + DiagnosticsEngine DE(DiagnosticIDs::create(), *DiagOpts, &DiagConsumer, + false); + Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - EXPECT_TRUE( - utils::isDeprecatedAlias(Context, "performance-faster-string-find", - "performance-prefer-single-char-overloads")); + TestCheck TestCheck("performance-faster-string-find", &Context); + utils::diagDeprecatedCheckAlias(TestCheck, Context, + "performance-faster-string-find", + "performance-prefer-single-char-overloads"); + + EXPECT_THAT( + DiagConsumer.take(), + ElementsAre(AllOf( + ToolDiagMessage("performance-faster-string-find is deprecated and " + "will be removed in a future release; consider using " + "performance-prefer-single-char-overloads instead"), + ToolDiagLevel(Warning)))); } TEST(CheckOptionsValidation, @@ -405,10 +441,18 @@ TEST(CheckOptionsValidation, ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); + ClangTidyDiagnosticConsumer DiagConsumer(Context); + auto DiagOpts = std::make_unique<DiagnosticOptions>(); + DiagnosticsEngine DE(DiagnosticIDs::create(), *DiagOpts, &DiagConsumer, + false); + Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - EXPECT_FALSE( - utils::isDeprecatedAlias(Context, "performance-faster-string-find", - "performance-prefer-single-char-overloads")); + TestCheck TestCheck("performance-faster-string-find", &Context); + utils::diagDeprecatedCheckAlias(TestCheck, Context, + "performance-faster-string-find", + "performance-prefer-single-char-overloads"); + + EXPECT_TRUE(DiagConsumer.take().empty()); } TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByWildcard) { @@ -417,10 +461,18 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByWildcard) { ClangTidyContext Context(std::make_unique<DefaultOptionsProvider>( ClangTidyGlobalOptions(), Options)); + ClangTidyDiagnosticConsumer DiagConsumer(Context); + auto DiagOpts = std::make_unique<DiagnosticOptions>(); + DiagnosticsEngine DE(DiagnosticIDs::create(), *DiagOpts, &DiagConsumer, + false); + Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - EXPECT_FALSE( - utils::isDeprecatedAlias(Context, "performance-faster-string-find", - "performance-prefer-single-char-overloads")); + TestCheck TestCheck("performance-faster-string-find", &Context); + utils::diagDeprecatedCheckAlias(TestCheck, Context, + "performance-faster-string-find", + "performance-prefer-single-char-overloads"); + + EXPECT_TRUE(DiagConsumer.take().empty()); } TEST(CheckOptionsValidation, ValidIntOptions) { >From e9c9c2896332f7ad42c73778bf17459bfc036f63 Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Mon, 13 Apr 2026 00:04:28 +0800 Subject: [PATCH 4/5] fixup --- .../unittests/clang-tidy/ClangTidyOptionsTest.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp index 3e87d40d21a36..2fe48efeeeb6e 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp @@ -372,7 +372,7 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtils) { false); Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - TestCheck TestCheck("performance-faster-string-find", &Context); + TestCheck TestCheck(&Context); utils::diagDeprecatedCheckAlias(TestCheck, Context, "performance-faster-string-find", "performance-prefer-single-char-overloads"); @@ -399,7 +399,7 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByCanonicalCheck) { false); Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - TestCheck TestCheck("performance-faster-string-find", &Context); + TestCheck TestCheck(&Context); utils::diagDeprecatedCheckAlias(TestCheck, Context, "performance-faster-string-find", "performance-prefer-single-char-overloads"); @@ -419,7 +419,7 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtilsEnabledByWildcardAlias) { false); Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - TestCheck TestCheck("performance-faster-string-find", &Context); + TestCheck TestCheck(&Context); utils::diagDeprecatedCheckAlias(TestCheck, Context, "performance-faster-string-find", "performance-prefer-single-char-overloads"); @@ -447,7 +447,7 @@ TEST(CheckOptionsValidation, false); Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - TestCheck TestCheck("performance-faster-string-find", &Context); + TestCheck TestCheck(&Context); utils::diagDeprecatedCheckAlias(TestCheck, Context, "performance-faster-string-find", "performance-prefer-single-char-overloads"); @@ -467,7 +467,7 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByWildcard) { false); Context.setDiagnosticsEngine(std::move(DiagOpts), &DE); - TestCheck TestCheck("performance-faster-string-find", &Context); + TestCheck TestCheck(&Context); utils::diagDeprecatedCheckAlias(TestCheck, Context, "performance-faster-string-find", "performance-prefer-single-char-overloads"); >From 04ba59b96f758dfa1754b87494df6f4cb387a591 Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Mon, 13 Apr 2026 14:44:39 +0800 Subject: [PATCH 5/5] fix tests --- .../temporary-objects-deprecated-alias.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp index 725dc22d00bc0..fae5f6a1b3c04 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/fuchsia/temporary-objects-deprecated-alias.cpp @@ -1,11 +1,9 @@ -// RUN: clang-tidy %s -checks='-*,zircon-temporary-objects' \ -// RUN: -config="{CheckOptions: {zircon-temporary-objects.Names: 'Foo'}}" \ -// RUN: -header-filter='.*' -- 2>&1 | FileCheck %s --check-prefix=CHECK-OLD -// RUN: clang-tidy %s -checks='-*,zircon-temporary-objects,fuchsia-temporary-objects' \ +// RUN: %check_clang_tidy %s zircon-temporary-objects %t -- \ +// RUN: -config="{CheckOptions: {zircon-temporary-objects.Names: 'Foo'}}" +// RUN: %check_clang_tidy -check-suffix=BOTH %s \ +// RUN: zircon-temporary-objects,fuchsia-temporary-objects %t -- \ // RUN: -config="{CheckOptions: {zircon-temporary-objects.Names: 'Foo', \ -// RUN: fuchsia-temporary-objects.Names: 'Foo'}}" \ -// RUN: -header-filter='.*' -- 2>&1 | FileCheck %s --check-prefix=CHECK-BOTH \ -// RUN: -implicit-check-not='deprecated and will be removed in a future release' +// RUN: fuchsia-temporary-objects.Names: 'Foo'}}" class Foo { public: @@ -14,7 +12,7 @@ class Foo { void f() { Foo(); - // CHECK-OLD: warning: zircon-temporary-objects is deprecated and will be removed in a future release; consider using fuchsia-temporary-objects instead [clang-tidy-config] - // CHECK-OLD: :[[@LINE-2]]:3: warning: creating a temporary object of type 'Foo' is prohibited [zircon-temporary-objects] - // CHECK-BOTH: :[[@LINE-3]]:3: warning: creating a temporary object of type 'Foo' is prohibited + // CHECK-MESSAGES: warning: zircon-temporary-objects is deprecated and will be removed in a future release; consider using fuchsia-temporary-objects instead [clang-tidy-config] + // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: creating a temporary object of type 'Foo' is prohibited [zircon-temporary-objects] + // CHECK-MESSAGES-BOTH: :[[@LINE-3]]:3: warning: creating a temporary object of type 'Foo' is prohibited } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
