ClangFormat: Remove format while typing feature

Change-Id: I6737c429694218d39fc06c9ef3ce502228e26a2a
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Artem Sokolovskii
2022-05-16 13:57:20 +02:00
parent 6f7e7980d2
commit 323ba720db
3 changed files with 8 additions and 20 deletions

View File

@@ -594,18 +594,6 @@ Utils::Text::Replacements ClangFormatBaseIndenter::indentsFor(QTextBlock startBl
const QByteArray buffer = m_doc->toPlainText().toUtf8(); const QByteArray buffer = m_doc->toPlainText().toUtf8();
ReplacementsToKeep replacementsToKeep = ReplacementsToKeep::OnlyIndent; ReplacementsToKeep replacementsToKeep = ReplacementsToKeep::OnlyIndent;
if (formatCodeInsteadOfIndent()
&& (cursorPositionInEditor == -1 || cursorPositionInEditor >= startBlockPosition)
&& (typedChar == ';' || typedChar == '}')) {
// Format before current position only in case the cursor is inside the indented block.
// So if cursor position is less then the block position then the current line is before
// the indented block - don't trigger extra formatting in this case.
// cursorPositionInEditor == -1 means the condition matches automatically.
// Format only before complete statement not to break code.
replacementsToKeep = ReplacementsToKeep::IndentAndBefore;
}
return replacements(buffer, return replacements(buffer,
startBlock, startBlock,
endBlock, endBlock,

View File

@@ -471,7 +471,7 @@ void ClangFormatTest::testIndentAfterFunctionBodyAndNotFormatBefore()
void ClangFormatTest::testReformatToEmptyFunction() void ClangFormatTest::testReformatToEmptyFunction()
{ {
insertLines({"int foo(int a, int b, int c, int d)", "{", " ", "}"}); insertLines({"int foo(int a, int b, int c, int d)", "{", " ", "}"});
m_extendedIndenter->indentBlock(m_doc->findBlockByNumber(3), '}', TextEditor::TabSettings()); m_extendedIndenter->format({{1, 4}});
QCOMPARE(documentLines(), (std::vector<QString>{"int foo(int a, int b, int c, int d) {}"})); QCOMPARE(documentLines(), (std::vector<QString>{"int foo(int a, int b, int c, int d) {}"}));
} }
@@ -483,10 +483,10 @@ void ClangFormatTest::testReformatToNonEmptyFunction()
QCOMPARE(documentLines(), (std::vector<QString>{"int foo(int a, int b) {", " ", "}"})); QCOMPARE(documentLines(), (std::vector<QString>{"int foo(int a, int b) {", " ", "}"}));
} }
void ClangFormatTest::testIndentClosingScopeAndFormatBeforeIt() void ClangFormatTest::testFormatClosingScope()
{ {
insertLines({"if(a && b", " &&c && d", " ) {", "", "}"}); insertLines({"if(a && b", " &&c && d", " ) {", "", "}"});
m_extendedIndenter->indentBlock(m_doc->findBlockByNumber(4), '}', TextEditor::TabSettings()); m_extendedIndenter->format({{1, 5}});
QCOMPARE(documentLines(), (std::vector<QString>{"if (a && b && c && d) {", "}"})); QCOMPARE(documentLines(), (std::vector<QString>{"if (a && b && c && d) {", "}"}));
} }
@@ -504,17 +504,17 @@ void ClangFormatTest::testOnlyIndentIncompleteStatementOnElectricalCharacter()
QCOMPARE(documentLines(), (std::vector<QString>{"{bar();", " foo()", "}"})); QCOMPARE(documentLines(), (std::vector<QString>{"{bar();", " foo()", "}"}));
} }
void ClangFormatTest::testIndentAndFormatCompleteStatementOnSemicolon() void ClangFormatTest::testFormatCompleteStatementOnSemicolon()
{ {
insertLines({"{bar();", "foo();", "}"}); insertLines({"{bar();", "foo();", "}"});
m_extendedIndenter->indentBlock(m_doc->findBlockByNumber(1), ';', TextEditor::TabSettings(), 14); m_extendedIndenter->format({{1, 3}});
QCOMPARE(documentLines(), (std::vector<QString>{"{", " bar();", " foo();", "}"})); QCOMPARE(documentLines(), (std::vector<QString>{"{", " bar();", " foo();", "}"}));
} }
void ClangFormatTest::testIndentAndFormatCompleteStatementOnClosingScope() void ClangFormatTest::testIndentAndFormatCompleteStatementOnClosingScope()
{ {
insertLines({"{bar();", "foo();", "}"}); insertLines({"{bar();", "foo();", "}"});
m_extendedIndenter->indentBlock(m_doc->findBlockByNumber(1), '}', TextEditor::TabSettings(), 16); m_extendedIndenter->format({{1, 3}});
QCOMPARE(documentLines(), (std::vector<QString>{"{", " bar();", " foo();", "}"})); QCOMPARE(documentLines(), (std::vector<QString>{"{", " bar();", " foo();", "}"}));
} }

View File

@@ -90,10 +90,10 @@ private slots:
void testIndentAfterFunctionBodyAndNotFormatBefore(); void testIndentAfterFunctionBodyAndNotFormatBefore();
void testReformatToEmptyFunction(); void testReformatToEmptyFunction();
void testReformatToNonEmptyFunction(); void testReformatToNonEmptyFunction();
void testIndentClosingScopeAndFormatBeforeIt(); void testFormatClosingScope();
void testDoNotFormatAfterTheFirstColon(); void testDoNotFormatAfterTheFirstColon();
void testOnlyIndentIncompleteStatementOnElectricalCharacter(); void testOnlyIndentIncompleteStatementOnElectricalCharacter();
void testIndentAndFormatCompleteStatementOnSemicolon(); void testFormatCompleteStatementOnSemicolon();
void testIndentAndFormatCompleteStatementOnClosingScope(); void testIndentAndFormatCompleteStatementOnClosingScope();
void testOnlyIndentClosingParenthesis(); void testOnlyIndentClosingParenthesis();
void testEquallyIndentInsideParenthesis(); void testEquallyIndentInsideParenthesis();