| // RUN: cp %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h %T/modernize-concat-nested-namespaces.h |
| // RUN: %check_clang_tidy -std=c++17 -check-suffix=NORMAL %s modernize-concat-nested-namespaces %t -- -header-filter=".*" -- -I %T |
| // RUN: FileCheck -input-file=%T/modernize-concat-nested-namespaces.h %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h -check-prefix=CHECK-FIXES |
| // Restore header file and re-run with c++20: |
| // RUN: cp %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h %T/modernize-concat-nested-namespaces.h |
| // RUN: %check_clang_tidy -std=c++20 -check-suffixes=NORMAL,CPP20 %s modernize-concat-nested-namespaces %t -- -header-filter=".*" -- -I %T |
| // RUN: FileCheck -input-file=%T/modernize-concat-nested-namespaces.h %S/Inputs/concat-nested-namespaces/modernize-concat-nested-namespaces.h -check-prefix=CHECK-FIXES |
| |
| #include "modernize-concat-nested-namespaces.h" |
| // CHECK-MESSAGES-NORMAL-DAG: modernize-concat-nested-namespaces.h:1:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| |
| namespace n1 {} |
| |
| namespace n2 { |
| namespace n3 { |
| void t(); |
| } |
| namespace n4 { |
| void t(); |
| } |
| } // namespace n2 |
| |
| namespace n6 { |
| namespace [[deprecated]] attr_ns { |
| void t(); |
| } // namespace attr_ns |
| } // namespace n6 |
| |
| namespace n7 { |
| void t(); |
| |
| namespace n8 { |
| void t(); |
| } |
| } // namespace n7 |
| |
| namespace n9 { |
| namespace n10 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| // CHECK-FIXES-NORMAL: namespace n9::n10 |
| void t(); |
| } // namespace n10 |
| } // namespace n9 |
| // CHECK-FIXES-NORMAL: } |
| |
| namespace n11 { |
| namespace n12 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| // CHECK-FIXES-NORMAL: namespace n11::n12 |
| namespace n13 { |
| void t(); |
| } |
| namespace n14 { |
| void t(); |
| } |
| } // namespace n12 |
| } // namespace n11 |
| // CHECK-FIXES-NORMAL: } |
| |
| namespace n15 { |
| namespace n16 { |
| void t(); |
| } |
| |
| inline namespace n17 { |
| void t(); |
| } |
| |
| namespace n18 { |
| namespace n19 { |
| namespace n20 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-3]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| // CHECK-FIXES-NORMAL: namespace n18::n19::n20 |
| void t(); |
| } // namespace n20 |
| } // namespace n19 |
| } // namespace n18 |
| // CHECK-FIXES-NORMAL: } |
| |
| namespace n21 { |
| void t(); |
| } |
| } // namespace n15 |
| |
| namespace n22 { |
| namespace { |
| void t(); |
| } |
| } // namespace n22 |
| |
| namespace n23 { |
| namespace { |
| namespace n24 { |
| namespace n25 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| // CHECK-FIXES-NORMAL: namespace n24::n25 |
| void t(); |
| } // namespace n25 |
| } // namespace n24 |
| // CHECK-FIXES-NORMAL: } |
| } // namespace |
| } // namespace n23 |
| |
| namespace n26::n27 { |
| namespace n28 { |
| namespace n29::n30 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-3]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| // CHECK-FIXES-NORMAL: namespace n26::n27::n28::n29::n30 { |
| void t() {} |
| } // namespace n29::n30 |
| } // namespace n28 |
| } // namespace n26::n27 |
| // CHECK-FIXES-NORMAL: } |
| |
| namespace n31 { |
| namespace n32 {} |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| } // namespace n31 |
| |
| namespace n33 { |
| namespace n34 { |
| namespace n35 {} |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| } // namespace n34 |
| namespace n36 { |
| void t(); |
| } |
| } // namespace n33 |
| |
| namespace n37::n38 { |
| void t(); |
| } |
| |
| #define IEXIST |
| namespace n39 { |
| namespace n40 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| // CHECK-FIXES-NORMAL: namespace n39::n40 |
| #ifdef IEXIST |
| void t() {} |
| #endif |
| } // namespace n40 |
| } // namespace n39 |
| // CHECK-FIXES-NORMAL: } // namespace n39::n40 |
| |
| namespace n41 { |
| namespace n42 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE-2]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| // CHECK-FIXES-NORMAL: namespace n41::n42 |
| #ifdef IDONTEXIST |
| void t() {} |
| #endif |
| } // namespace n42 |
| } // namespace n41 |
| // CHECK-FIXES-NORMAL: } // namespace n41::n42 |
| |
| |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace n43 { |
| #define N43_INNER |
| namespace n44 { |
| void foo() {} |
| } // namespace n44 |
| #undef N43_INNER |
| } // namespace n43 |
| // CHECK-FIXES-NORMAL: #define N43_INNER |
| // CHECK-FIXES-NORMAL: namespace n43::n44 { |
| // CHECK-FIXES-NORMAL: } // namespace n43::n44 |
| // CHECK-FIXES-NORMAL: #undef N43_INNER |
| |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace n45{ |
| #define N45_INNER |
| namespace n46 |
| { |
| #pragma clang diagnostic push |
| namespace n47 { |
| void foo() {} |
| } // namespace n47 |
| #pragma clang diagnostic pop |
| } //namespace n46 |
| #undef N45_INNER |
| } //namespace n45 |
| // CHECK-FIXES-NORMAL: #define N45_INNER |
| // CHECK-FIXES-NORMAL: #pragma clang diagnostic push |
| // CHECK-FIXES-NORMAL: namespace n45::n46::n47 { |
| // CHECK-FIXES-NORMAL: } // namespace n45::n46::n47 |
| // CHECK-FIXES-NORMAL: #pragma clang diagnostic pop |
| // CHECK-FIXES-NORMAL: #undef N45_INNER |
| |
| inline namespace n48 { |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace n49 { |
| namespace n50 { |
| // CHECK-FIXES-NORMAL: namespace n49::n50 { |
| void foo() {} |
| } |
| } |
| } |
| |
| // CHECK-MESSAGES-CPP20-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace n51 { |
| inline namespace n52 { |
| namespace n53 { |
| // CHECK-FIXES-CPP20: namespace n51::inline n52::n53 { |
| void foo() {} |
| } |
| } |
| } |
| |
| #if __cplusplus >= 202002L |
| // CHECK-MESSAGES-CPP20-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace n54 { |
| namespace n55::inline n56::n57 { |
| namespace n58 { |
| // CHECK-FIXES-CPP20: namespace n54::n55::inline n56::n57::n58 { |
| void foo() {} |
| } |
| } |
| } |
| #endif |
| |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace avoid_add_close_comment { |
| namespace inner { |
| void foo() {} |
| } |
| } |
| // CHECK-FIXES-NORMAL: namespace avoid_add_close_comment::inner { |
| // CHECK-FIXES-NORMAL-NOT: } // namespace avoid_add_close_comment::inner |
| |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace avoid_change_close_comment { |
| namespace inner { |
| void foo() {} |
| } // namespace inner and other comments |
| } // namespace avoid_change_close_comment and other comments |
| // CHECK-FIXES-NORMAL: namespace avoid_change_close_comment::inner { |
| // CHECK-FIXES-NORMAL-NOT: } // namespace avoid_add_close_comment::inner |
| |
| namespace /*::*/ comment_colon_1 { |
| void foo() {} |
| } // namespace comment_colon_1 |
| // CHECK-FIXES-NORMAL: namespace /*::*/ comment_colon_1 { |
| |
| // CHECK-MESSAGES-NORMAL-DAG: :[[@LINE+1]]:1: warning: nested namespaces can be concatenated [modernize-concat-nested-namespaces] |
| namespace /*::*/ comment_colon_2 { |
| namespace comment_colon_2 { |
| void foo() {} |
| } // namespace comment_colon_2 |
| } // namespace comment_colon_2 |
| |
| int main() { |
| n26::n27::n28::n29::n30::t(); |
| #ifdef IEXIST |
| n39::n40::t(); |
| #endif |
| |
| #ifdef IDONTEXIST |
| n41::n42::t(); |
| #endif |
| |
| return 0; |
| } |