From 7e3294a8ce580961120e73895844ae9e71a76602 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Wed, 6 Oct 2010 13:50:04 +0200 Subject: [PATCH] C++ indenter: Don't get confused on 'for (a in b)'. Reviewed-by: Roberto Raggi Reviewed-by: Erik Verbruggen (cherry picked from commit c2d890f65e3d1975022aec4a70a93c53e43f38bc) --- src/plugins/cpptools/cppcodeformatter.cpp | 2 ++ .../codeformatter/tst_codeformatter.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 3a7462be9b6..3c13d10f589 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -317,12 +317,14 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) switch (kind) { case T_SEMICOLON: turnInto(for_statement_condition); break; case T_LPAREN: enter(condition_paren_open); break; + case T_RPAREN: turnInto(for_statement_expression); continue; } break; case for_statement_condition: switch (kind) { case T_SEMICOLON: turnInto(for_statement_expression); break; case T_LPAREN: enter(condition_paren_open); break; + case T_RPAREN: turnInto(for_statement_expression); continue; } break; case for_statement_expression: diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index 155a28810a4..0b240fa107c 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -33,6 +33,7 @@ private Q_SLOTS: void classAccess(); void ternary(); void objcAtDeclarations(); + void objcCallAndFor(); void braceList(); void bug1(); void bug2(); @@ -666,6 +667,24 @@ void tst_CodeFormatter::objcAtDeclarations() checkIndent(data); } +void tst_CodeFormatter::objcCallAndFor() +{ + QList<Line> data; + data << Line("void foo() {") + << Line(" NSArray *windows = [NSApp windows];") + << Line(" for (NSWindow *window in windows) {") + << Line(" NSArray *drawers = [window drawers];") + << Line(" for (NSDrawer *drawer in drawers) {") + << Line(" NSArray *views = [[drawer contentView] subviews];") + << Line(" int x;") + << Line(" }") + << Line(" }") + << Line("}") + << Line("int y;") + ; + checkIndent(data); +} + void tst_CodeFormatter::switch1() { QList<Line> data; -- GitLab