Author: Mike Crowe Date: 2023-03-05T17:16:20Z New Revision: ae25e2f19decb94198301f0726ee613f945cc405
URL: https://github.com/llvm/llvm-project/commit/ae25e2f19decb94198301f0726ee613f945cc405 DIFF: https://github.com/llvm/llvm-project/commit/ae25e2f19decb94198301f0726ee613f945cc405.diff LOG: [clang-tidy] Extract string header from redundant-string-cstr checker In preparation for using the implementation of basic_string and basic_string_view from redundant-string-cstr.cpp in other checks, let's extract it to a header. Using the existing <string.h> to provide size_t, using that to define size_type and using it rather than the previous "size" type makes it easier to provide the size() method later and makes the implementation closer to the standard. Reviewed By: carlosgalvezp Differential Revision: https://reviews.llvm.org/D144216 Added: clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string Modified: clang-tools-extra/test/clang-tidy/checkers/readability/redundant-string-cstr.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string b/clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string new file mode 100644 index 0000000000000..614480968f2aa --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string @@ -0,0 +1,74 @@ +#ifndef _STRING_ +#define _STRING_ + +// For size_t +#include <string.h> + +typedef unsigned __INT16_TYPE__ char16; +typedef unsigned __INT32_TYPE__ char32; + +namespace std { +template <typename T> +class allocator {}; +template <typename T> +class char_traits {}; +template <typename C, typename T, typename A> +struct basic_string { + typedef size_t size_type; + typedef basic_string<C, T, A> _Type; + basic_string(); + basic_string(const C *p, const A &a = A()); + + ~basic_string(); + + const C *c_str() const; + const C *data() const; + + _Type& append(const C *s); + _Type& append(const C *s, size_type n); + _Type& assign(const C *s); + _Type& assign(const C *s, size_type n); + + int compare(const _Type&) const; + int compare(const C* s) const; + int compare(size_type pos, size_type len, const _Type&) const; + int compare(size_type pos, size_type len, const C* s) const; + + size_type find(const _Type& str, size_type pos = 0) const; + size_type find(const C* s, size_type pos = 0) const; + size_type find(const C* s, size_type pos, size_type n) const; + + _Type& insert(size_type pos, const _Type& str); + _Type& insert(size_type pos, const C* s); + _Type& insert(size_type pos, const C* s, size_type n); + + _Type& operator+=(const _Type& str); + _Type& operator+=(const C* s); + _Type& operator=(const _Type& str); + _Type& operator=(const C* s); +}; + +typedef basic_string<char, std::char_traits<char>, std::allocator<char>> string; +typedef basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>> wstring; +typedef basic_string<char16, std::char_traits<char16>, std::allocator<char16>> u16string; +typedef basic_string<char32, std::char_traits<char32>, std::allocator<char32>> u32string; + +template <typename C, typename T> +struct basic_string_view { + basic_string_view(const C* s); +}; +typedef basic_string_view<char, std::char_traits<char>> string_view; +typedef basic_string_view<wchar_t, std::char_traits<wchar_t>> wstring_view; +typedef basic_string_view<char16, std::char_traits<char16>> u16string_view; +typedef basic_string_view<char32, std::char_traits<char32>> u32string_view; + +std::string operator+(const std::string&, const std::string&); +std::string operator+(const std::string&, const char*); +std::string operator+(const char*, const std::string&); + +bool operator==(const std::string&, const std::string&); +bool operator==(const std::string&, const char*); +bool operator==(const char*, const std::string&); +} + +#endif // _STRING_ diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-string-cstr.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-string-cstr.cpp index ed50ad16f2423..2b6d290a4aff6 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-string-cstr.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-string-cstr.cpp @@ -1,71 +1,5 @@ -// RUN: %check_clang_tidy %s readability-redundant-string-cstr %t - -typedef unsigned __INT16_TYPE__ char16; -typedef unsigned __INT32_TYPE__ char32; -typedef __SIZE_TYPE__ size; - -namespace std { -template <typename T> -class allocator {}; -template <typename T> -class char_traits {}; -template <typename C, typename T, typename A> -struct basic_string { - typedef basic_string<C, T, A> _Type; - basic_string(); - basic_string(const C *p, const A &a = A()); - - ~basic_string(); - - const C *c_str() const; - const C *data() const; - - _Type& append(const C *s); - _Type& append(const C *s, size n); - _Type& assign(const C *s); - _Type& assign(const C *s, size n); - - int compare(const _Type&) const; - int compare(const C* s) const; - int compare(size pos, size len, const _Type&) const; - int compare(size pos, size len, const C* s) const; - - size find(const _Type& str, size pos = 0) const; - size find(const C* s, size pos = 0) const; - size find(const C* s, size pos, size n) const; - - _Type& insert(size pos, const _Type& str); - _Type& insert(size pos, const C* s); - _Type& insert(size pos, const C* s, size n); - - _Type& operator+=(const _Type& str); - _Type& operator+=(const C* s); - _Type& operator=(const _Type& str); - _Type& operator=(const C* s); -}; - -typedef basic_string<char, std::char_traits<char>, std::allocator<char>> string; -typedef basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>> wstring; -typedef basic_string<char16, std::char_traits<char16>, std::allocator<char16>> u16string; -typedef basic_string<char32, std::char_traits<char32>, std::allocator<char32>> u32string; - -template <typename C, typename T> -struct basic_string_view { - basic_string_view(const C* s); -}; -typedef basic_string_view<char, std::char_traits<char>> string_view; -typedef basic_string_view<wchar_t, std::char_traits<wchar_t>> wstring_view; -typedef basic_string_view<char16, std::char_traits<char16>> u16string_view; -typedef basic_string_view<char32, std::char_traits<char32>> u32string_view; -} - -std::string operator+(const std::string&, const std::string&); -std::string operator+(const std::string&, const char*); -std::string operator+(const char*, const std::string&); - -bool operator==(const std::string&, const std::string&); -bool operator==(const std::string&, const char*); -bool operator==(const char*, const std::string&); +// RUN: %check_clang_tidy %s readability-redundant-string-cstr %t -- -- -isystem %clang_tidy_headers +#include <string> namespace llvm { struct StringRef { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits