aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2021-08-18 14:57:19 +0300
committerOrgad Shaneh <orgads@gmail.com>2021-08-18 12:39:43 +0000
commitc6ac773b9a2d6fc5cb581cd56785525d0a352a4a (patch)
treeabf7001e6dfe4b78ae03388966dc6673ef84b640
parent57243d4dc62db9ae4738c08c13ad84755fe23fb0 (diff)
CppTools: Fix indentation of plain strings
Raw strings should not be indented, but old-style strings still should. Amends commit ddf7f5f232d70c8598654fdad08af3064f95903f. Fixes: QTCREATORBUG-25817 Change-Id: I7836388efb2d19b8b898c7463c7fa2d2077e80b2 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/plugins/cpptools/cppcodeformatter.cpp9
-rw-r--r--src/plugins/cpptools/cppcodeformatter.h6
-rw-r--r--src/plugins/cpptools/cppqtstyleindenter.cpp4
3 files changed, 11 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index ddd1079c32..639084a3ca 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -559,6 +559,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
break;
case string_open:
+ case raw_string_open:
if (!m_currentToken.isStringLiteral()) {
leave();
continue;
@@ -672,14 +673,14 @@ void CodeFormatter::updateLineStateChange(const QTextBlock &block)
saveBlockData(&next, BlockData());
}
-bool CodeFormatter::isInStringLiteral(const QTextBlock &block) const
+bool CodeFormatter::isInRawStringLiteral(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;
+ return !blockData.m_endState.isEmpty() && blockData.m_endState.top().type == raw_string_open;
}
CodeFormatter::State CodeFormatter::state(int belowTop) const
@@ -825,7 +826,7 @@ bool CodeFormatter::tryExpression(bool alsoExpression)
}
if (m_currentToken.isStringLiteral())
- newState = string_open;
+ newState = m_currentToken.kind() == T_RAW_STRING_LITERAL ? raw_string_open : string_open;
if (newState != -1) {
if (alsoExpression)
@@ -1439,6 +1440,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
break;
case string_open:
+ case raw_string_open:
*paddingDepth = tokenPosition - *indentDepth;
break;
}
@@ -1481,6 +1483,7 @@ void QtStyleCodeFormatter::adjustIndent(const Tokens &tokens, int lexerState, in
}
break;
case string_open:
+ case raw_string_open:
if (!tokenAt(0).isStringLiteral()) {
*paddingDepth = topState.savedPaddingDepth;
topState = previousState;
diff --git a/src/plugins/cpptools/cppcodeformatter.h b/src/plugins/cpptools/cppcodeformatter.h
index 1164c12eb1..0da8061ccd 100644
--- a/src/plugins/cpptools/cppcodeformatter.h
+++ b/src/plugins/cpptools/cppcodeformatter.h
@@ -57,7 +57,7 @@ public:
// calculates the state change introduced by changing a single line
void updateLineStateChange(const QTextBlock &block);
- bool isInStringLiteral(const QTextBlock &block) const;
+ bool isInRawStringLiteral(const QTextBlock &block) const;
void indentFor(const QTextBlock &block, int *indent, int *padding);
void indentForNewLineAfter(const QTextBlock &block, int *indent, int *padding);
@@ -173,8 +173,8 @@ public: // must be public to make Q_GADGET introspection work
lambda_instroducer, // when '=', '&' or ',' occurred within '[]'
lambda_declarator, // just after ']' when previous state is lambda_introducer
lambda_statement, // just after '{' when previous state is lambda_declarator or lambda_declarator_or_expression
- string_open
-
+ string_open, // after opening quote of simple string types, like ", L", u8" etc.
+ raw_string_open // after raw string open delimiter, like R"EOF(
};
Q_ENUM(StateType)
diff --git a/src/plugins/cpptools/cppqtstyleindenter.cpp b/src/plugins/cpptools/cppqtstyleindenter.cpp
index 3eebaf1321..cc3f272c45 100644
--- a/src/plugins/cpptools/cppqtstyleindenter.cpp
+++ b/src/plugins/cpptools/cppqtstyleindenter.cpp
@@ -99,7 +99,7 @@ void CppQtStyleIndenter::indentBlock(const QTextBlock &block,
QtStyleCodeFormatter codeFormatter(tabSettings, codeStyleSettings());
codeFormatter.updateStateUntil(block);
- if (codeFormatter.isInStringLiteral(block))
+ if (codeFormatter.isInRawStringLiteral(block))
return;
int indent;
int padding;
@@ -137,7 +137,7 @@ void CppQtStyleIndenter::indent(const QTextCursor &cursor,
QTextCursor tc = cursor;
tc.beginEditBlock();
do {
- if (!codeFormatter.isInStringLiteral(block)) {
+ if (!codeFormatter.isInRawStringLiteral(block)) {
int indent;
int padding;
codeFormatter.indentFor(block, &indent, &padding);