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:
Christian Kamm
2011-12-08 13:25:46 +01:00
parent 8480c3837b
commit 0ba1234108
3 changed files with 82 additions and 5 deletions

View File

@@ -189,7 +189,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
case T_SEMICOLON: leave(true); break;
case T_EQUAL: enter(assign_open_or_initializer); 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;
default: tryExpression(true); break;
} break;
@@ -263,7 +263,14 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
case member_init_open:
switch (kind) {
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
} break;
@@ -1185,14 +1192,25 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
// undo the continuation indent of the parent
*savedPaddingDepth = 0;
// The paddingDepth is the expected location of the ',' and
// identifiers are padded +2 from that in member_init_expected.
if (firstToken)
*paddingDepth = tokenPosition-*indentDepth;
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;
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;
case case_cont:

View File

@@ -124,7 +124,8 @@ public: // must be public to make Q_GADGET introspection work
access_specifier_start, // after 'private', 'protected' etc.
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.
enum_start, // After 'enum'