diff options
author | Haojian Wu <hokein@google.com> | 2018-06-08 08:19:22 +0000 |
---|---|---|
committer | Haojian Wu <hokein@google.com> | 2018-06-08 08:19:22 +0000 |
commit | 07996a54ba6b4afad946aab09eeebb6cd9a44eeb (patch) | |
tree | 2777c92a1ccb89f7d59b5cf75234a16c3288407f /clang-tools-extra/test/clang-tidy/abseil-string-find-startswith.cpp | |
parent | 6fc37598119dcffe974838f1bd66d8777ba8a0b1 (diff) | |
download | bcm5719-llvm-07996a54ba6b4afad946aab09eeebb6cd9a44eeb.tar.gz bcm5719-llvm-07996a54ba6b4afad946aab09eeebb6cd9a44eeb.zip |
[clang-tidy] Improve string type matcher for abseil-string-find-starts-with check.
Summary:
This patch improves the check to match the desugared "string" type (so that it
can handle custom-implemented string classes), see the newly-added test.
Reviewers: alexfh
Subscribers: klimek, xazax.hun, cfe-commits
Differential Revision: https://reviews.llvm.org/D47704
llvm-svn: 334270
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/abseil-string-find-startswith.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/abseil-string-find-startswith.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/clang-tools-extra/test/clang-tidy/abseil-string-find-startswith.cpp b/clang-tools-extra/test/clang-tidy/abseil-string-find-startswith.cpp index 194e795be62..7d5fd73cb2b 100644 --- a/clang-tools-extra/test/clang-tidy/abseil-string-find-startswith.cpp +++ b/clang-tools-extra/test/clang-tidy/abseil-string-find-startswith.cpp @@ -1,4 +1,6 @@ -// RUN: %check_clang_tidy %s abseil-string-find-startswith %t +// RUN: %check_clang_tidy %s abseil-string-find-startswith %t -- \ +// RUN: -config="{CheckOptions: [{key: 'abseil-string-find-startswith.StringLikeClasses', value: '::std::basic_string;::basic_string'}]}" \ +// RUN: -- -std=c++11 namespace std { template <typename T> class allocator {}; @@ -15,14 +17,23 @@ struct basic_string { }; typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; + +struct cxx_string { + int find(const char *s, int pos = 0); +}; } // namespace std +struct basic_string : public std::cxx_string { + basic_string(); +}; +typedef basic_string global_string; + std::string foo(std::string); std::string bar(); #define A_MACRO(x, y) ((x) == (y)) -void tests(std::string s) { +void tests(std::string s, global_string s2) { 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");{{$}} @@ -47,6 +58,10 @@ void tests(std::string s) { // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use !absl::StartsWith // CHECK-FIXES: {{^[[:space:]]*}}!absl::StartsWith(s, "a");{{$}} + s2.find("a") == 0; + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use absl::StartsWith + // CHECK-FIXES: {{^[[:space:]]*}}absl::StartsWith(s2, "a");{{$}} + // expressions that don't trigger the check are here. A_MACRO(s.find("a"), 0); s.find("a", 1) == 0; |