forked from qt-creator/qt-creator
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:
@@ -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) {
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user