Skip to content

Commit f2c97ff

Browse files
authored
[clang-format] Fix a bug in NamespaceEndCommentsFixer (llvm#67422)
Fixed llvm#67407.
1 parent e923b21 commit f2c97ff

File tree

2 files changed

+23
-38
lines changed

2 files changed

+23
-38
lines changed

clang/lib/Format/NamespaceEndCommentsFixer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ bool validEndComment(const FormatToken *RBraceTok, StringRef NamespaceName,
170170
// Valid namespace end comments don't need to be edited.
171171
static const llvm::Regex NamespaceCommentPattern =
172172
llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
173-
"namespace( +([a-zA-Z0-9:_]+))?\\.? *(\\*/)?$",
173+
"namespace( +([a-zA-Z0-9:_ ]+))?\\.? *(\\*/)?$",
174174
llvm::Regex::IgnoreCase);
175175
static const llvm::Regex NamespaceMacroCommentPattern =
176176
llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
@@ -189,7 +189,7 @@ bool validEndComment(const FormatToken *RBraceTok, StringRef NamespaceName,
189189
// Comment does not match regex.
190190
return false;
191191
}
192-
StringRef NamespaceNameInComment = Groups.size() > 5 ? Groups[5] : "";
192+
StringRef NamespaceNameInComment = Groups.size() > 5 ? Groups[5].rtrim() : "";
193193
// Anonymous namespace comments must not mention a namespace name.
194194
if (NamespaceName.empty() && !NamespaceNameInComment.empty())
195195
return false;

clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -658,42 +658,27 @@ TEST_F(NamespaceEndCommentsFixerTest,
658658
}
659659

660660
TEST_F(NamespaceEndCommentsFixerTest, KeepsValidEndComment) {
661-
EXPECT_EQ("namespace {\n"
662-
"int i;\n"
663-
"} // end anonymous namespace",
664-
fixNamespaceEndComments("namespace {\n"
665-
"int i;\n"
666-
"} // end anonymous namespace"));
667-
EXPECT_EQ("namespace A {\n"
668-
"int i;\n"
669-
"} /* end of namespace A */",
670-
fixNamespaceEndComments("namespace A {\n"
671-
"int i;\n"
672-
"} /* end of namespace A */"));
673-
EXPECT_EQ("namespace A {\n"
674-
"int i;\n"
675-
"} // namespace A",
676-
fixNamespaceEndComments("namespace A {\n"
677-
"int i;\n"
678-
"} // namespace A"));
679-
EXPECT_EQ("namespace A::B {\n"
680-
"int i;\n"
681-
"} // end namespace A::B",
682-
fixNamespaceEndComments("namespace A::B {\n"
683-
"int i;\n"
684-
"} // end namespace A::B"));
685-
EXPECT_EQ("namespace A {\n"
686-
"int i;\n"
687-
"}; // end namespace A",
688-
fixNamespaceEndComments("namespace A {\n"
689-
"int i;\n"
690-
"}; // end namespace A"));
691-
EXPECT_EQ("namespace {\n"
692-
"int i;\n"
693-
"}; /* unnamed namespace */",
694-
fixNamespaceEndComments("namespace {\n"
695-
"int i;\n"
696-
"}; /* unnamed namespace */"));
661+
EXPECT_TRUE(isFormatted("namespace {\n"
662+
"int i;\n"
663+
"} // end anonymous namespace"));
664+
EXPECT_TRUE(isFormatted("namespace A {\n"
665+
"int i;\n"
666+
"} /* end of namespace A */"));
667+
EXPECT_TRUE(isFormatted("namespace A {\n"
668+
"int i;\n"
669+
"} // namespace A"));
670+
EXPECT_TRUE(isFormatted("namespace A::B {\n"
671+
"int i;\n"
672+
"} // end namespace A::B"));
673+
EXPECT_TRUE(isFormatted("namespace A {\n"
674+
"int i;\n"
675+
"}; // end namespace A"));
676+
EXPECT_TRUE(isFormatted("namespace {\n"
677+
"int i;\n"
678+
"}; /* unnamed namespace */"));
679+
EXPECT_TRUE(isFormatted("namespace a::inline b {\n"
680+
"int c;\n"
681+
"}; // namespace a::inline b"));
697682
}
698683

699684
TEST_F(NamespaceEndCommentsFixerTest, KeepsValidMacroEndComment) {

0 commit comments

Comments
 (0)