diff options
author | Nico Weber <nicolasweber@gmx.de> | 2019-07-23 17:49:45 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2019-07-23 17:49:45 +0000 |
commit | 37944130f950ffb8f14cb7fe1a8ba3ca0d9f097c (patch) | |
tree | ea062784f3fb1882b725678fa27d939bbabf871a /clang/unittests | |
parent | 93f505942c8091a3ebbf6f08764635f19dc79095 (diff) | |
download | bcm5719-llvm-37944130f950ffb8f14cb7fe1a8ba3ca0d9f097c.tar.gz bcm5719-llvm-37944130f950ffb8f14cb7fe1a8ba3ca0d9f097c.zip |
clang-format: Fix namespace end comments for namespaces with attributes and macros.
Fixes PR39247.
While here, also make C++20 `namespace A::inline B::inline C` nested
inline namespaced definitions work.
Before:
#define DEPRECATE_WOOF [[deprecated("meow")]]
namespace DEPRECATE_WOOF woof {
void f() {}
} // namespace DEPRECATE_WOOFwoof
namespace [[deprecated("meow")]] woof {
void f() {}
} // namespace [[deprecated("meow")]]woof
namespace woof::inline bark {
void f() {}
} // namespace woof::inlinebark
Now:
#define DEPRECATE_WOOF [[deprecated("meow")]]
namespace DEPRECATE_WOOF woof {
void f() {}
} // namespace woof
namespace [[deprecated("meow")]] woof {
void f() {}
} // namespace woof
namespace woof::inline bark {
void f() {}
} // namespace woof::inline bark
(In addition to the fixed namespace end comments, also note the correct
indent of the namespace contents.)
Differential Revision: https://reviews.llvm.org/D65125
llvm-svn: 366831
Diffstat (limited to 'clang/unittests')
-rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 15 | ||||
-rw-r--r-- | clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp | 41 |
2 files changed, 55 insertions, 1 deletions
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 463b9213a04..614e81e333a 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -1782,6 +1782,21 @@ TEST_F(FormatTest, FormatsNamespaces) { "void f() { f(); }\n" "}", LLVMWithNoNamespaceFix); + verifyFormat("namespace N::inline D {\n" + "class A {};\n" + "void f() { f(); }\n" + "}", + LLVMWithNoNamespaceFix); + verifyFormat("namespace N::inline D::E {\n" + "class A {};\n" + "void f() { f(); }\n" + "}", + LLVMWithNoNamespaceFix); + verifyFormat("namespace [[deprecated(\"foo[bar\")]] some_namespace {\n" + "class A {};\n" + "void f() { f(); }\n" + "}", + LLVMWithNoNamespaceFix); verifyFormat("/* something */ namespace some_namespace {\n" "class A {};\n" "void f() { f(); }\n" diff --git a/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp b/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp index 44cb4ef653a..ad77c747a59 100644 --- a/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp +++ b/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp @@ -77,6 +77,44 @@ TEST_F(NamespaceEndCommentsFixerTest, AddsEndComment) { "int i;\n" "int j;\n" "}")); + + EXPECT_EQ("namespace [[deprecated(\"foo\")]] A::B {\n" + "int i;\n" + "int j;\n" + "}// namespace A::B", + fixNamespaceEndComments("namespace [[deprecated(\"foo\")]] A::B {\n" + "int i;\n" + "int j;\n" + "}")); + + EXPECT_EQ("namespace [[deprecated(\"foo\")]] A::inline B::inline C {\n" + "int i;\n" + "int j;\n" + "}// namespace A::inline B::inline C", + fixNamespaceEndComments( + "namespace [[deprecated(\"foo\")]] A::inline B::inline C {\n" + "int i;\n" + "int j;\n" + "}")); + + EXPECT_EQ("namespace DEPRECATED A::B {\n" + "int i;\n" + "int j;\n" + "}// namespace A::B", + fixNamespaceEndComments("namespace DEPRECATED A::B {\n" + "int i;\n" + "int j;\n" + "}")); + + EXPECT_EQ("inline namespace [[deprecated]] A {\n" + "int i;\n" + "int j;\n" + "}// namespace A", + fixNamespaceEndComments("inline namespace [[deprecated]] A {\n" + "int i;\n" + "int j;\n" + "}")); + EXPECT_EQ("namespace ::A {\n" "int i;\n" "int j;\n" @@ -410,7 +448,8 @@ TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddCommentAfterUnaffectedRBrace) { /*Ranges=*/{1, tooling::Range(16, 3)})); } -TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddCommentAfterRBraceInPPDirective) { +TEST_F(NamespaceEndCommentsFixerTest, + DoesNotAddCommentAfterRBraceInPPDirective) { EXPECT_EQ("#define SAD \\\n" "namespace A { \\\n" "int i; \\\n" |