[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-11 Thread Zinovy Nis via cfe-commits


@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+  If ``true``, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions.
+
+  If ``false``, overloaded functions are skipped to avoid potential issues
+  with ambiguous conversions.
+
+  The default is ``false``.

irishrover wrote:

Done

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-11 Thread Zinovy Nis via cfe-commits


@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+  If ``true``, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions.
+
+  If ``false``, overloaded functions are skipped to avoid potential issues
+  with ambiguous conversions.
+
+  Default is ``false``.

irishrover wrote:

Done

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-11 Thread Baranov Victor via cfe-commits


@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+  If ``true``, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions.
+
+  If ``false``, overloaded functions are skipped to avoid potential issues
+  with ambiguous conversions.
+
+  Default is ``false``.

vbvictor wrote:

```suggestion
  If `true`, the check will also consider overloaded functions for
  ``string_view`` conversion suggestions. If `false`, overloaded
  functions are skipped to avoid potential issues with ambiguous
  conversions. 
  
  Default is `false`.
```

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Daniil Dudkin via cfe-commits


@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHECK \

unterumarmung wrote:

should we clang-format this file?

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Daniil Dudkin via cfe-commits


@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHECK \

unterumarmung wrote:

Thanks! It was just weird for me that the contents of the namespace are 
indented, for example here:
```cpp
namespace overload_with_inline {
  inline namespace inline_namespace {
std::string overload1(int) { return "int"; }
```

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Zinovy Nis via cfe-commits

https://github.com/irishrover closed 
https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Zinovy Nis via cfe-commits

https://github.com/irishrover updated 
https://github.com/llvm/llvm-project/pull/196387

>From 32bbe1e4314b936acd345ceb52fee1a1df6549c7 Mon Sep 17 00:00:00 2001
From: Zinovy Nis 
Date: Sat, 25 Apr 2026 12:49:57 +0300
Subject: [PATCH] [clang-tidy] Reland "An option for conditional skipping
 overloaded functions in modernize-use-string-view"

---
 .../modernize/UseStringViewCheck.cpp  |   6 +-
 .../clang-tidy/modernize/UseStringViewCheck.h |   5 +-
 .../checks/modernize/use-string-view.rst  |  10 +
 .../modernize/use-string-view-overloaded.cpp  | 185 ++
 .../checkers/modernize/use-string-view.cpp|  91 -
 5 files changed, 203 insertions(+), 94 deletions(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp

diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
index 29e5bdb65632e..9892870279b55 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
@@ -80,6 +80,7 @@ static void fixReturns(const FunctionDecl *FuncDecl, 
DiagnosticBuilder &Diag,
 UseStringViewCheck::UseStringViewCheck(StringRef Name,
ClangTidyContext *Context)
 : ClangTidyCheck(Name, Context),
+  CheckOverloadedFunctions(Options.get("CheckOverloadedFunctions", false)),
   IgnoredFunctions(utils::options::parseStringList(
   Options.get("IgnoredFunctions", "toString$;ToString$;to_string$"))) {
   parseReplacementStringViewClass(
@@ -87,6 +88,7 @@ UseStringViewCheck::UseStringViewCheck(StringRef Name,
 }
 
 void UseStringViewCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
+  Options.store(Opts, "CheckOverloadedFunctions", CheckOverloadedFunctions);
   Options.store(Opts, "IgnoredFunctions",
 utils::options::serializeStringList(IgnoredFunctions));
   Options.store(Opts, "ReplacementStringViewClass",
@@ -109,11 +111,13 @@ void UseStringViewCheck::registerMatchers(MatchFinder 
*Finder) {
   hasFalseExpression(ignoringParenImpCasts(stringLiteral(;
   const auto VirtualOrOperator =
   cxxMethodDecl(anyOf(cxxConversionDecl(), isVirtual()));
+  const auto CheckOverloaded =
+  CheckOverloadedFunctions ? unless(anything()) : isOverloaded();
   Finder->addMatcher(
   functionDecl(
   isDefinition(),
   unless(anyOf(VirtualOrOperator, IgnoredFunctionsMatcher,
-   isOverloaded(),
+   CheckOverloaded,
ast_matchers::isExplicitTemplateSpecialization())),
   returns(IsStdString), hasDescendant(returnStmt()),
   unless(hasDescendant(returnStmt(hasReturnValue(unless(
diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
index f5f11edc54824..275ce904290ac 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
@@ -35,13 +35,14 @@ class UseStringViewCheck : public ClangTidyCheck {
   StringRef toStringViewTypeStr(StringRef Type) const;
   void parseReplacementStringViewClass(StringRef Options);
 
+  bool CheckOverloadedFunctions = false;
+  const std::vector IgnoredFunctions;
+
   StringRef StringViewClass = "std::string_view";
   StringRef WStringViewClass = "std::wstring_view";
   StringRef U8StringViewClass = "std::u8string_view";
   StringRef U16StringViewClass = "std::u16string_view";
   StringRef U32StringViewClass = "std::u32string_view";
-
-  const std::vector IgnoredFunctions;
 };
 
 } // namespace clang::tidy::modernize
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst 
b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
index c72a0480c0eb8..f3d2e0b94a508 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+
+  If `true`, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions. If `false`, overloaded
+  functions are skipped to avoid potential issues with ambiguous
+  conversions.
+
+  Default is `false`.
+
+
 .. option:: IgnoredFunctions
 
A semicolon-separated list of the names of functions or methods to be
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
new file mode 100644
index 0..bdb30473fda2b
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
@@ -0,0 +1,185 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHEC

[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Zinovy Nis via cfe-commits


@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHECK \

irishrover wrote:

I applied clang-format 

`clang-format -i use-string-view-overloaded.cpp`

and there're no changes.

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Zinovy Nis via cfe-commits

https://github.com/irishrover updated 
https://github.com/llvm/llvm-project/pull/196387

>From fa9cc2eb20afdef626a56fe862d6d48c4db589c7 Mon Sep 17 00:00:00 2001
From: Zinovy Nis 
Date: Sat, 25 Apr 2026 12:49:57 +0300
Subject: [PATCH] [clang-tidy] Reland "An option for conditional skipping
 overloaded functions in modernize-use-string-view"

---
 .../modernize/UseStringViewCheck.cpp  |   6 +-
 .../clang-tidy/modernize/UseStringViewCheck.h |   5 +-
 .../checks/modernize/use-string-view.rst  |  10 +
 .../modernize/use-string-view-overloaded.cpp  | 185 ++
 .../checkers/modernize/use-string-view.cpp|  91 -
 5 files changed, 203 insertions(+), 94 deletions(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp

diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
index 29e5bdb65632e..9892870279b55 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
@@ -80,6 +80,7 @@ static void fixReturns(const FunctionDecl *FuncDecl, 
DiagnosticBuilder &Diag,
 UseStringViewCheck::UseStringViewCheck(StringRef Name,
ClangTidyContext *Context)
 : ClangTidyCheck(Name, Context),
+  CheckOverloadedFunctions(Options.get("CheckOverloadedFunctions", false)),
   IgnoredFunctions(utils::options::parseStringList(
   Options.get("IgnoredFunctions", "toString$;ToString$;to_string$"))) {
   parseReplacementStringViewClass(
@@ -87,6 +88,7 @@ UseStringViewCheck::UseStringViewCheck(StringRef Name,
 }
 
 void UseStringViewCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
+  Options.store(Opts, "CheckOverloadedFunctions", CheckOverloadedFunctions);
   Options.store(Opts, "IgnoredFunctions",
 utils::options::serializeStringList(IgnoredFunctions));
   Options.store(Opts, "ReplacementStringViewClass",
@@ -109,11 +111,13 @@ void UseStringViewCheck::registerMatchers(MatchFinder 
*Finder) {
   hasFalseExpression(ignoringParenImpCasts(stringLiteral(;
   const auto VirtualOrOperator =
   cxxMethodDecl(anyOf(cxxConversionDecl(), isVirtual()));
+  const auto CheckOverloaded =
+  CheckOverloadedFunctions ? unless(anything()) : isOverloaded();
   Finder->addMatcher(
   functionDecl(
   isDefinition(),
   unless(anyOf(VirtualOrOperator, IgnoredFunctionsMatcher,
-   isOverloaded(),
+   CheckOverloaded,
ast_matchers::isExplicitTemplateSpecialization())),
   returns(IsStdString), hasDescendant(returnStmt()),
   unless(hasDescendant(returnStmt(hasReturnValue(unless(
diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
index f5f11edc54824..275ce904290ac 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
@@ -35,13 +35,14 @@ class UseStringViewCheck : public ClangTidyCheck {
   StringRef toStringViewTypeStr(StringRef Type) const;
   void parseReplacementStringViewClass(StringRef Options);
 
+  bool CheckOverloadedFunctions = false;
+  const std::vector IgnoredFunctions;
+
   StringRef StringViewClass = "std::string_view";
   StringRef WStringViewClass = "std::wstring_view";
   StringRef U8StringViewClass = "std::u8string_view";
   StringRef U16StringViewClass = "std::u16string_view";
   StringRef U32StringViewClass = "std::u32string_view";
-
-  const std::vector IgnoredFunctions;
 };
 
 } // namespace clang::tidy::modernize
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst 
b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
index c72a0480c0eb8..f6b0cb37134e7 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+  If ``true``, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions.
+
+  If ``false``, overloaded functions are skipped to avoid potential issues
+  with ambiguous conversions.
+
+  Default is ``false``.
+
+
 .. option:: IgnoredFunctions
 
A semicolon-separated list of the names of functions or methods to be
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
new file mode 100644
index 0..bdb30473fda2b
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
@@ -0,0 +1,185 @@
+// RUN: %check_clang_tidy -check-suffix=DO

[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Zinovy Nis via cfe-commits


@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHECK \
+// RUN: -std=c++20-or-later %s modernize-use-string-view %t -- \

irishrover wrote:

Done

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Zeyi Xu via cfe-commits

https://github.com/zeyi2 approved this pull request.

LGTM, but please wait for vbvictor's approval :)

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-10 Thread Baranov Victor via cfe-commits

https://github.com/vbvictor approved this pull request.


https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-09 Thread Zinovy Nis via cfe-commits

https://github.com/irishrover updated 
https://github.com/llvm/llvm-project/pull/196387

>From c322ed4699db41bfc3b40e7f90b5d625e097e44a Mon Sep 17 00:00:00 2001
From: Zinovy Nis 
Date: Sat, 25 Apr 2026 12:49:57 +0300
Subject: [PATCH] [clang-tidy] Reland "An option for conditional skipping
 overloaded functions in modernize-use-string-view"

---
 .../modernize/UseStringViewCheck.cpp  |   6 +-
 .../clang-tidy/modernize/UseStringViewCheck.h |   5 +-
 .../checks/modernize/use-string-view.rst  |  10 ++
 .../modernize/use-string-view-overloaded.cpp  | 147 ++
 .../checkers/modernize/use-string-view.cpp|  91 ---
 5 files changed, 165 insertions(+), 94 deletions(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp

diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
index 29e5bdb65632e..9892870279b55 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
@@ -80,6 +80,7 @@ static void fixReturns(const FunctionDecl *FuncDecl, 
DiagnosticBuilder &Diag,
 UseStringViewCheck::UseStringViewCheck(StringRef Name,
ClangTidyContext *Context)
 : ClangTidyCheck(Name, Context),
+  CheckOverloadedFunctions(Options.get("CheckOverloadedFunctions", false)),
   IgnoredFunctions(utils::options::parseStringList(
   Options.get("IgnoredFunctions", "toString$;ToString$;to_string$"))) {
   parseReplacementStringViewClass(
@@ -87,6 +88,7 @@ UseStringViewCheck::UseStringViewCheck(StringRef Name,
 }
 
 void UseStringViewCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
+  Options.store(Opts, "CheckOverloadedFunctions", CheckOverloadedFunctions);
   Options.store(Opts, "IgnoredFunctions",
 utils::options::serializeStringList(IgnoredFunctions));
   Options.store(Opts, "ReplacementStringViewClass",
@@ -109,11 +111,13 @@ void UseStringViewCheck::registerMatchers(MatchFinder 
*Finder) {
   hasFalseExpression(ignoringParenImpCasts(stringLiteral(;
   const auto VirtualOrOperator =
   cxxMethodDecl(anyOf(cxxConversionDecl(), isVirtual()));
+  const auto CheckOverloaded =
+  CheckOverloadedFunctions ? unless(anything()) : isOverloaded();
   Finder->addMatcher(
   functionDecl(
   isDefinition(),
   unless(anyOf(VirtualOrOperator, IgnoredFunctionsMatcher,
-   isOverloaded(),
+   CheckOverloaded,
ast_matchers::isExplicitTemplateSpecialization())),
   returns(IsStdString), hasDescendant(returnStmt()),
   unless(hasDescendant(returnStmt(hasReturnValue(unless(
diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
index f5f11edc54824..275ce904290ac 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
@@ -35,13 +35,14 @@ class UseStringViewCheck : public ClangTidyCheck {
   StringRef toStringViewTypeStr(StringRef Type) const;
   void parseReplacementStringViewClass(StringRef Options);
 
+  bool CheckOverloadedFunctions = false;
+  const std::vector IgnoredFunctions;
+
   StringRef StringViewClass = "std::string_view";
   StringRef WStringViewClass = "std::wstring_view";
   StringRef U8StringViewClass = "std::u8string_view";
   StringRef U16StringViewClass = "std::u16string_view";
   StringRef U32StringViewClass = "std::u32string_view";
-
-  const std::vector IgnoredFunctions;
 };
 
 } // namespace clang::tidy::modernize
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst 
b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
index c72a0480c0eb8..f6b0cb37134e7 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+  If ``true``, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions.
+
+  If ``false``, overloaded functions are skipped to avoid potential issues
+  with ambiguous conversions.
+
+  Default is ``false``.
+
+
 .. option:: IgnoredFunctions
 
A semicolon-separated list of the names of functions or methods to be
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
new file mode 100644
index 0..8f4f2c2311c10
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix

[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-09 Thread Baranov Victor via cfe-commits


@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHECK \
+// RUN: -std=c++20-or-later %s modernize-use-string-view %t -- \

vbvictor wrote:

Previous tests used `-std=c++17-or-later`, can we place c++20 code under ifdef 
and use c++17

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-09 Thread Zinovy Nis via cfe-commits


@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHECK \
+// RUN: -std=c++20-or-later %s modernize-use-string-view %t -- \
+// RUN: --config="{CheckOptions: 
{modernize-use-string-view.CheckOverloadedFunctions: false}}"
+
+// RUN: %check_clang_tidy -check-suffix=CHECK \
+// RUN: -std=c++20-or-later %s modernize-use-string-view %t -- \
+// RUN: --config="{CheckOptions: 
{modernize-use-string-view.CheckOverloadedFunctions: true}}"
+
+#include 
+#include 
+
+namespace overload_funcs_redeclared {
+std::basic_string overload(int);
+std::string overload(int);
+std::string overload(int) { return "int"; }
+// CHECK-MESSAGES-DONTCHECK:[[@LINE-1]]:1: warning: consider using 
'std::string_view' to avoid unnecessary copying and allocations 
[modernize-use-string-view]
+// CHECK-MESSAGES-CHECK:[[@LINE-2]]:1: warning: consider using 
'std::string_view' to avoid unnecessary copying and allocations 
[modernize-use-string-view]

irishrover wrote:

I see that a lot of tests still use `[checker-name]` in their check. I'd prefer 
to leave as it is here.

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-09 Thread Zinovy Nis via cfe-commits

https://github.com/irishrover updated 
https://github.com/llvm/llvm-project/pull/196387

>From 26a814124d8c3274e0fa90817715cb2e7af34072 Mon Sep 17 00:00:00 2001
From: Zinovy Nis 
Date: Sat, 25 Apr 2026 12:49:57 +0300
Subject: [PATCH 1/2] [clang-tidy] Reland "An option for conditional skipping
 overloaded functions in modernize-use-string-view"

---
 .../modernize/UseStringViewCheck.cpp  |   6 +-
 .../clang-tidy/modernize/UseStringViewCheck.h |   5 +-
 .../checks/modernize/use-string-view.rst  |  10 ++
 .../modernize/use-string-view-overloaded.cpp  | 147 ++
 .../checkers/modernize/use-string-view.cpp|  91 ---
 5 files changed, 165 insertions(+), 94 deletions(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp

diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
index 29e5bdb65632e..9892870279b55 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.cpp
@@ -80,6 +80,7 @@ static void fixReturns(const FunctionDecl *FuncDecl, 
DiagnosticBuilder &Diag,
 UseStringViewCheck::UseStringViewCheck(StringRef Name,
ClangTidyContext *Context)
 : ClangTidyCheck(Name, Context),
+  CheckOverloadedFunctions(Options.get("CheckOverloadedFunctions", false)),
   IgnoredFunctions(utils::options::parseStringList(
   Options.get("IgnoredFunctions", "toString$;ToString$;to_string$"))) {
   parseReplacementStringViewClass(
@@ -87,6 +88,7 @@ UseStringViewCheck::UseStringViewCheck(StringRef Name,
 }
 
 void UseStringViewCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
+  Options.store(Opts, "CheckOverloadedFunctions", CheckOverloadedFunctions);
   Options.store(Opts, "IgnoredFunctions",
 utils::options::serializeStringList(IgnoredFunctions));
   Options.store(Opts, "ReplacementStringViewClass",
@@ -109,11 +111,13 @@ void UseStringViewCheck::registerMatchers(MatchFinder 
*Finder) {
   hasFalseExpression(ignoringParenImpCasts(stringLiteral(;
   const auto VirtualOrOperator =
   cxxMethodDecl(anyOf(cxxConversionDecl(), isVirtual()));
+  const auto CheckOverloaded =
+  CheckOverloadedFunctions ? unless(anything()) : isOverloaded();
   Finder->addMatcher(
   functionDecl(
   isDefinition(),
   unless(anyOf(VirtualOrOperator, IgnoredFunctionsMatcher,
-   isOverloaded(),
+   CheckOverloaded,
ast_matchers::isExplicitTemplateSpecialization())),
   returns(IsStdString), hasDescendant(returnStmt()),
   unless(hasDescendant(returnStmt(hasReturnValue(unless(
diff --git a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h 
b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
index f5f11edc54824..275ce904290ac 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseStringViewCheck.h
@@ -35,13 +35,14 @@ class UseStringViewCheck : public ClangTidyCheck {
   StringRef toStringViewTypeStr(StringRef Type) const;
   void parseReplacementStringViewClass(StringRef Options);
 
+  bool CheckOverloadedFunctions = false;
+  const std::vector IgnoredFunctions;
+
   StringRef StringViewClass = "std::string_view";
   StringRef WStringViewClass = "std::wstring_view";
   StringRef U8StringViewClass = "std::u8string_view";
   StringRef U16StringViewClass = "std::u16string_view";
   StringRef U32StringViewClass = "std::u32string_view";
-
-  const std::vector IgnoredFunctions;
 };
 
 } // namespace clang::tidy::modernize
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst 
b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
index c72a0480c0eb8..f0f019415f881 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/use-string-view.rst
@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+  If ``true``, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions.
+
+  If ``false``, overloaded functions are skipped to avoid potential issues
+  with ambiguous conversions.
+
+  The default is ``false``.
+
+
 .. option:: IgnoredFunctions
 
A semicolon-separated list of the names of functions or methods to be
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
new file mode 100644
index 0..8f4f2c2311c10
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-string-view-overloaded.cpp
@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -chec

[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-08 Thread Zeyi Xu via cfe-commits


@@ -108,6 +108,16 @@ simply make an explicit conversion.
 Options
 ---
 
+.. option:: CheckOverloadedFunctions
+  If ``true``, the check will also consider overloaded functions for
+  ``string_view`` conversion suggestions.
+
+  If ``false``, overloaded functions are skipped to avoid potential issues
+  with ambiguous conversions.
+
+  The default is ``false``.

zeyi2 wrote:

```suggestion
  Default is ``false``.
```

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Reland "An option for conditional skipping overloaded functions in modernize-use-string-view" (PR #196387)

2026-05-08 Thread Zeyi Xu via cfe-commits


@@ -0,0 +1,147 @@
+// RUN: %check_clang_tidy -check-suffix=DONTCHECK \
+// RUN: -std=c++20-or-later %s modernize-use-string-view %t -- \
+// RUN: --config="{CheckOptions: 
{modernize-use-string-view.CheckOverloadedFunctions: false}}"
+
+// RUN: %check_clang_tidy -check-suffix=CHECK \
+// RUN: -std=c++20-or-later %s modernize-use-string-view %t -- \
+// RUN: --config="{CheckOptions: 
{modernize-use-string-view.CheckOverloadedFunctions: true}}"
+
+#include 
+#include 
+
+namespace overload_funcs_redeclared {
+std::basic_string overload(int);
+std::string overload(int);
+std::string overload(int) { return "int"; }
+// CHECK-MESSAGES-DONTCHECK:[[@LINE-1]]:1: warning: consider using 
'std::string_view' to avoid unnecessary copying and allocations 
[modernize-use-string-view]
+// CHECK-MESSAGES-CHECK:[[@LINE-2]]:1: warning: consider using 
'std::string_view' to avoid unnecessary copying and allocations 
[modernize-use-string-view]

zeyi2 wrote:

Small nit:
```suggestion
// CHECK-MESSAGES-CHECK:[[@LINE-2]]:1: warning: consider using 
'std::string_view' to avoid unnecessary copying and allocations
```

Same as below :)

https://github.com/llvm/llvm-project/pull/196387
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits