forked from qt-creator/qt-creator
CppEditor: Fix folding after comment
Fixes: QTCREATORBUG-5110 Change-Id: I65e0245d68ed41ab0cfc85cedbee21584b6fa90f Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -81,8 +81,6 @@ void CppHighlighter::highlightBlock(const QString &text)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int firstNonSpace = tokens.first().utf16charsBegin();
|
|
||||||
|
|
||||||
// Keep "semantic parentheses".
|
// Keep "semantic parentheses".
|
||||||
Parentheses parentheses;
|
Parentheses parentheses;
|
||||||
if (TextBlockUserData *userData = TextDocumentLayout::textUserData(currentBlock())) {
|
if (TextBlockUserData *userData = TextDocumentLayout::textUserData(currentBlock())) {
|
||||||
@@ -121,9 +119,16 @@ void CppHighlighter::highlightBlock(const QString &text)
|
|||||||
if (tk.is(T_LBRACE)) {
|
if (tk.is(T_LBRACE)) {
|
||||||
++braceDepth;
|
++braceDepth;
|
||||||
|
|
||||||
// if a folding block opens at the beginning of a line, treat the entire line
|
// if a folding block opens at the beginning of a line, treat the line before
|
||||||
// as if it were inside the folding block
|
// as if it were inside the folding block except if it is a comment or the line does
|
||||||
if (tk.utf16charsBegin() == firstNonSpace) {
|
// end with ;
|
||||||
|
const int firstNonSpace = tokens.first().utf16charsBegin();
|
||||||
|
const QString prevBlockText = currentBlock().previous().isValid()
|
||||||
|
? currentBlock().previous().text().trimmed()
|
||||||
|
: QString();
|
||||||
|
if (!prevBlockText.isEmpty() && !prevBlockText.startsWith("//")
|
||||||
|
&& !prevBlockText.endsWith("*/") && !prevBlockText.endsWith(";")
|
||||||
|
&& tk.utf16charsBegin() == firstNonSpace) {
|
||||||
++foldingIndent;
|
++foldingIndent;
|
||||||
TextDocumentLayout::userData(currentBlock())->setFoldingStartIncluded(true);
|
TextDocumentLayout::userData(currentBlock())->setFoldingStartIncluded(true);
|
||||||
}
|
}
|
||||||
@@ -653,6 +658,32 @@ void CppHighlighterTest::testParentheses()
|
|||||||
QCOMPARE(TextDocumentLayout::parentheses(block).count(), expectedParenCount);
|
QCOMPARE(TextDocumentLayout::parentheses(block).count(), expectedParenCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CppHighlighterTest::testFoldingIndent_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<int>("line");
|
||||||
|
QTest::addColumn<int>("expectedFoldingIndent");
|
||||||
|
QTest::addColumn<int>("expectedFoldingIndentNextLine");
|
||||||
|
|
||||||
|
QTest::newRow("braces after one line comment") << 52 << 0 << 1;
|
||||||
|
QTest::newRow("braces after multiline comment") << 59 << 0 << 1;
|
||||||
|
QTest::newRow("braces after completed line") << 67 << 1 << 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CppHighlighterTest::testFoldingIndent()
|
||||||
|
{
|
||||||
|
QFETCH(int, line);
|
||||||
|
QFETCH(int, expectedFoldingIndent);
|
||||||
|
QFETCH(int, expectedFoldingIndentNextLine);
|
||||||
|
|
||||||
|
QTextBlock block = m_doc.findBlockByNumber(line - 1);
|
||||||
|
QVERIFY(block.isValid());
|
||||||
|
QCOMPARE(TextDocumentLayout::foldingIndent(block), expectedFoldingIndent);
|
||||||
|
|
||||||
|
QTextBlock nextBlock = m_doc.findBlockByNumber(line);
|
||||||
|
QVERIFY(nextBlock.isValid());
|
||||||
|
QCOMPARE(TextDocumentLayout::foldingIndent(nextBlock), expectedFoldingIndentNextLine);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
#endif // WITH_TESTS
|
#endif // WITH_TESTS
|
||||||
|
|
||||||
|
@@ -54,6 +54,8 @@ private slots:
|
|||||||
void test();
|
void test();
|
||||||
void testParentheses_data();
|
void testParentheses_data();
|
||||||
void testParentheses();
|
void testParentheses();
|
||||||
|
void testFoldingIndent_data();
|
||||||
|
void testFoldingIndent();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTextDocument m_doc;
|
QTextDocument m_doc;
|
||||||
|
@@ -47,3 +47,24 @@ static void parenTest()
|
|||||||
|
|
||||||
const char* s7 = R"(
|
const char* s7 = R"(
|
||||||
))";
|
))";
|
||||||
|
|
||||||
|
// comment
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void parenTest2()
|
||||||
|
{
|
||||||
|
|
||||||
|
parenTest();
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user