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()109 void 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()142 void 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()153 void t() {}
154 #endif
155 } // namespace n42
156 } // namespace n41
157 // CHECK-FIXES: }
158 
main()159 int 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