njames93 created this revision.
njames93 added reviewers: aaron.ballman, gribozavr2, sbenza, alexfh.
Herald added subscribers: cfe-commits, xazax.hun.
Herald added a project: clang.
Extend the default string like classes to include `std::basic_string_view`.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D82720
Files:
clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/performance-faster-string-find.rst
clang-tools-extra/test/clang-tidy/checkers/performance-faster-string-find.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/performance-faster-string-find.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/performance-faster-string-find.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/performance-faster-string-find.cpp
@@ -1,7 +1,8 @@
-// RUN: %check_clang_tidy %s performance-faster-string-find %t -- \
+// RUN: %check_clang_tidy %s performance-faster-string-find %t
+// RUN: %check_clang_tidy -check-suffix=CUSTOM %s performance-faster-string-find %t -- \
// RUN: -config="{CheckOptions: \
// RUN: [{key: performance-faster-string-find.StringLikeClasses, \
-// RUN: value: 'std::basic_string; ::llvm::StringRef;'}]}" --
+// RUN: value: '::llvm::StringRef;'}]}"
namespace std {
template <typename Char>
@@ -17,6 +18,20 @@
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
+
+template <typename Char>
+struct basic_string_view {
+ int find(const Char *, int = 0) const;
+ int find(const Char *, int, int) const;
+ int rfind(const Char *) const;
+ int find_first_of(const Char *) const;
+ int find_first_not_of(const Char *) const;
+ int find_last_of(const Char *) const;
+ int find_last_not_of(const Char *) const;
+};
+
+typedef basic_string_view<char> string_view;
+typedef basic_string_view<wchar_t> wstring_view;
} // namespace std
namespace llvm {
@@ -75,11 +90,25 @@
// CHECK-MESSAGES: [[@LINE-1]]:13: warning: 'find' called with a string literal
// CHECK-FIXES: Str.find(L'\x3A9');
+ // std::string_view and std::wstring_view should work.
+ std::string_view StrView;
+ StrView.find("n");
+ // CHECK-MESSAGES: [[@LINE-1]]:16: warning: 'find' called with a string literal
+ // CHECK-FIXES: StrView.find('n');
+ std::wstring_view WStrView;
+
+ WStrView.find(L"n");
+ // CHECK-MESSAGES: [[@LINE-1]]:17: warning: 'find' called with a string literal
+ // CHECK-FIXES: WStrView.find(L'n');
+ WStrView.find(L"\x3A9");
+ // CHECK-MESSAGES: [[@LINE-1]]:17: warning: 'find' called with a string literal
+ // CHECK-FIXES: WStrView.find(L'\x3A9');
+
// Also with other types, but only if it was specified in the options.
llvm::StringRef sr;
sr.find("x");
- // CHECK-MESSAGES: [[@LINE-1]]:11: warning: 'find' called with a string literal
- // CHECK-FIXES: sr.find('x');
+ // CHECK-MESSAGES-CUSTOM: [[@LINE-1]]:11: warning: 'find' called with a string literal
+ // CHECK-FIXES-CUSTOM: sr.find('x');
NotStringRef nsr;
nsr.find("x");
}
Index: clang-tools-extra/docs/clang-tidy/checks/performance-faster-string-find.rst
===================================================================
--- clang-tools-extra/docs/clang-tidy/checks/performance-faster-string-find.rst
+++ clang-tools-extra/docs/clang-tidy/checks/performance-faster-string-find.rst
@@ -23,6 +23,6 @@
.. option:: StringLikeClasses
Semicolon-separated list of names of string-like classes. By default only
- ``std::basic_string`` is considered. The list of methods to consired is
- fixed.
+ ``::std::basic_string`` and ``::std::basic_string_view`` are considered.
+ The list of methods to consired is fixed.
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -195,6 +195,11 @@
Changes in existing checks
^^^^^^^^^^^^^^^^^^^^^^^^^^
+- Improved :doc:'performance-faster-string-find
+ <clang-tidy/checks/performance-faster-string-find>` check.
+
+ Now checks ``std::basic_string_view`` by default.
+
- Improved :doc:'readability-identifier-naming
<clang-tidy/checks/readability-identifier-naming>` check.
Index: clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
+++ clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp
@@ -51,7 +51,8 @@
ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
StringLikeClasses(utils::options::parseStringList(
- Options.get("StringLikeClasses", "std::basic_string"))) {}
+ Options.get("StringLikeClasses",
+ "::std::basic_string;::std::basic_string_view"))) {}
void FasterStringFindCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "StringLikeClasses",
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits