clang-format: Fix bug in multiline comment wrapping.
Splitting: /** * multiline block comment * */ Before: /** * multiline block *comment * */ After: /** * multiline block * comment * */ The reason was that the empty line inside the comment (with just the "*") was confusing the comment breaking logic. llvm-svn: 236573
This commit is contained in:
parent
26f165b04e
commit
6d9b88dd99
|
@ -277,6 +277,8 @@ BreakableBlockComment::BreakableBlockComment(
|
|||
// If the last line is empty, the closing "*/" will have a star.
|
||||
if (i + 1 == e && Lines[i].empty())
|
||||
break;
|
||||
if (!Lines[i].empty() && i + 1 != e && Decoration.startswith(Lines[i]))
|
||||
continue;
|
||||
while (!Lines[i].startswith(Decoration))
|
||||
Decoration = Decoration.substr(0, Decoration.size() - 1);
|
||||
}
|
||||
|
@ -297,14 +299,18 @@ BreakableBlockComment::BreakableBlockComment(
|
|||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// The first line already excludes the star.
|
||||
// For all other lines, adjust the line to exclude the star and
|
||||
// (optionally) the first whitespace.
|
||||
StartOfLineColumn[i] += Decoration.size();
|
||||
Lines[i] = Lines[i].substr(Decoration.size());
|
||||
LeadingWhitespace[i] += Decoration.size();
|
||||
IndentAtLineBreak =
|
||||
std::min<int>(IndentAtLineBreak, std::max(0, StartOfLineColumn[i]));
|
||||
unsigned DecorationSize =
|
||||
Decoration.startswith(Lines[i]) ? Lines[i].size() : Decoration.size();
|
||||
StartOfLineColumn[i] += DecorationSize;
|
||||
Lines[i] = Lines[i].substr(DecorationSize);
|
||||
LeadingWhitespace[i] += DecorationSize;
|
||||
if (!Decoration.startswith(Lines[i]))
|
||||
IndentAtLineBreak =
|
||||
std::min<int>(IndentAtLineBreak, std::max(0, StartOfLineColumn[i]));
|
||||
}
|
||||
IndentAtLineBreak = std::max<unsigned>(IndentAtLineBreak, Decoration.size());
|
||||
DEBUG({
|
||||
|
|
|
@ -1621,6 +1621,17 @@ TEST_F(FormatTest, SplitsLongLinesInComments) {
|
|||
" */",
|
||||
getLLVMStyleWithColumns(20)));
|
||||
|
||||
EXPECT_EQ("/**\n"
|
||||
" * multiline block\n"
|
||||
" * comment\n"
|
||||
" *\n"
|
||||
" */",
|
||||
format("/**\n"
|
||||
" * multiline block comment\n"
|
||||
" *\n"
|
||||
" */",
|
||||
getLLVMStyleWithColumns(20)));
|
||||
|
||||
EXPECT_EQ("/*\n"
|
||||
"\n"
|
||||
"\n"
|
||||
|
@ -6525,7 +6536,7 @@ TEST_F(FormatTest, BlockComments) {
|
|||
EXPECT_EQ("/*\n"
|
||||
"*\n"
|
||||
" * aaaaaa\n"
|
||||
"*aaaaaa\n"
|
||||
" * aaaaaa\n"
|
||||
"*/",
|
||||
format("/*\n"
|
||||
"*\n"
|
||||
|
|
Loading…
Reference in New Issue