diff options
Diffstat (limited to 'src/plugins/cpptools/cppcodeformatter.cpp')
| -rw-r--r-- | src/plugins/cpptools/cppcodeformatter.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 2f71be2f65..c8ba07fbe0 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -273,7 +273,13 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case T_RBRACKET: // '[', ']' and '->' can be part of lambda declarator case T_LBRACKET: case T_ARROW: break; - default: leave(); continue; + default: + if (m_tokenIndex > 0 && tokenAt(m_tokenIndex - 1).kind() == T_ARROW) { + break; + } else { + leave(); + continue; + } } break; case lambda_declarator: @@ -629,7 +635,6 @@ void CodeFormatter::updateStateUntil(const QTextBlock &endBlock) break; if (loadLexerState(it) == -1) break; - previousState = blockData.m_endState; } @@ -667,6 +672,16 @@ void CodeFormatter::updateLineStateChange(const QTextBlock &block) saveBlockData(&next, BlockData()); } +bool CodeFormatter::isInStringLiteral(const QTextBlock &block) const +{ + if (!block.previous().isValid()) + return false; + BlockData blockData; + if (!loadBlockData(block.previous(), &blockData)) + return false; + return !blockData.m_endState.isEmpty() && blockData.m_endState.top().type == string_open; +} + CodeFormatter::State CodeFormatter::state(int belowTop) const { if (belowTop < m_currentState.size()) |
