[clang-tools-extra] [clang-tidy] Emit warning when user is using deprecated `zircon` checks (PR #189522)
Zeyi Xu via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 13 05:34:07 PDT 2026
https://github.com/zeyi2 updated https://github.com/llvm/llvm-project/pull/189522
>From 2d64b22624c32e88a1c4fb719518e0a300003426 Mon Sep 17 00:00:00 2001
From: mtx <mitchell.xu2 at gmail.com>
Date: Tue, 31 Mar 2026 10:52:58 +0800
Subject: [PATCH 1/6] [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 <mitchell.xu2 at gmail.com>
Date: Sat, 4 Apr 2026 12:48:52 +0800
Subject: [PATCH 2/6] 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 <mitchell.xu2 at gmail.com>
Date: Sun, 12 Apr 2026 23:58:07 +0800
Subject: [PATCH 3/6] 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 <mitchell.xu2 at gmail.com>
Date: Mon, 13 Apr 2026 00:04:28 +0800
Subject: [PATCH 4/6] 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 <mitchell.xu2 at gmail.com>
Date: Mon, 13 Apr 2026 14:44:39 +0800
Subject: [PATCH 5/6] 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
}
>From 88ee146939f4412a7e572e9595d67e8dad87eea8 Mon Sep 17 00:00:00 2001
From: mtx <mitchell.xu2 at gmail.com>
Date: Mon, 13 Apr 2026 20:33:33 +0800
Subject: [PATCH 6/6] better
---
.../clang-tidy/utils/CheckUtils.h | 4 ++--
.../temporary-objects-deprecated-alias.cpp | 2 +-
.../clang-tidy/ClangTidyOptionsTest.cpp | 22 ++++++++++---------
3 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/utils/CheckUtils.h b/clang-tools-extra/clang-tidy/utils/CheckUtils.h
index 2830ade597e14..af4821ea13520 100644
--- a/clang-tools-extra/clang-tidy/utils/CheckUtils.h
+++ b/clang-tools-extra/clang-tidy/utils/CheckUtils.h
@@ -16,8 +16,8 @@ inline void diagDeprecatedCheckAlias(ClangTidyCheck &Check,
return;
Check.configurationDiag(
- "%0 is deprecated and will be removed in a future release; "
- "consider using %1 instead")
+ "'%0' check is deprecated and will be removed in a future release; "
+ "consider using '%1' instead")
<< DeprecatedName << CanonicalName;
}
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 fae5f6a1b3c04..301cae523bf4e 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
@@ -12,7 +12,7 @@ class Foo {
void f() {
Foo();
- // 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: warning: 'zircon-temporary-objects' check 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
}
diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
index 2fe48efeeeb6e..3f86f65c1ce65 100644
--- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
@@ -379,11 +379,12 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtils) {
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))));
+ ElementsAre(
+ AllOf(ToolDiagMessage(
+ "'performance-faster-string-find' check is deprecated and "
+ "will be removed in a future release; consider using "
+ "'performance-prefer-single-char-overloads' instead"),
+ ToolDiagLevel(Warning))));
}
TEST(CheckOptionsValidation, DeprecatedAliasUtilsDisabledByCanonicalCheck) {
@@ -426,11 +427,12 @@ TEST(CheckOptionsValidation, DeprecatedAliasUtilsEnabledByWildcardAlias) {
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))));
+ ElementsAre(
+ AllOf(ToolDiagMessage(
+ "'performance-faster-string-find' check is deprecated and "
+ "will be removed in a future release; consider using "
+ "'performance-prefer-single-char-overloads' instead"),
+ ToolDiagLevel(Warning))));
}
TEST(CheckOptionsValidation,
More information about the cfe-commits
mailing list