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, const QTextBlock &block,
bool secondTry) bool secondTry)
{ {
if (!block.isValid())
return 0;
const QString blockText = block.text(); const QString blockText = block.text();
int firstNonWhitespace = Utils::indexOf(blockText, int firstNonWhitespace = Utils::indexOf(blockText,
[](const QChar &ch) { return !ch.isSpace(); }); [](const QChar &ch) { return !ch.isSpace(); });
@@ -287,7 +290,16 @@ int forceIndentWithExtraText(QByteArray &buffer,
dummyText = dummyTextForContext(charContext, closingBraceBlock); 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(); extraLength += dummyText.length();
if (secondTry) { if (secondTry) {

View File

@@ -198,14 +198,7 @@ TEST_F(ClangFormat, IndentLambdaWithReturnType)
"}")); "}"));
} }
#ifndef KEEP_LINE_BREAKS_FOR_NON_EMPTY_LINES_BACKPORTED TEST_F(ClangFormat, ClangFormatIndentFunctionArgumentLambdaWithNextLineScope)
# 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))
{ {
insertLines({"foo([]()", insertLines({"foo([]()",
"{", "{",
@@ -954,6 +947,16 @@ TEST_F(ClangFormat, SortIncludes)
"#include <aa.h>", "#include <aa.h>",
"#include <bb.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 // clang-format on
} // namespace } // namespace