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