[clang-tools-extra] 032f36b - [clang-tidy] Rename performance-faster-string-find to performance-prefer-single-char-overloads (#186946)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 29 23:19:33 PDT 2026
Author: Zeyi Xu
Date: 2026-03-30T14:19:27+08:00
New Revision: 032f36bdbc73b74c4e03bdd9b7e03e60979a0d31
URL: https://github.com/llvm/llvm-project/commit/032f36bdbc73b74c4e03bdd9b7e03e60979a0d31
DIFF: https://github.com/llvm/llvm-project/commit/032f36bdbc73b74c4e03bdd9b7e03e60979a0d31.diff
LOG: [clang-tidy] Rename performance-faster-string-find to performance-prefer-single-char-overloads (#186946)
Related discussion:
https://github.com/llvm/llvm-project/pull/182697#issuecomment-3986242476
Closes https://github.com/llvm/llvm-project/issues/186853
---------
Co-authored-by: Victor Chernyakin <chernyakin.victor.j at outlook.com>
Added:
clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.cpp
clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.h
clang-tools-extra/docs/clang-tidy/checks/performance/prefer-single-char-overloads.rst
clang-tools-extra/test/clang-tidy/checkers/performance/prefer-single-char-overloads.cpp
Modified:
clang-tools-extra/clang-tidy/performance/CMakeLists.txt
clang-tools-extra/clang-tidy/performance/PerformanceTidyModule.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/list.rst
clang-tools-extra/docs/clang-tidy/checks/performance/faster-string-find.rst
Removed:
clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h
clang-tools-extra/test/clang-tidy/checkers/performance/faster-string-find.cpp
################################################################################
diff --git a/clang-tools-extra/clang-tidy/performance/CMakeLists.txt b/clang-tools-extra/clang-tidy/performance/CMakeLists.txt
index 5b3e849fb20a8..0c778b5a9f36b 100644
--- a/clang-tools-extra/clang-tidy/performance/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/performance/CMakeLists.txt
@@ -6,7 +6,6 @@ set(LLVM_LINK_COMPONENTS
add_clang_library(clangTidyPerformanceModule STATIC
AvoidEndlCheck.cpp
EnumSizeCheck.cpp
- FasterStringFindCheck.cpp
ForRangeCopyCheck.cpp
ImplicitConversionInLoopCheck.cpp
InefficientAlgorithmCheck.cpp
@@ -21,6 +20,7 @@ add_clang_library(clangTidyPerformanceModule STATIC
NoexceptMoveConstructorCheck.cpp
NoexceptSwapCheck.cpp
PerformanceTidyModule.cpp
+ PreferSingleCharOverloadsCheck.cpp
StringViewConversionsCheck.cpp
TriviallyDestructibleCheck.cpp
TypePromotionInMathFnCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/performance/PerformanceTidyModule.cpp b/clang-tools-extra/clang-tidy/performance/PerformanceTidyModule.cpp
index 21274fae43795..a4c1cdacab496 100644
--- a/clang-tools-extra/clang-tidy/performance/PerformanceTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/performance/PerformanceTidyModule.cpp
@@ -10,7 +10,6 @@
#include "../ClangTidyModule.h"
#include "AvoidEndlCheck.h"
#include "EnumSizeCheck.h"
-#include "FasterStringFindCheck.h"
#include "ForRangeCopyCheck.h"
#include "ImplicitConversionInLoopCheck.h"
#include "InefficientAlgorithmCheck.h"
@@ -23,6 +22,7 @@
#include "NoexceptDestructorCheck.h"
#include "NoexceptMoveConstructorCheck.h"
#include "NoexceptSwapCheck.h"
+#include "PreferSingleCharOverloadsCheck.h"
#include "StringViewConversionsCheck.h"
#include "TriviallyDestructibleCheck.h"
#include "TypePromotionInMathFnCheck.h"
@@ -39,7 +39,7 @@ class PerformanceModule : public ClangTidyModule {
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
CheckFactories.registerCheck<AvoidEndlCheck>("performance-avoid-endl");
CheckFactories.registerCheck<EnumSizeCheck>("performance-enum-size");
- CheckFactories.registerCheck<FasterStringFindCheck>(
+ CheckFactories.registerCheck<PreferSingleCharOverloadsCheck>(
"performance-faster-string-find");
CheckFactories.registerCheck<ForRangeCopyCheck>(
"performance-for-range-copy");
@@ -64,6 +64,8 @@ class PerformanceModule : public ClangTidyModule {
"performance-noexcept-move-constructor");
CheckFactories.registerCheck<NoexceptSwapCheck>(
"performance-noexcept-swap");
+ CheckFactories.registerCheck<PreferSingleCharOverloadsCheck>(
+ "performance-prefer-single-char-overloads");
CheckFactories.registerCheck<StringViewConversionsCheck>(
"performance-string-view-conversions");
CheckFactories.registerCheck<TriviallyDestructibleCheck>(
diff --git a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp b/clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.cpp
similarity index 88%
rename from clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
rename to clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.cpp
index cd85136baf5ec..661d5e3d6b911 100644
--- a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.cpp
@@ -6,9 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#include "FasterStringFindCheck.h"
+#include "PreferSingleCharOverloadsCheck.h"
#include "../utils/OptionsUtils.h"
-#include "clang/AST/ASTContext.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
@@ -42,19 +41,20 @@ makeCharacterLiteral(const StringLiteral *Literal) {
return Result;
}
-FasterStringFindCheck::FasterStringFindCheck(StringRef Name,
- ClangTidyContext *Context)
+PreferSingleCharOverloadsCheck::PreferSingleCharOverloadsCheck(
+ StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
StringLikeClasses(utils::options::parseStringList(
Options.get("StringLikeClasses",
"::std::basic_string;::std::basic_string_view"))) {}
-void FasterStringFindCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
+void PreferSingleCharOverloadsCheck::storeOptions(
+ ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "StringLikeClasses",
utils::options::serializeStringList(StringLikeClasses));
}
-void FasterStringFindCheck::registerMatchers(MatchFinder *Finder) {
+void PreferSingleCharOverloadsCheck::registerMatchers(MatchFinder *Finder) {
const auto SingleChar =
ignoringParenCasts(stringLiteral(hasSize(1)).bind("literal"));
@@ -78,7 +78,8 @@ void FasterStringFindCheck::registerMatchers(MatchFinder *Finder) {
this);
}
-void FasterStringFindCheck::check(const MatchFinder::MatchResult &Result) {
+void PreferSingleCharOverloadsCheck::check(
+ const MatchFinder::MatchResult &Result) {
const auto *Literal = Result.Nodes.getNodeAs<StringLiteral>("literal");
const auto *FindFunc = Result.Nodes.getNodeAs<FunctionDecl>("func");
diff --git a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h b/clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.h
similarity index 71%
rename from clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h
rename to clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.h
index f5d36d805498e..848ad0be9724c 100644
--- a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.h
+++ b/clang-tools-extra/clang-tidy/performance/PreferSingleCharOverloadsCheck.h
@@ -6,12 +6,11 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_FASTERSTRINGFINDCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_FASTERSTRINGFINDCHECK_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_PREFERSINGLECHAROVERLOADSCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_PREFERSINGLECHAROVERLOADSCHECK_H
#include "../ClangTidyCheck.h"
-#include <string>
#include <vector>
namespace clang::tidy::performance {
@@ -21,10 +20,10 @@ namespace clang::tidy::performance {
/// The character literal overload is more efficient.
///
/// For the user-facing documentation see:
-/// https://clang.llvm.org/extra/clang-tidy/checks/performance/faster-string-find.html
-class FasterStringFindCheck : public ClangTidyCheck {
+/// https://clang.llvm.org/extra/clang-tidy/checks/performance/prefer-single-char-overloads.html
+class PreferSingleCharOverloadsCheck : public ClangTidyCheck {
public:
- FasterStringFindCheck(StringRef Name, ClangTidyContext *Context);
+ PreferSingleCharOverloadsCheck(StringRef Name, ClangTidyContext *Context);
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
return LangOpts.CPlusPlus;
}
@@ -41,4 +40,4 @@ class FasterStringFindCheck : public ClangTidyCheck {
} // namespace clang::tidy::performance
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_FASTERSTRINGFINDCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_PREFERSINGLECHAROVERLOADSCHECK_H
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 79eea57ce5d06..b1fd95db9e395 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -49,6 +49,12 @@ Major New Features
Potentially Breaking Changes
----------------------------
+- Deprecated the :program:`clang-tidy` check :doc:`performance-faster-string-find
+ <clang-tidy/checks/performance/faster-string-find>`. It has been renamed to
+ :doc:`performance-prefer-single-char-overloads
+ <clang-tidy/checks/performance/prefer-single-char-overloads>`.
+ The original check will be removed in the 25th release.
+
Improvements to clangd
----------------------
@@ -189,6 +195,12 @@ New check aliases
<clang-tidy/checks/portability/no-assembler>`. The `hicpp-no-assembler`
name is kept as an alias.
+- Renamed :doc:`performance-faster-string-find
+ <clang-tidy/checks/performance/faster-string-find>` to
+ :doc:`performance-prefer-single-char-overloads
+ <clang-tidy/checks/performance/prefer-single-char-overloads>`.
+ The `performance-faster-string-find` name is kept as an alias.
+
Changes in existing checks
^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -357,14 +369,6 @@ Changes in existing checks
- Improved the ignore list to correctly handle ``typedef`` and ``enum``.
-- Improved :doc:`performance-faster-string-find
- <clang-tidy/checks/performance/faster-string-find>` check:
-
- - Now analyzes calls to the ``starts_with``, ``ends_with``, ``contains``,
- and ``operator+=`` string member functions.
-
- - Fixes false negatives when using ``std::set`` from ``libstdc++``.
-
- Improved :doc:`performance-inefficient-string-concatenation
<clang-tidy/checks/performance/inefficient-string-concatenation>` check by
adding support for detecting inefficient string concatenation in ``do-while``
@@ -379,6 +383,14 @@ Changes in existing checks
<clang-tidy/checks/performance/move-const-arg>` check by avoiding false
positives on trivially copyable types with a non-public copy constructor.
+- Improved :doc:`performance-prefer-single-char-overloads
+ <clang-tidy/checks/performance/prefer-single-char-overloads>` check:
+
+ - Now analyzes calls to the ``starts_with``, ``ends_with``, ``contains``,
+ and ``operator+=`` string member functions.
+
+ - Fixes false negatives when using ``std::set`` from ``libstdc++``.
+
- Improved :doc:`readability-container-size-empty
<clang-tidy/checks/readability/container-size-empty>` check:
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index ceab1e9414951..2b5be931271ec 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -364,6 +364,7 @@ Clang-Tidy Checks
:doc:`performance-noexcept-destructor <performance/noexcept-destructor>`, "Yes"
:doc:`performance-noexcept-move-constructor <performance/noexcept-move-constructor>`, "Yes"
:doc:`performance-noexcept-swap <performance/noexcept-swap>`, "Yes"
+ :doc:`performance-prefer-single-char-overloads <performance/prefer-single-char-overloads>`, "Yes"
:doc:`performance-string-view-conversions <performance/string-view-conversions>`, "Yes"
:doc:`performance-trivially-destructible <performance/trivially-destructible>`, "Yes"
:doc:`performance-type-promotion-in-math-fn <performance/type-promotion-in-math-fn>`, "Yes"
diff --git a/clang-tools-extra/docs/clang-tidy/checks/performance/faster-string-find.rst b/clang-tools-extra/docs/clang-tidy/checks/performance/faster-string-find.rst
index e7ed869acc8ad..bedac6fa78c55 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/performance/faster-string-find.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/performance/faster-string-find.rst
@@ -1,30 +1,10 @@
.. title:: clang-tidy - performance-faster-string-find
+.. meta::
+ :http-equiv=refresh: 5;URL=prefer-single-char-overloads.html
performance-faster-string-find
==============================
-Optimize calls to ``std::string::find()`` and friends when the needle passed is
-a single character string literal. The character literal overload is more
-efficient.
-
-Examples:
-
-.. code-block:: c++
-
- str.find("A");
-
- // becomes
-
- str.find('A');
-
-Options
--------
-
-.. option:: StringLikeClasses
-
- Semicolon-separated list of names of string-like classes. By default only
- ``::std::basic_string`` and ``::std::basic_string_view`` are considered.
- Within these classes, the check will only consider member functions named
- ``find``, ``rfind``, ``find_first_of``, ``find_first_not_of``,
- ``find_last_of``, ``find_last_not_of``, ``starts_with``, ``ends_with``,
- ``contains``, or ``operator+=``.
+The `performance-faster-string-find` check is an alias, please see
+:doc:`performance-prefer-single-char-overloads <prefer-single-char-overloads>`
+for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/performance/prefer-single-char-overloads.rst b/clang-tools-extra/docs/clang-tidy/checks/performance/prefer-single-char-overloads.rst
new file mode 100644
index 0000000000000..3e6a9d979497e
--- /dev/null
+++ b/clang-tools-extra/docs/clang-tidy/checks/performance/prefer-single-char-overloads.rst
@@ -0,0 +1,35 @@
+.. title:: clang-tidy - performance-prefer-single-char-overloads
+
+performance-prefer-single-char-overloads
+========================================
+
+Optimize calls to ``std::string::find()`` and friends when the needle passed is
+a single character string literal. The character literal overload is more
+efficient.
+
+Examples:
+
+.. code-block:: c++
+
+ str.find("A");
+ str += "B";
+
+ // becomes
+
+ str.find('A');
+ str += 'B';
+
+This check flags passing strings of size 1 to miscellaneous member functions
+as well as ``operator+=``.
+
+Options
+-------
+
+.. option:: StringLikeClasses
+
+ Semicolon-separated list of names of string-like classes. By default only
+ ``::std::basic_string`` and ``::std::basic_string_view`` are considered.
+ Within these classes, the check will only consider member functions named
+ ``find``, ``rfind``, ``find_first_of``, ``find_first_not_of``,
+ ``find_last_of``, ``find_last_not_of``, ``starts_with``, ``ends_with``,
+ ``contains``, or ``operator+=``.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/performance/faster-string-find.cpp b/clang-tools-extra/test/clang-tidy/checkers/performance/prefer-single-char-overloads.cpp
similarity index 94%
rename from clang-tools-extra/test/clang-tidy/checkers/performance/faster-string-find.cpp
rename to clang-tools-extra/test/clang-tidy/checkers/performance/prefer-single-char-overloads.cpp
index 79d6d23f47aa6..46bbf3c20f8fd 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/performance/faster-string-find.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/performance/prefer-single-char-overloads.cpp
@@ -1,7 +1,7 @@
-// RUN: %check_clang_tidy %s performance-faster-string-find %t -- -- -fno-delayed-template-parsing
-// RUN: %check_clang_tidy -check-suffix=CUSTOM %s performance-faster-string-find %t -- \
+// RUN: %check_clang_tidy %s performance-prefer-single-char-overloads %t -- -- -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -check-suffix=CUSTOM %s performance-prefer-single-char-overloads %t -- \
// RUN: -config="{CheckOptions: \
-// RUN: {performance-faster-string-find.StringLikeClasses: \
+// RUN: {performance-prefer-single-char-overloads.StringLikeClasses: \
// RUN: '::llvm::StringRef;'}}" -- -fno-delayed-template-parsing
#include <string>
@@ -23,7 +23,7 @@ void StringFind() {
std::string Str;
Str.find("a");
- // CHECK-MESSAGES: [[@LINE-1]]:12: warning: 'find' called with a string literal consisting of a single character; consider using the more efficient overload accepting a character [performance-faster-string-find]
+ // CHECK-MESSAGES: [[@LINE-1]]:12: warning: 'find' called with a string literal consisting of a single character; consider using the more efficient overload accepting a character [performance-prefer-single-char-overloads]
// CHECK-FIXES: Str.find('a');
// Works with the pos argument.
More information about the cfe-commits
mailing list