xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-format-member.cpp (revision bbcb625798514f1cd6ef04818381d38ea26b23e5)
1*bbcb6257SMike Crowe // RUN: %check_clang_tidy %s modernize-use-std-format %t -- \
2*bbcb6257SMike Crowe // RUN:   -config="{CheckOptions: \
3*bbcb6257SMike Crowe // RUN:             { \
4*bbcb6257SMike Crowe // RUN:               modernize-use-std-format.StrFormatLikeFunctions: 'MyClass::StrFormat', \
5*bbcb6257SMike Crowe // RUN:               modernize-use-std-format.ReplacementFormatFunction: 'format', \
6*bbcb6257SMike Crowe // RUN:             } \
7*bbcb6257SMike Crowe // RUN:            }" \
8*bbcb6257SMike Crowe // RUN:   -- -isystem %clang_tidy_headers
9*bbcb6257SMike Crowe 
10*bbcb6257SMike Crowe #include <cstdio>
11*bbcb6257SMike Crowe #include <string.h>
12*bbcb6257SMike Crowe #include <string>
13*bbcb6257SMike Crowe 
14*bbcb6257SMike Crowe struct MyClass
15*bbcb6257SMike Crowe {
16*bbcb6257SMike Crowe   template <typename S, typename... Args>
17*bbcb6257SMike Crowe   std::string StrFormat(const S &format, const Args&... args);
18*bbcb6257SMike Crowe };
19*bbcb6257SMike Crowe 
20*bbcb6257SMike Crowe std::string StrFormat_simple(MyClass &myclass, MyClass *pmyclass) {
21*bbcb6257SMike Crowe   std::string s;
22*bbcb6257SMike Crowe 
23*bbcb6257SMike Crowe   s += myclass.StrFormat("MyClass::StrFormat dot %d", 42);
24*bbcb6257SMike Crowe   // CHECK-MESSAGES: [[@LINE-1]]:8: warning: use 'format' instead of 'StrFormat' [modernize-use-std-format]
25*bbcb6257SMike Crowe   // CHECK-FIXES: s += myclass.format("MyClass::StrFormat dot {}", 42);
26*bbcb6257SMike Crowe 
27*bbcb6257SMike Crowe   s += pmyclass->StrFormat("MyClass::StrFormat pointer %d", 43);
28*bbcb6257SMike Crowe   // CHECK-MESSAGES: [[@LINE-1]]:8: warning: use 'format' instead of 'StrFormat' [modernize-use-std-format]
29*bbcb6257SMike Crowe   // CHECK-FIXES: s += pmyclass->format("MyClass::StrFormat pointer {}", 43);
30*bbcb6257SMike Crowe 
31*bbcb6257SMike Crowe   s += (*pmyclass).StrFormat("MyClass::StrFormat deref pointer %d", 44);
32*bbcb6257SMike Crowe   // CHECK-MESSAGES: [[@LINE-1]]:8: warning: use 'format' instead of 'StrFormat' [modernize-use-std-format]
33*bbcb6257SMike Crowe   // CHECK-FIXES: s += (*pmyclass).format("MyClass::StrFormat deref pointer {}", 44);
34*bbcb6257SMike Crowe 
35*bbcb6257SMike Crowe   return s;
36*bbcb6257SMike Crowe }
37*bbcb6257SMike Crowe 
38*bbcb6257SMike Crowe struct MyDerivedClass : public MyClass {};
39*bbcb6257SMike Crowe 
40*bbcb6257SMike Crowe std::string StrFormat_derived(MyDerivedClass &derived) {
41*bbcb6257SMike Crowe   return derived.StrFormat("MyDerivedClass::StrFormat dot %d", 42);
42*bbcb6257SMike Crowe   // CHECK-MESSAGES: [[@LINE-1]]:10: warning: use 'format' instead of 'StrFormat' [modernize-use-std-format]
43*bbcb6257SMike Crowe   // CHECK-FIXES: return derived.format("MyDerivedClass::StrFormat dot {}", 42);
44*bbcb6257SMike Crowe }
45