forked from OSchip/llvm-project
[clang-format] Fix FixNamespaceComments when BraceWrapping AfterNamespace is true.
Summary: NamespaceEndCommentsFixer did not fix namespace comments when the brace opening the namespace was not on the same line as the "namespace" keyword. It occurs in Allman, GNU and Linux styles and whenever BraceWrapping.AfterNamespace is true. Before: ```lang=cpp namespace a { void f(); void g(); } ``` After: ```lang=cpp namespace a { void f(); void g(); } // namespace a ``` Reviewers: krasimir Reviewed By: krasimir Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D37904 llvm-svn: 314279
This commit is contained in:
parent
de4806d321
commit
caf6fd51ee
|
@ -118,6 +118,12 @@ getNamespaceToken(const AnnotatedLine *line,
|
|||
return nullptr;
|
||||
assert(StartLineIndex < AnnotatedLines.size());
|
||||
const FormatToken *NamespaceTok = AnnotatedLines[StartLineIndex]->First;
|
||||
if (NamespaceTok->is(tok::l_brace)) {
|
||||
// "namespace" keyword can be on the line preceding '{', e.g. in styles
|
||||
// where BraceWrapping.AfterNamespace is true.
|
||||
if (StartLineIndex > 0)
|
||||
NamespaceTok = AnnotatedLines[StartLineIndex - 1]->First;
|
||||
}
|
||||
// Detect "(inline)? namespace" in the beginning of a line.
|
||||
if (NamespaceTok->is(tok::kw_inline))
|
||||
NamespaceTok = NamespaceTok->getNextNonComment();
|
||||
|
|
|
@ -1413,7 +1413,7 @@ TEST_F(FormatTest, FormatsTypedefEnum) {
|
|||
verifyFormat("typedef enum {} EmptyEnum;");
|
||||
verifyFormat("typedef enum { A, B, C } ShortEnum;");
|
||||
verifyFormat("typedef enum {\n"
|
||||
" ZERO = 0,\n"
|
||||
" ZERO = 0,\n"
|
||||
" ONE = 1,\n"
|
||||
" TWO = 2,\n"
|
||||
" THREE = 3\n"
|
||||
|
@ -1425,7 +1425,7 @@ TEST_F(FormatTest, FormatsTypedefEnum) {
|
|||
verifyFormat("typedef enum { A, B, C } ShortEnum;");
|
||||
verifyFormat("typedef enum\n"
|
||||
"{\n"
|
||||
" ZERO = 0,\n"
|
||||
" ZERO = 0,\n"
|
||||
" ONE = 1,\n"
|
||||
" TWO = 2,\n"
|
||||
" THREE = 3\n"
|
||||
|
@ -9323,7 +9323,7 @@ TEST_F(FormatTest, LinuxBraceBreaking) {
|
|||
"struct B {\n"
|
||||
" int x;\n"
|
||||
"};\n"
|
||||
"}\n",
|
||||
"} // namespace a\n",
|
||||
LinuxBraceStyle);
|
||||
verifyFormat("enum X {\n"
|
||||
" Y = 0,\n"
|
||||
|
@ -9453,6 +9453,19 @@ TEST_F(FormatTest, StroustrupBraceBreaking) {
|
|||
TEST_F(FormatTest, AllmanBraceBreaking) {
|
||||
FormatStyle AllmanBraceStyle = getLLVMStyle();
|
||||
AllmanBraceStyle.BreakBeforeBraces = FormatStyle::BS_Allman;
|
||||
|
||||
EXPECT_EQ("namespace a\n"
|
||||
"{\n"
|
||||
"void f();\n"
|
||||
"void g();\n"
|
||||
"} // namespace a\n",
|
||||
format("namespace a\n"
|
||||
"{\n"
|
||||
"void f();\n"
|
||||
"void g();\n"
|
||||
"}\n",
|
||||
AllmanBraceStyle));
|
||||
|
||||
verifyFormat("namespace a\n"
|
||||
"{\n"
|
||||
"class A\n"
|
||||
|
@ -9471,7 +9484,7 @@ TEST_F(FormatTest, AllmanBraceBreaking) {
|
|||
"{\n"
|
||||
" int x;\n"
|
||||
"};\n"
|
||||
"}",
|
||||
"} // namespace a",
|
||||
AllmanBraceStyle);
|
||||
|
||||
verifyFormat("void f()\n"
|
||||
|
@ -9677,7 +9690,7 @@ TEST_F(FormatTest, GNUBraceBreaking) {
|
|||
" }\n"
|
||||
" void g() { return; }\n"
|
||||
"}\n"
|
||||
"}",
|
||||
"} // namespace a",
|
||||
GNUBraceStyle);
|
||||
|
||||
verifyFormat("void f()\n"
|
||||
|
|
Loading…
Reference in New Issue