189a1d03eSRichard // RUN: cp %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h %T/modernize-concat-nested-namespaces.h 289a1d03eSRichard // RUN: %check_clang_tidy -std=c++17 %s modernize-concat-nested-namespaces %t -- -header-filter=".*" -- -I %T 389a1d03eSRichard // RUN: FileCheck -input-file=%T/modernize-concat-nested-namespaces.h %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h -check-prefix=CHECK-FIXES 489a1d03eSRichard // Restore header file and re-run with c++20: 589a1d03eSRichard // RUN: cp %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h %T/modernize-concat-nested-namespaces.h 689a1d03eSRichard // RUN: %check_clang_tidy -std=c++20 %s modernize-concat-nested-namespaces %t -- -header-filter=".*" -- -I %T 789a1d03eSRichard // RUN: FileCheck -input-file=%T/modernize-concat-nested-namespaces.h %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h -check-prefix=CHECK-FIXES 889a1d03eSRichard 989a1d03eSRichard #include "modernize-concat-nested-namespaces.h" 1089a1d03eSRichard // CHECK-MESSAGES-DAG: modernize-concat-nested-namespaces.h:1:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 1189a1d03eSRichard 1289a1d03eSRichard namespace n1 {} 1389a1d03eSRichard 1489a1d03eSRichard namespace n2 { 1589a1d03eSRichard namespace n3 { 1689a1d03eSRichard void t(); 1789a1d03eSRichard } 1889a1d03eSRichard namespace n4 { 1989a1d03eSRichard void t(); 2089a1d03eSRichard } 2189a1d03eSRichard } // namespace n2 2289a1d03eSRichard 2389a1d03eSRichard namespace n5 { 24*bdf7fd82SCongcong Cai inline namespace inline_ns { 2589a1d03eSRichard void t(); 26*bdf7fd82SCongcong Cai } // namespace inline_ns 2789a1d03eSRichard } // namespace n5 2889a1d03eSRichard 29*bdf7fd82SCongcong Cai namespace n6 { 30*bdf7fd82SCongcong Cai namespace [[deprecated]] attr_ns { 31*bdf7fd82SCongcong Cai void t(); 32*bdf7fd82SCongcong Cai } // namespace attr_ns 33*bdf7fd82SCongcong Cai } // namespace n6 34*bdf7fd82SCongcong Cai 3589a1d03eSRichard namespace n7 { 3689a1d03eSRichard void t(); 3789a1d03eSRichard 3889a1d03eSRichard namespace n8 { 3989a1d03eSRichard void t(); 4089a1d03eSRichard } 4189a1d03eSRichard } // namespace n7 4289a1d03eSRichard 4389a1d03eSRichard namespace n9 { 4489a1d03eSRichard namespace n10 { 4589a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 4689a1d03eSRichard // CHECK-FIXES: namespace n9::n10 4789a1d03eSRichard void t(); 4889a1d03eSRichard } // namespace n10 4989a1d03eSRichard } // namespace n9 5089a1d03eSRichard // CHECK-FIXES: } 5189a1d03eSRichard 5289a1d03eSRichard namespace n11 { 5389a1d03eSRichard namespace n12 { 5489a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 5589a1d03eSRichard // CHECK-FIXES: namespace n11::n12 5689a1d03eSRichard namespace n13 { 5789a1d03eSRichard void t(); 5889a1d03eSRichard } 5989a1d03eSRichard namespace n14 { 6089a1d03eSRichard void t(); 6189a1d03eSRichard } 6289a1d03eSRichard } // namespace n12 6389a1d03eSRichard } // namespace n11 6489a1d03eSRichard // CHECK-FIXES: } 6589a1d03eSRichard 6689a1d03eSRichard namespace n15 { 6789a1d03eSRichard namespace n16 { 6889a1d03eSRichard void t(); 6989a1d03eSRichard } 7089a1d03eSRichard 7189a1d03eSRichard inline namespace n17 { 7289a1d03eSRichard void t(); 7389a1d03eSRichard } 7489a1d03eSRichard 7589a1d03eSRichard namespace n18 { 7689a1d03eSRichard namespace n19 { 7789a1d03eSRichard namespace n20 { 7889a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-3]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 7989a1d03eSRichard // CHECK-FIXES: namespace n18::n19::n20 8089a1d03eSRichard void t(); 8189a1d03eSRichard } // namespace n20 8289a1d03eSRichard } // namespace n19 8389a1d03eSRichard } // namespace n18 8489a1d03eSRichard // CHECK-FIXES: } 8589a1d03eSRichard 8689a1d03eSRichard namespace n21 { 8789a1d03eSRichard void t(); 8889a1d03eSRichard } 8989a1d03eSRichard } // namespace n15 9089a1d03eSRichard 9189a1d03eSRichard namespace n22 { 9289a1d03eSRichard namespace { 9389a1d03eSRichard void t(); 9489a1d03eSRichard } 9589a1d03eSRichard } // namespace n22 9689a1d03eSRichard 9789a1d03eSRichard namespace n23 { 9889a1d03eSRichard namespace { 9989a1d03eSRichard namespace n24 { 10089a1d03eSRichard namespace n25 { 10189a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 10289a1d03eSRichard // CHECK-FIXES: namespace n24::n25 10389a1d03eSRichard void t(); 10489a1d03eSRichard } // namespace n25 10589a1d03eSRichard } // namespace n24 10689a1d03eSRichard // CHECK-FIXES: } 10789a1d03eSRichard } // namespace 10889a1d03eSRichard } // namespace n23 10989a1d03eSRichard 11089a1d03eSRichard namespace n26::n27 { 11189a1d03eSRichard namespace n28 { 11289a1d03eSRichard namespace n29::n30 { 11389a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-3]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 1140f9b71d1SCongcong Cai // CHECK-FIXES: namespace n26::n27::n28::n29::n30 { 11589a1d03eSRichard void t() {} 11689a1d03eSRichard } // namespace n29::n30 11789a1d03eSRichard } // namespace n28 11889a1d03eSRichard } // namespace n26::n27 11989a1d03eSRichard // CHECK-FIXES: } 12089a1d03eSRichard 12189a1d03eSRichard namespace n31 { 12289a1d03eSRichard namespace n32 {} 12389a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 12489a1d03eSRichard } // namespace n31 12589a1d03eSRichard // CHECK-FIXES-EMPTY 12689a1d03eSRichard 12789a1d03eSRichard namespace n33 { 12889a1d03eSRichard namespace n34 { 12989a1d03eSRichard namespace n35 {} 13089a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 13189a1d03eSRichard } // namespace n34 13289a1d03eSRichard // CHECK-FIXES-EMPTY 13389a1d03eSRichard namespace n36 { 13489a1d03eSRichard void t(); 13589a1d03eSRichard } 13689a1d03eSRichard } // namespace n33 13789a1d03eSRichard 13889a1d03eSRichard namespace n37::n38 { 13989a1d03eSRichard void t(); 14089a1d03eSRichard } 14189a1d03eSRichard 14289a1d03eSRichard #define IEXIST 14389a1d03eSRichard namespace n39 { 14489a1d03eSRichard namespace n40 { 14589a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 14689a1d03eSRichard // CHECK-FIXES: namespace n39::n40 14789a1d03eSRichard #ifdef IEXIST 14889a1d03eSRichard void t() {} 14989a1d03eSRichard #endif 15089a1d03eSRichard } // namespace n40 15189a1d03eSRichard } // namespace n39 15292910a51SCongcong Cai // CHECK-FIXES: } // namespace n39::n40 15389a1d03eSRichard 15489a1d03eSRichard namespace n41 { 15589a1d03eSRichard namespace n42 { 15689a1d03eSRichard // CHECK-MESSAGES-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 15789a1d03eSRichard // CHECK-FIXES: namespace n41::n42 15889a1d03eSRichard #ifdef IDONTEXIST 15989a1d03eSRichard void t() {} 16089a1d03eSRichard #endif 16189a1d03eSRichard } // namespace n42 16289a1d03eSRichard } // namespace n41 16392910a51SCongcong Cai // CHECK-FIXES: } // namespace n41::n42 16492910a51SCongcong Cai 16592910a51SCongcong Cai 16692910a51SCongcong Cai // CHECK-MESSAGES-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 16792910a51SCongcong Cai namespace n43 { 16892910a51SCongcong Cai #define N43_INNER 16992910a51SCongcong Cai namespace n44 { 17092910a51SCongcong Cai void foo() {} 17192910a51SCongcong Cai } // namespace n44 17292910a51SCongcong Cai #undef N43_INNER 17392910a51SCongcong Cai } // namespace n43 17492910a51SCongcong Cai // CHECK-FIXES: #define N43_INNER 17592910a51SCongcong Cai // CHECK-FIXES: namespace n43::n44 { 17692910a51SCongcong Cai // CHECK-FIXES: } // namespace n43::n44 17792910a51SCongcong Cai // CHECK-FIXES: #undef N43_INNER 17892910a51SCongcong Cai 17992910a51SCongcong Cai // CHECK-MESSAGES-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 18092910a51SCongcong Cai namespace n45{ 18192910a51SCongcong Cai #define N45_INNER 18292910a51SCongcong Cai namespace n46 18392910a51SCongcong Cai { 18492910a51SCongcong Cai #pragma clang diagnostic push 18592910a51SCongcong Cai namespace n47 { 18692910a51SCongcong Cai void foo() {} 18792910a51SCongcong Cai } // namespace n47 18892910a51SCongcong Cai #pragma clang diagnostic pop 18992910a51SCongcong Cai } //namespace n46 19092910a51SCongcong Cai #undef N45_INNER 19192910a51SCongcong Cai } //namespace n45 19292910a51SCongcong Cai // CHECK-FIXES: #define N45_INNER 19392910a51SCongcong Cai // CHECK-FIXES: #pragma clang diagnostic push 19492910a51SCongcong Cai // CHECK-FIXES: namespace n45::n46::n47 { 19592910a51SCongcong Cai // CHECK-FIXES: } // namespace n45::n46::n47 19692910a51SCongcong Cai // CHECK-FIXES: #pragma clang diagnostic pop 19792910a51SCongcong Cai // CHECK-FIXES: #undef N45_INNER 19892910a51SCongcong Cai 19992910a51SCongcong Cai // CHECK-MESSAGES-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 20092910a51SCongcong Cai namespace avoid_add_close_comment { 20192910a51SCongcong Cai namespace inner { 20292910a51SCongcong Cai void foo() {} 20392910a51SCongcong Cai } 20492910a51SCongcong Cai } 20592910a51SCongcong Cai // CHECK-FIXES: namespace avoid_add_close_comment::inner { 20692910a51SCongcong Cai // CHECK-FIXES-NOT: } // namespace avoid_add_close_comment::inner 20792910a51SCongcong Cai 20892910a51SCongcong Cai // CHECK-MESSAGES-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] 20992910a51SCongcong Cai namespace avoid_change_close_comment { 21092910a51SCongcong Cai namespace inner { 21192910a51SCongcong Cai void foo() {} 21292910a51SCongcong Cai } // namespace inner and other comments 21392910a51SCongcong Cai } // namespace avoid_change_close_comment and other comments 21492910a51SCongcong Cai // CHECK-FIXES: namespace avoid_change_close_comment::inner { 21592910a51SCongcong Cai // CHECK-FIXES-NOT: } // namespace avoid_add_close_comment::inner 21689a1d03eSRichard 21789a1d03eSRichard int main() { 21889a1d03eSRichard n26::n27::n28::n29::n30::t(); 21989a1d03eSRichard #ifdef IEXIST 22089a1d03eSRichard n39::n40::t(); 22189a1d03eSRichard #endif 22289a1d03eSRichard 22389a1d03eSRichard #ifdef IDONTEXIST 22489a1d03eSRichard n41::n42::t(); 22589a1d03eSRichard #endif 22689a1d03eSRichard 22789a1d03eSRichard return 0; 22889a1d03eSRichard } 229