Fix bug 20892 - clang-format does not handle C-style comments

Summary:
http://llvm.org/bugs/show_bug.cgi?id=20892

Add support of C-style formatting enabling/disabling directives. Now the following two styles are supported:

  // clang-format on
  /* clang-format on */

The flexibility in comments (support of extra spaces and/or slashes, etc.) is deliberately avoided to simplify search in large code bases.

Reviewers: djasper

Reviewed By: djasper

Subscribers: cfe-commits, curdeius, klimek

Differential Revision: http://reviews.llvm.org/D5309

llvm-svn: 217588
This commit is contained in:
Roman Kashitsyn 2014-09-11 14:47:20 +00:00
parent ee46b0c8be
commit 650ecb53ca
2 changed files with 19 additions and 2 deletions

View File

@ -1725,11 +1725,18 @@ private:
Tok.Tok.setKind(tok::char_constant);
}
}
if (Tok.is(tok::comment) && Tok.TokenText == "// clang-format on")
if (Tok.is(tok::comment) && (Tok.TokenText == "// clang-format on" ||
Tok.TokenText == "/* clang-format on */")) {
FormattingDisabled = false;
}
Tok.Finalized = FormattingDisabled;
if (Tok.is(tok::comment) && Tok.TokenText == "// clang-format off")
if (Tok.is(tok::comment) && (Tok.TokenText == "// clang-format off" ||
Tok.TokenText == "/* clang-format off */")) {
FormattingDisabled = true;
}
}
};

View File

@ -9355,6 +9355,16 @@ TEST_F(FormatTest, DisableRegions) {
" int j;\n"
" // clang-format on\n"
" int k;"));
EXPECT_EQ("int i;\n"
"/* clang-format off */\n"
" int j;\n"
"/* clang-format on */\n"
"int k;",
format(" int i;\n"
" /* clang-format off */\n"
" int j;\n"
" /* clang-format on */\n"
" int k;"));
}
TEST_F(FormatTest, DoNotCrashOnInvalidInput) {