1*89a1d03eSRichard // RUN: cp %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h %T/modernize-concat-nested-namespaces.h 2*89a1d03eSRichard // RUN: %check_clang_tidy -std=c++17 %s modernize-concat-nested-namespaces %t -- -header-filter=".*" -- -I %T 3*89a1d03eSRichard // RUN: FileCheck -input-file=%T/modernize-concat-nested-namespaces.h %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h -check-prefix=CHECK-FIXES 4*89a1d03eSRichard // Restore header file and re-run with c++20: 5*89a1d03eSRichard // RUN: cp %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h %T/modernize-concat-nested-namespaces.h 6*89a1d03eSRichard // RUN: %check_clang_tidy -std=c++20 %s modernize-concat-nested-namespaces %t -- -header-filter=".*" -- -I %T 7*89a1d03eSRichard // RUN: FileCheck -input-file=%T/modernize-concat-nested-namespaces.h %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h -check-prefix=CHECK-FIXES 8*89a1d03eSRichard 9*89a1d03eSRichard #include "modernize-concat-nested-namespaces.h" 10*89a1d03eSRichard // CHECK-MESSAGES-DAG: modernize-concat-nested-namespaces.h:1:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 11*89a1d03eSRichard 12*89a1d03eSRichard namespace n1 {} 13*89a1d03eSRichard 14*89a1d03eSRichard namespace n2 { 15*89a1d03eSRichard namespace n3 { 16*89a1d03eSRichard void t(); 17*89a1d03eSRichard } 18*89a1d03eSRichard namespace n4 { 19*89a1d03eSRichard void t(); 20*89a1d03eSRichard } 21*89a1d03eSRichard } // namespace n2 22*89a1d03eSRichard 23*89a1d03eSRichard namespace n5 { 24*89a1d03eSRichard inline namespace n6 { 25*89a1d03eSRichard void t(); 26*89a1d03eSRichard } 27*89a1d03eSRichard } // namespace n5 28*89a1d03eSRichard 29*89a1d03eSRichard namespace n7 { 30*89a1d03eSRichard void t(); 31*89a1d03eSRichard 32*89a1d03eSRichard namespace n8 { 33*89a1d03eSRichard void t(); 34*89a1d03eSRichard } 35*89a1d03eSRichard } // namespace n7 36*89a1d03eSRichard 37*89a1d03eSRichard namespace n9 { 38*89a1d03eSRichard namespace n10 { 39*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 40*89a1d03eSRichard // CHECK-FIXES: namespace n9::n10 41*89a1d03eSRichard void t(); 42*89a1d03eSRichard } // namespace n10 43*89a1d03eSRichard } // namespace n9 44*89a1d03eSRichard // CHECK-FIXES: } 45*89a1d03eSRichard 46*89a1d03eSRichard namespace n11 { 47*89a1d03eSRichard namespace n12 { 48*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 49*89a1d03eSRichard // CHECK-FIXES: namespace n11::n12 50*89a1d03eSRichard namespace n13 { 51*89a1d03eSRichard void t(); 52*89a1d03eSRichard } 53*89a1d03eSRichard namespace n14 { 54*89a1d03eSRichard void t(); 55*89a1d03eSRichard } 56*89a1d03eSRichard } // namespace n12 57*89a1d03eSRichard } // namespace n11 58*89a1d03eSRichard // CHECK-FIXES: } 59*89a1d03eSRichard 60*89a1d03eSRichard namespace n15 { 61*89a1d03eSRichard namespace n16 { 62*89a1d03eSRichard void t(); 63*89a1d03eSRichard } 64*89a1d03eSRichard 65*89a1d03eSRichard inline namespace n17 { 66*89a1d03eSRichard void t(); 67*89a1d03eSRichard } 68*89a1d03eSRichard 69*89a1d03eSRichard namespace n18 { 70*89a1d03eSRichard namespace n19 { 71*89a1d03eSRichard namespace n20 { 72*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-3]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 73*89a1d03eSRichard // CHECK-FIXES: namespace n18::n19::n20 74*89a1d03eSRichard void t(); 75*89a1d03eSRichard } // namespace n20 76*89a1d03eSRichard } // namespace n19 77*89a1d03eSRichard } // namespace n18 78*89a1d03eSRichard // CHECK-FIXES: } 79*89a1d03eSRichard 80*89a1d03eSRichard namespace n21 { 81*89a1d03eSRichard void t(); 82*89a1d03eSRichard } 83*89a1d03eSRichard } // namespace n15 84*89a1d03eSRichard 85*89a1d03eSRichard namespace n22 { 86*89a1d03eSRichard namespace { 87*89a1d03eSRichard void t(); 88*89a1d03eSRichard } 89*89a1d03eSRichard } // namespace n22 90*89a1d03eSRichard 91*89a1d03eSRichard namespace n23 { 92*89a1d03eSRichard namespace { 93*89a1d03eSRichard namespace n24 { 94*89a1d03eSRichard namespace n25 { 95*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 96*89a1d03eSRichard // CHECK-FIXES: namespace n24::n25 97*89a1d03eSRichard void t(); 98*89a1d03eSRichard } // namespace n25 99*89a1d03eSRichard } // namespace n24 100*89a1d03eSRichard // CHECK-FIXES: } 101*89a1d03eSRichard } // namespace 102*89a1d03eSRichard } // namespace n23 103*89a1d03eSRichard 104*89a1d03eSRichard namespace n26::n27 { 105*89a1d03eSRichard namespace n28 { 106*89a1d03eSRichard namespace n29::n30 { 107*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-3]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 108*89a1d03eSRichard // CHECK-FIXES: namespace n26::n27::n28::n29::n30 109*89a1d03eSRichard void t() {} 110*89a1d03eSRichard } // namespace n29::n30 111*89a1d03eSRichard } // namespace n28 112*89a1d03eSRichard } // namespace n26::n27 113*89a1d03eSRichard // CHECK-FIXES: } 114*89a1d03eSRichard 115*89a1d03eSRichard namespace n31 { 116*89a1d03eSRichard namespace n32 {} 117*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 118*89a1d03eSRichard } // namespace n31 119*89a1d03eSRichard // CHECK-FIXES-EMPTY 120*89a1d03eSRichard 121*89a1d03eSRichard namespace n33 { 122*89a1d03eSRichard namespace n34 { 123*89a1d03eSRichard namespace n35 {} 124*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 125*89a1d03eSRichard } // namespace n34 126*89a1d03eSRichard // CHECK-FIXES-EMPTY 127*89a1d03eSRichard namespace n36 { 128*89a1d03eSRichard void t(); 129*89a1d03eSRichard } 130*89a1d03eSRichard } // namespace n33 131*89a1d03eSRichard 132*89a1d03eSRichard namespace n37::n38 { 133*89a1d03eSRichard void t(); 134*89a1d03eSRichard } 135*89a1d03eSRichard 136*89a1d03eSRichard #define IEXIST 137*89a1d03eSRichard namespace n39 { 138*89a1d03eSRichard namespace n40 { 139*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 140*89a1d03eSRichard // CHECK-FIXES: namespace n39::n40 141*89a1d03eSRichard #ifdef IEXIST 142*89a1d03eSRichard void t() {} 143*89a1d03eSRichard #endif 144*89a1d03eSRichard } // namespace n40 145*89a1d03eSRichard } // namespace n39 146*89a1d03eSRichard // CHECK-FIXES: } 147*89a1d03eSRichard 148*89a1d03eSRichard namespace n41 { 149*89a1d03eSRichard namespace n42 { 150*89a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 151*89a1d03eSRichard // CHECK-FIXES: namespace n41::n42 152*89a1d03eSRichard #ifdef IDONTEXIST 153*89a1d03eSRichard void t() {} 154*89a1d03eSRichard #endif 155*89a1d03eSRichard } // namespace n42 156*89a1d03eSRichard } // namespace n41 157*89a1d03eSRichard // CHECK-FIXES: } 158*89a1d03eSRichard 159*89a1d03eSRichard int main() { 160*89a1d03eSRichard n26::n27::n28::n29::n30::t(); 161*89a1d03eSRichard #ifdef IEXIST 162*89a1d03eSRichard n39::n40::t(); 163*89a1d03eSRichard #endif 164*89a1d03eSRichard 165*89a1d03eSRichard #ifdef IDONTEXIST 166*89a1d03eSRichard n41::n42::t(); 167*89a1d03eSRichard #endif 168*89a1d03eSRichard 169*89a1d03eSRichard return 0; 170*89a1d03eSRichard } 171