xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/modernize/concat-nested-namespaces.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
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