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