Index: clang/lib/Format/NamespaceEndCommentsFixer.cpp =================================================================== --- clang/lib/Format/NamespaceEndCommentsFixer.cpp +++ clang/lib/Format/NamespaceEndCommentsFixer.cpp @@ -174,7 +174,8 @@ llvm::Regex::IgnoreCase); static const llvm::Regex NamespaceMacroCommentPattern = llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *" - "([a-zA-Z0-9_]+)\\(([a-zA-Z0-9:_]*)\\)\\.? *(\\*/)?$", + // NamespaceMacro arguments can also be string literals. + "([a-zA-Z0-9_]+)\\(([a-zA-Z0-9:_]*|\".+\")\\)\\.? *(\\*/)?$", llvm::Regex::IgnoreCase); SmallVector Groups; Index: clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp =================================================================== --- clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp +++ clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp @@ -40,8 +40,30 @@ Code, /*Ranges=*/{1, tooling::Range(0, Code.size())}, Style); } + + bool isFormatted(StringRef Code, const std::vector &Ranges, + const FormatStyle &Style = getLLVMStyle()) const { + return clang::format::fixNamespaceEndComments(Style, Code, Ranges, + "") + .empty(); + } + + bool isFormatted(StringRef Code, + const FormatStyle &Style = getLLVMStyle()) const { + return isFormatted(Code, {1, tooling::Range(0, Code.size())}, Style); + } }; +TEST_F(NamespaceEndCommentsFixerTest, IsFormatted) { + auto Style = getLLVMStyle(); + Style.NamespaceMacros.push_back("SUITE"); + EXPECT_TRUE(isFormatted("SUITE(\"foo\") {\n" + "int i;\n" + "int j;\n" + "} // SUITE(\"foo\")", + Style)); +} + TEST_F(NamespaceEndCommentsFixerTest, AddsEndComment) { EXPECT_EQ("namespace {\n" "int i;\n"