https://github.com/nicovank updated https://github.com/llvm/llvm-project/pull/72283
>From a7361968b8a1acc48c4ef563c70f5c56f2633eac Mon Sep 17 00:00:00 2001 From: Nicolas van Kempen <nvankem...@fb.com> Date: Tue, 14 Nov 2023 08:31:05 -0800 Subject: [PATCH] [clang-tidy][abseil-string-find-startswith] Add string_view to default string-like classes --- .../abseil/StringFindStartswithCheck.cpp | 5 +++- .../abseil/string-find-startswith.cpp | 23 +++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp index b36144d1912fce0..d0527cba22a917d 100644 --- a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp +++ b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp @@ -19,11 +19,14 @@ using namespace clang::ast_matchers; namespace clang::tidy::abseil { +const auto DefaultStringLikeClasses = + "::std::basic_string; ::std::basic_string_view"; + StringFindStartswithCheck::StringFindStartswithCheck(StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context), StringLikeClasses(utils::options::parseStringList( - Options.get("StringLikeClasses", "::std::basic_string"))), + Options.get("StringLikeClasses", DefaultStringLikeClasses))), IncludeInserter(Options.getLocalOrGlobal("IncludeStyle", utils::IncludeSorter::IS_LLVM), areDiagsSelfContained()), diff --git a/clang-tools-extra/test/clang-tidy/checkers/abseil/string-find-startswith.cpp b/clang-tools-extra/test/clang-tidy/checkers/abseil/string-find-startswith.cpp index e51568077eda151..ae8d2daf736e979 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/abseil/string-find-startswith.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/abseil/string-find-startswith.cpp @@ -1,5 +1,5 @@ // RUN: %check_clang_tidy %s abseil-string-find-startswith %t -- \ -// RUN: -config="{CheckOptions: {abseil-string-find-startswith.StringLikeClasses: '::std::basic_string;::basic_string'}}" +// RUN: -config="{CheckOptions: {abseil-string-find-startswith.StringLikeClasses: '::std::basic_string;::std::basic_string_view;::basic_string'}}" using size_t = decltype(sizeof(int)); @@ -22,6 +22,21 @@ struct basic_string { typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; +template <typename C> +class basic_string_view { +public: + basic_string_view(); + basic_string_view(const basic_string_view &); + basic_string_view(const C *); + ~basic_string_view(); + int find(basic_string_view s, int pos = 0); + int find(const C *s, int pos = 0); + int find(const C *s, int pos, int n); + int find(char c, int pos = 0); + static constexpr size_t npos = -1; +}; +typedef basic_string_view<char> string_view; + struct cxx_string { int find(const char *s, int pos = 0); int rfind(const char *s, int pos = npos); @@ -39,7 +54,7 @@ std::string bar(); #define A_MACRO(x, y) ((x) == (y)) -void tests(std::string s, global_string s2) { +void tests(std::string s, global_string s2, std::string_view sv) { s.find("a") == 0; // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use absl::StartsWith instead of find() == 0 [abseil-string-find-startswith] // CHECK-FIXES: {{^[[:space:]]*}}absl::StartsWith(s, "a");{{$}} @@ -96,6 +111,10 @@ void tests(std::string s, global_string s2) { // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use absl::StartsWith // CHECK-FIXES: {{^[[:space:]]*}}absl::StartsWith(s2, "a");{{$}} + sv.find("a") == 0; + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use absl::StartsWith + // CHECK-FIXES: {{^[[:space:]]*}}absl::StartsWith(sv, "a");{{$}} + // expressions that don't trigger the check are here. A_MACRO(s.find("a"), 0); A_MACRO(s.rfind("a", 0), 0); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits