ClangFormat: Sprinkle some more magic pixie dust

Apparently, we can prevent clang-format from removing line breaks by
adding an empty comment at the end of the line.

Change-Id: Ia78ecb9e7351d059c544cbda11d33af5734e2218
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Kandeler
2021-02-18 13:57:29 +01:00
parent 8b2c9c4596
commit b88b73d9c1
2 changed files with 24 additions and 9 deletions

View File

@@ -250,6 +250,9 @@ int forceIndentWithExtraText(QByteArray &buffer,
const QTextBlock &block,
bool secondTry)
{
if (!block.isValid())
return 0;
const QString blockText = block.text();
int firstNonWhitespace = Utils::indexOf(blockText,
[](const QChar &ch) { return !ch.isSpace(); });
@@ -287,7 +290,16 @@ int forceIndentWithExtraText(QByteArray &buffer,
dummyText = dummyTextForContext(charContext, closingBraceBlock);
}
buffer.insert(utf8Offset, dummyText);
// A comment at the end of the line appears to prevent clang-format from removing line breaks.
if (dummyText == "/**/" || dummyText.isEmpty()) {
if (block.previous().isValid()) {
const int prevEndOffset = Utils::Text::utf8NthLineOffset(block.document(), buffer,
block.blockNumber()) + block.previous().text().length();
buffer.insert(prevEndOffset, "//");
extraLength += 2;
}
}
buffer.insert(utf8Offset + extraLength, dummyText);
extraLength += dummyText.length();
if (secondTry) {

View File

@@ -198,14 +198,7 @@ TEST_F(ClangFormat, IndentLambdaWithReturnType)
"}"));
}
#ifndef KEEP_LINE_BREAKS_FOR_NON_EMPTY_LINES_BACKPORTED
# define DISABLED_FOR_VANILLA_CLANG(x) DISABLED_##x
#else
# define DISABLED_FOR_VANILLA_CLANG(x) x
#endif
// This test requires the custom clang patch https://code.qt.io/cgit/clang/llvm-project.git/commit/?h=release_100-based&id=9b992a0f7f160dd6c75f20a4dcfcf7c60a4894df
TEST_F(ClangFormat, DISABLED_FOR_VANILLA_CLANG(IndentFunctionArgumentLambdaWithNextLineScope))
TEST_F(ClangFormat, ClangFormatIndentFunctionArgumentLambdaWithNextLineScope)
{
insertLines({"foo([]()",
"{",
@@ -954,6 +947,16 @@ TEST_F(ClangFormat, SortIncludes)
"#include <aa.h>",
"#include <bb.h>"));
}
TEST_F(ClangFormat, ChainedMemberFunctionCalls)
{
insertLines({"S().func().func()",
".func();"});
indenter.indent(cursor, QChar::Null, TextEditor::TabSettings());
ASSERT_THAT(documentLines(), ElementsAre("S().func().func()",
" .func();"));
}
// clang-format on
} // namespace