Skip to content

Commit 6482383

Browse files
[clang-format] FixNamespaceComments does not understand namespace aliases
#35876 Ensure a namespace alias doesn't get incorrectly identifier as a namespace Reviewed By: HazardyKnusperkeks, curdeius, owenpan Differential Revision: https://reviews.llvm.org/D115647 Fixes: #35876
1 parent ddfac07 commit 6482383

File tree

2 files changed

+81
-1
lines changed

2 files changed

+81
-1
lines changed

clang/lib/Format/NamespaceEndCommentsFixer.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,13 @@ getNamespaceToken(const AnnotatedLine *Line,
180180
if (NamespaceTok->is(tok::l_brace)) {
181181
// "namespace" keyword can be on the line preceding '{', e.g. in styles
182182
// where BraceWrapping.AfterNamespace is true.
183-
if (StartLineIndex > 0)
183+
if (StartLineIndex > 0) {
184184
NamespaceTok = AnnotatedLines[StartLineIndex - 1]->First;
185+
if (AnnotatedLines[StartLineIndex - 1]->endsWith(tok::semi))
186+
return nullptr;
187+
}
185188
}
189+
186190
return NamespaceTok->getNamespaceToken();
187191
}
188192

clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,6 +1185,82 @@ TEST_F(ShortNamespaceLinesTest, MultipleUnwrappedLine) {
11851185
"}\n",
11861186
Style));
11871187
}
1188+
1189+
TEST_F(ShortNamespaceLinesTest, NamespaceAlias) {
1190+
auto Style = getLLVMStyle();
1191+
1192+
EXPECT_EQ("namespace n = nn;\n"
1193+
"{\n"
1194+
" int i;\n"
1195+
" int j;\n"
1196+
"}\n",
1197+
fixNamespaceEndComments("namespace n = nn;\n"
1198+
"{\n"
1199+
" int i;\n"
1200+
" int j;\n"
1201+
"}\n",
1202+
Style));
1203+
1204+
EXPECT_EQ("namespace n = nn; // comment\n"
1205+
"{\n"
1206+
" int i;\n"
1207+
" int j;\n"
1208+
"}\n",
1209+
fixNamespaceEndComments("namespace n = nn; // comment\n"
1210+
"{\n"
1211+
" int i;\n"
1212+
" int j;\n"
1213+
"}\n",
1214+
Style));
1215+
1216+
EXPECT_EQ("namespace n = nn; /* comment */\n"
1217+
"{\n"
1218+
" int i;\n"
1219+
" int j;\n"
1220+
"}\n",
1221+
fixNamespaceEndComments("namespace n = nn; /* comment */\n"
1222+
"{\n"
1223+
" int i;\n"
1224+
" int j;\n"
1225+
"}\n",
1226+
Style));
1227+
1228+
EXPECT_EQ(
1229+
"namespace n = nn; /* comment */ /* comment2 */\n"
1230+
"{\n"
1231+
" int i;\n"
1232+
" int j;\n"
1233+
"}\n",
1234+
fixNamespaceEndComments("namespace n = nn; /* comment */ /* comment2 */\n"
1235+
"{\n"
1236+
" int i;\n"
1237+
" int j;\n"
1238+
"}\n",
1239+
Style));
1240+
1241+
EXPECT_EQ("namespace n = nn; {\n"
1242+
" int i;\n"
1243+
" int j;\n"
1244+
"}\n",
1245+
fixNamespaceEndComments("namespace n = nn; {\n"
1246+
" int i;\n"
1247+
" int j;\n"
1248+
"}\n",
1249+
Style));
1250+
EXPECT_EQ("int foo;\n"
1251+
"namespace n\n"
1252+
"{\n"
1253+
" int i;\n"
1254+
" int j;\n"
1255+
"}// namespace n\n",
1256+
fixNamespaceEndComments("int foo;\n"
1257+
"namespace n\n"
1258+
"{\n"
1259+
" int i;\n"
1260+
" int j;\n"
1261+
"}\n",
1262+
Style));
1263+
}
11881264
} // end namespace
11891265
} // end namespace format
11901266
} // end namespace clang

0 commit comments

Comments
 (0)