// RUN: %check_clang_tidy -std=c++17 %s readability-isolate-declaration %t template struct pair { T1 first; T2 second; pair(T1 v1, T2 v2) : first(v1), second(v2) {} template decltype(auto) get() const { if constexpr (N == 0) return first; else if constexpr (N == 1) return second; } }; void forbidden_transformations() { if (int i = 42, j = i; i == j) ; switch (int i = 12, j = 14; i) ; auto [i, j] = pair(42, 42); } struct SomeClass { SomeClass() = default; SomeClass(int value); }; namespace std { template class initializer_list {}; template class vector { public: vector() = default; vector(initializer_list init) {} }; class string { public: string() = default; string(const char *) {} }; namespace string_literals { string operator""s(const char *, decltype(sizeof(int))) { return string(); } } // namespace string_literals } // namespace std namespace Types { typedef int MyType; } // namespace Types int touch1, touch2; void modern() { auto autoInt1 = 3, autoInt2 = 4; // CHECK-MESSAGES: [[@LINE-1]]:3: warning: multiple declarations in a single statement reduces readability // CHECK-FIXES: auto autoInt1 = 3; // CHECK-FIXES: {{^ }}auto autoInt2 = 4; decltype(int()) declnottouch = 4; decltype(int()) declint1 = 5, declint2 = 3; // CHECK-MESSAGES: [[@LINE-1]]:3: warning: multiple declarations in a single statement reduces readability // CHECK-FIXES: decltype(int()) declint1 = 5; // CHECK-FIXES: {{^ }}decltype(int()) declint2 = 3; std::vector vectorA = {1, 2}, vectorB = {1, 2, 3}, vectorC({1, 1, 1}); // CHECK-MESSAGES: [[@LINE-1]]:3: warning: multiple declarations in a single statement reduces readability // CHECK-FIXES: std::vector vectorA = {1, 2}; // CHECK-FIXES: {{^ }}std::vector vectorB = {1, 2, 3}; // CHECK-FIXES: {{^ }}std::vector vectorC({1, 1, 1}); using uType = int; uType utype1, utype2; // CHECK-MESSAGES: [[@LINE-1]]:3: warning: multiple declarations in a single statement reduces readability // CHECK-FIXES: uType utype1; // CHECK-FIXES: {{^ }}uType utype2; Types::MyType mytype1, mytype2, mytype3 = 3; // CHECK-MESSAGES: [[@LINE-1]]:3: warning: multiple declarations in a single statement reduces readability // CHECK-FIXES: Types::MyType mytype1; // CHECK-FIXES: {{^ }}Types::MyType mytype2; // CHECK-FIXES: {{^ }}Types::MyType mytype3 = 3; { using namespace std::string_literals; std::vector s{"foo"s, "bar"s}, t{"foo"s}, u, a({"hey", "you"}), bb = {"h", "a"}; // CHECK-MESSAGES: [[@LINE-1]]:5: warning: multiple declarations in a single statement reduces readability // CHECK-FIXES: std::vector s{"foo"s, "bar"s}; // CHECK-FIXES: {{^ }}std::vector t{"foo"s}; // CHECK-FIXES: {{^ }}std::vector u; // CHECK-FIXES: {{^ }}std::vector a({"hey", "you"}); // CHECK-FIXES: {{^ }}std::vector bb = {"h", "a"}; } }