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