forked from qt-creator/qt-creator
C++ indenter: Align to next token instead of end of current.
Task-number: QTCREATORBUG-3136 Reviewed-by: Erik Verbruggen
This commit is contained in:
@@ -1038,12 +1038,13 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
{
|
{
|
||||||
const State &parentState = state();
|
const State &parentState = state();
|
||||||
const Token &tk = currentToken();
|
const Token &tk = currentToken();
|
||||||
const int tokenPosition = column(tk.begin());
|
|
||||||
const bool firstToken = (tokenIndex() == 0);
|
const bool firstToken = (tokenIndex() == 0);
|
||||||
const bool lastToken = (tokenIndex() == tokenCount() - 1);
|
const bool lastToken = (tokenIndex() == tokenCount() - 1);
|
||||||
int nextTokenStart = 0;
|
const int tokenPosition = column(tk.begin());
|
||||||
if (!lastToken)
|
const int nextTokenPosition = lastToken ? tokenPosition + tk.length()
|
||||||
nextTokenStart = column(tokenAt(tokenIndex() + 1).begin());
|
: column(tokenAt(tokenIndex() + 1).begin());
|
||||||
|
const int spaceOrNextTokenPosition = lastToken ? tokenPosition + tk.length() + 1
|
||||||
|
: nextTokenPosition;
|
||||||
|
|
||||||
if (shouldClearPaddingOnEnter(newState))
|
if (shouldClearPaddingOnEnter(newState))
|
||||||
*paddingDepth = 0;
|
*paddingDepth = 0;
|
||||||
@@ -1067,7 +1068,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
|
|
||||||
case template_param:
|
case template_param:
|
||||||
if (!lastToken)
|
if (!lastToken)
|
||||||
*paddingDepth = tokenPosition-*indentDepth + tk.length();
|
*paddingDepth = nextTokenPosition-*indentDepth;
|
||||||
else {
|
else {
|
||||||
if (*paddingDepth == 0)
|
if (*paddingDepth == 0)
|
||||||
*paddingDepth = 2*m_indentSize;
|
*paddingDepth = 2*m_indentSize;
|
||||||
@@ -1104,24 +1105,24 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
case arglist_open:
|
case arglist_open:
|
||||||
case condition_paren_open:
|
case condition_paren_open:
|
||||||
if (!lastToken)
|
if (!lastToken)
|
||||||
*paddingDepth = tokenPosition-*indentDepth + 1;
|
*paddingDepth = nextTokenPosition-*indentDepth;
|
||||||
else
|
else
|
||||||
*paddingDepth += m_indentSize;
|
*paddingDepth += m_indentSize;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ternary_op:
|
case ternary_op:
|
||||||
if (!lastToken)
|
if (!lastToken)
|
||||||
*paddingDepth = tokenPosition-*indentDepth + tk.length() + 1;
|
*paddingDepth = spaceOrNextTokenPosition-*indentDepth;
|
||||||
else
|
else
|
||||||
*paddingDepth += m_indentSize;
|
*paddingDepth += m_indentSize;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case stream_op:
|
case stream_op:
|
||||||
*paddingDepth = tokenPosition-*indentDepth + tk.length() + 1;
|
*paddingDepth = spaceOrNextTokenPosition-*indentDepth;
|
||||||
break;
|
break;
|
||||||
case stream_op_cont:
|
case stream_op_cont:
|
||||||
if (firstToken)
|
if (firstToken)
|
||||||
*savedPaddingDepth = *paddingDepth = tokenPosition-*indentDepth + tk.length() + 1;
|
*savedPaddingDepth = *paddingDepth = spaceOrNextTokenPosition-*indentDepth;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case member_init_open:
|
case member_init_open:
|
||||||
@@ -1159,7 +1160,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
*indentDepth += m_indentSize;
|
*indentDepth += m_indentSize;
|
||||||
|
|
||||||
if (followedByData) {
|
if (followedByData) {
|
||||||
*paddingDepth = column(tokenAt(tokenIndex() + 1).begin()) - *indentDepth;
|
*paddingDepth = nextTokenPosition-*indentDepth;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1188,7 +1189,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
if (!lastToken) {
|
if (!lastToken) {
|
||||||
if (parentState.type == initializer)
|
if (parentState.type == initializer)
|
||||||
*savedPaddingDepth = tokenPosition-*indentDepth;
|
*savedPaddingDepth = tokenPosition-*indentDepth;
|
||||||
*paddingDepth = nextTokenStart-*indentDepth;
|
*paddingDepth = nextTokenPosition-*indentDepth;
|
||||||
} else {
|
} else {
|
||||||
// avoid existing continuation indents
|
// avoid existing continuation indents
|
||||||
if (parentState.type == initializer)
|
if (parentState.type == initializer)
|
||||||
@@ -1212,10 +1213,10 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
*savedPaddingDepth = *paddingDepth;
|
*savedPaddingDepth = *paddingDepth;
|
||||||
|
|
||||||
// fixed extra indent when continuing 'if (', but not for 'else if ('
|
// fixed extra indent when continuing 'if (', but not for 'else if ('
|
||||||
if (tokenPosition <= *indentDepth + m_indentSize)
|
if (nextTokenPosition-*indentDepth <= m_indentSize)
|
||||||
*paddingDepth = 2*m_indentSize;
|
*paddingDepth = 2*m_indentSize;
|
||||||
else
|
else
|
||||||
*paddingDepth = tokenPosition-*indentDepth + 1;
|
*paddingDepth = nextTokenPosition-*indentDepth;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case substatement:
|
case substatement:
|
||||||
@@ -1235,11 +1236,11 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case for_statement_paren_open:
|
case for_statement_paren_open:
|
||||||
*paddingDepth = tokenPosition + 1 - *indentDepth;
|
*paddingDepth = nextTokenPosition - *indentDepth;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case multiline_comment_start:
|
case multiline_comment_start:
|
||||||
*indentDepth = tokenPosition + 2;
|
*indentDepth = tokenPosition + 2; // nextTokenPosition won't work
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case multiline_comment_cont:
|
case multiline_comment_cont:
|
||||||
|
@@ -56,6 +56,7 @@ private Q_SLOTS:
|
|||||||
void cpp0xFor();
|
void cpp0xFor();
|
||||||
void gnuStyleSwitch();
|
void gnuStyleSwitch();
|
||||||
void whitesmithsStyleSwitch();
|
void whitesmithsStyleSwitch();
|
||||||
|
void indentToNextToken();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Line {
|
struct Line {
|
||||||
@@ -1098,6 +1099,23 @@ void tst_CodeFormatter::whitesmithsStyleSwitch()
|
|||||||
checkIndent(data, 2);
|
checkIndent(data, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_CodeFormatter::indentToNextToken()
|
||||||
|
{
|
||||||
|
QList<Line> data;
|
||||||
|
data << Line("void foo( int i,")
|
||||||
|
<< Line("~ int j) {")
|
||||||
|
<< Line(" a << foo + ")
|
||||||
|
<< Line(" ~ bar;")
|
||||||
|
<< Line(" if (a &&")
|
||||||
|
<< Line(" ~ b) {")
|
||||||
|
<< Line(" foo; }")
|
||||||
|
<< Line(" if ( a &&")
|
||||||
|
<< Line(" ~ b) {")
|
||||||
|
<< Line(" foo; }")
|
||||||
|
;
|
||||||
|
checkIndent(data);
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_APPLESS_MAIN(tst_CodeFormatter)
|
QTEST_APPLESS_MAIN(tst_CodeFormatter)
|
||||||
#include "tst_codeformatter.moc"
|
#include "tst_codeformatter.moc"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user