forked from qt-creator/qt-creator
C++ indenter: Improve member initializer indent.
If you indent the first initializer differently, that will now stick for the following ones. Change-Id: Ib08dfbf64282eda41202528b7255e693c350f7c6 Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
This commit is contained in:
@@ -189,7 +189,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
case T_SEMICOLON: leave(true); break;
|
case T_SEMICOLON: leave(true); break;
|
||||||
case T_EQUAL: enter(assign_open_or_initializer); break;
|
case T_EQUAL: enter(assign_open_or_initializer); break;
|
||||||
case T_LBRACE: enter(defun_open); break;
|
case T_LBRACE: enter(defun_open); break;
|
||||||
case T_COLON: enter(member_init_open); enter(member_init); break;
|
case T_COLON: enter(member_init_open); enter(member_init_expected); break;
|
||||||
case T_OPERATOR: enter(operator_declaration); break;
|
case T_OPERATOR: enter(operator_declaration); break;
|
||||||
default: tryExpression(true); break;
|
default: tryExpression(true); break;
|
||||||
} break;
|
} break;
|
||||||
@@ -263,7 +263,14 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
case member_init_open:
|
case member_init_open:
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case T_LBRACE: turnInto(defun_open); break;
|
case T_LBRACE: turnInto(defun_open); break;
|
||||||
case T_COMMA: enter(member_init); break;
|
case T_COMMA: enter(member_init_expected); break;
|
||||||
|
case T_SEMICOLON: leave(); continue; // try to recover
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case member_init_expected:
|
||||||
|
switch (kind) {
|
||||||
|
case T_IDENTIFIER: turnInto(member_init); break;
|
||||||
|
case T_LBRACE:
|
||||||
case T_SEMICOLON: leave(); continue; // try to recover
|
case T_SEMICOLON: leave(); continue; // try to recover
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
@@ -1185,14 +1192,25 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
// undo the continuation indent of the parent
|
// undo the continuation indent of the parent
|
||||||
*savedPaddingDepth = 0;
|
*savedPaddingDepth = 0;
|
||||||
|
|
||||||
|
// The paddingDepth is the expected location of the ',' and
|
||||||
|
// identifiers are padded +2 from that in member_init_expected.
|
||||||
if (firstToken)
|
if (firstToken)
|
||||||
*paddingDepth = tokenPosition-*indentDepth;
|
*paddingDepth = tokenPosition-*indentDepth;
|
||||||
else
|
else
|
||||||
*paddingDepth = m_tabSettings.m_indentSize - 2; // they'll get another 2 from member_init
|
*paddingDepth = m_tabSettings.m_indentSize - 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case member_init_expected:
|
||||||
|
*paddingDepth += 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case member_init:
|
case member_init:
|
||||||
*paddingDepth += 2; // savedIndentDepth is the position of ':'
|
// make continuation indents relative to identifier start
|
||||||
|
*paddingDepth = tokenPosition - *indentDepth;
|
||||||
|
if (firstToken) {
|
||||||
|
// see comment in member_init_open
|
||||||
|
*savedPaddingDepth = *paddingDepth - 2;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case case_cont:
|
case case_cont:
|
||||||
|
|||||||
@@ -124,7 +124,8 @@ public: // must be public to make Q_GADGET introspection work
|
|||||||
access_specifier_start, // after 'private', 'protected' etc.
|
access_specifier_start, // after 'private', 'protected' etc.
|
||||||
|
|
||||||
member_init_open, // After ':' that starts a member initialization list.
|
member_init_open, // After ':' that starts a member initialization list.
|
||||||
member_init, // At the start and after every ',' in member_init_open
|
member_init_expected, // At the start and after every ',' in member_init_open
|
||||||
|
member_init, // After an identifier in member_init_expected
|
||||||
member_init_paren_open, // After '(' in member_init.
|
member_init_paren_open, // After '(' in member_init.
|
||||||
|
|
||||||
enum_start, // After 'enum'
|
enum_start, // After 'enum'
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ private Q_SLOTS:
|
|||||||
void switch5();
|
void switch5();
|
||||||
void blocks();
|
void blocks();
|
||||||
void memberInitializer();
|
void memberInitializer();
|
||||||
|
void memberInitializer2();
|
||||||
|
void memberInitializer3();
|
||||||
void templates();
|
void templates();
|
||||||
void operatorOverloads();
|
void operatorOverloads();
|
||||||
void gnuStyle();
|
void gnuStyle();
|
||||||
@@ -1097,6 +1099,62 @@ void tst_CodeFormatter::memberInitializer()
|
|||||||
checkIndent(data);
|
checkIndent(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_CodeFormatter::memberInitializer2()
|
||||||
|
{
|
||||||
|
QList<Line> data;
|
||||||
|
data << Line("void foo()")
|
||||||
|
<< Line("~ : foo()")
|
||||||
|
<< Line("~ , foo()")
|
||||||
|
<< Line("~ , foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
<< Line("void foo()")
|
||||||
|
<< Line("~ : foo()", 0, 4)
|
||||||
|
<< Line("~ , foo()")
|
||||||
|
<< Line("~ , foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
<< Line("void foo()")
|
||||||
|
<< Line("~ : foo(),")
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
<< Line("void foo()")
|
||||||
|
<< Line("~ : foo(),", 0, 4)
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
<< Line("void foo()")
|
||||||
|
<< Line("~ :")
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
<< Line("void foo()")
|
||||||
|
<< Line("~ :")
|
||||||
|
<< Line("~ foo(),", 0, 6)
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
;
|
||||||
|
checkIndent(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_CodeFormatter::memberInitializer3()
|
||||||
|
{
|
||||||
|
QList<Line> data;
|
||||||
|
data << Line("void foo() :")
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
<< Line("void foo() :")
|
||||||
|
<< Line("~ foo(),", 0, 4)
|
||||||
|
<< Line("~ foo(),")
|
||||||
|
<< Line("~ foo()")
|
||||||
|
<< Line("{}")
|
||||||
|
;
|
||||||
|
checkIndent(data);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_CodeFormatter::templates()
|
void tst_CodeFormatter::templates()
|
||||||
{
|
{
|
||||||
QList<Line> data;
|
QList<Line> data;
|
||||||
|
|||||||
Reference in New Issue
Block a user