Commit c5c4bacd authored by Christian Kamm's avatar Christian Kamm
Browse files

C++ indenter: Fix labels.

Reviewed-by: Roberto Raggi
parent bb654838
......@@ -382,6 +382,12 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
default: leave(); continue;
} break;
case label:
switch (kind) {
case T_COLON: leave(); break;
default: leave(); continue; // shouldn't happen
} break;
case multiline_comment_start:
case multiline_comment_cont:
if (kind != T_COMMENT && kind != T_DOXY_COMMENT) {
......@@ -710,6 +716,10 @@ bool CodeFormatter::tryDeclaration()
enter(qt_like_macro);
return true;
}
if (m_tokens.size() > 1 && m_tokens.at(1).kind() == T_COLON) {
enter(label);
return true;
}
}
// fallthrough
case T_CHAR:
......@@ -1428,6 +1438,16 @@ void QtStyleCodeFormatter::adjustIndent(const QList<CPlusPlus::Token> &tokens, i
*indentDepth = 0;
}
break;
case T_IDENTIFIER:
if (topState.type == substatement
|| topState.type == substatement_open
|| topState.type == case_cont
|| topState.type == block_open
|| topState.type == defun_open) {
if (tokens.size() > 1 && tokens.at(1).kind() == T_COLON) // label?
*indentDepth = 0;
}
break;
}
}
......
......@@ -112,6 +112,7 @@ public: // must be public to make Q_GADGET introspection work
cpp_macro_cont, // Subsequent lines of a multi-line C preprocessor macro definition.
cpp_macro_conditional, // Special marker used for separating saved from current state when dealing with #ifdef
qt_like_macro, // after an identifier starting with Q_ or QT_ at the beginning of the line
label, // after an identifier followed by a colon
defun_open, // Brace that opens a top-level function definition.
using_start, // right after the "using" token
......
......@@ -57,6 +57,7 @@ private Q_SLOTS:
void gnuStyleSwitch();
void whitesmithsStyleSwitch();
void indentToNextToken();
void labels();
};
struct Line {
......@@ -1116,6 +1117,21 @@ void tst_CodeFormatter::indentToNextToken()
checkIndent(data);
}
void tst_CodeFormatter::labels()
{
QList<Line> data;
data << Line("void foo() {")
<< Line("lab:")
<< Line(" int abc;")
<< Line("def:")
<< Line(" if (a)")
<< Line("boo:")
<< Line(" foo;")
<< Line(" int j;")
;
checkIndent(data);
}
QTEST_APPLESS_MAIN(tst_CodeFormatter)
#include "tst_codeformatter.moc"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment