summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-08-13 17:58:40 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2020-08-20 08:10:22 +0000
commitddf7f5f232d70c8598654fdad08af3064f95903f (patch)
treef3267c7d5d2c34636fdb088cd93bfe75809bb1b9
parentd6c3846ab1c26ba6a1e6aea7df6e2119d50e9d4b (diff)
downloadqt-creator-ddf7f5f232d70c8598654fdad08af3064f95903f.tar.gz
CppTools: Do not indent within string literals
Multi-line strings must be kept as the user wrote them. Fixes: QTCREATORBUG-20180 Change-Id: I141eff52b55d31215e6f5c6c5a0e026689db877a Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r--src/plugins/cpptools/cppcodeformatter.cpp11
-rw-r--r--src/plugins/cpptools/cppcodeformatter.h1
-rw-r--r--src/plugins/cpptools/cppqtstyleindenter.cpp12
3 files changed, 19 insertions, 5 deletions
diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index dc81915227..c8ba07fbe0 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -635,7 +635,6 @@ void CodeFormatter::updateStateUntil(const QTextBlock &endBlock)
break;
if (loadLexerState(it) == -1)
break;
-
previousState = blockData.m_endState;
}
@@ -673,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())
diff --git a/src/plugins/cpptools/cppcodeformatter.h b/src/plugins/cpptools/cppcodeformatter.h
index b55724dc65..cf3eab98cb 100644
--- a/src/plugins/cpptools/cppcodeformatter.h
+++ b/src/plugins/cpptools/cppcodeformatter.h
@@ -57,6 +57,7 @@ public:
// calculates the state change introduced by changing a single line
void updateLineStateChange(const QTextBlock &block);
+ bool isInStringLiteral(const QTextBlock &block) const;
void indentFor(const QTextBlock &block, int *indent, int *padding);
void indentForNewLineAfter(const QTextBlock &block, int *indent, int *padding);
diff --git a/src/plugins/cpptools/cppqtstyleindenter.cpp b/src/plugins/cpptools/cppqtstyleindenter.cpp
index 8979ad62e8..3eebaf1321 100644
--- a/src/plugins/cpptools/cppqtstyleindenter.cpp
+++ b/src/plugins/cpptools/cppqtstyleindenter.cpp
@@ -99,6 +99,8 @@ void CppQtStyleIndenter::indentBlock(const QTextBlock &block,
QtStyleCodeFormatter codeFormatter(tabSettings, codeStyleSettings());
codeFormatter.updateStateUntil(block);
+ if (codeFormatter.isInStringLiteral(block))
+ return;
int indent;
int padding;
codeFormatter.indentFor(block, &indent, &padding);
@@ -135,10 +137,12 @@ void CppQtStyleIndenter::indent(const QTextCursor &cursor,
QTextCursor tc = cursor;
tc.beginEditBlock();
do {
- int indent;
- int padding;
- codeFormatter.indentFor(block, &indent, &padding);
- tabSettings.indentLine(block, indent + padding, padding);
+ if (!codeFormatter.isInStringLiteral(block)) {
+ int indent;
+ int padding;
+ codeFormatter.indentFor(block, &indent, &padding);
+ tabSettings.indentLine(block, indent + padding, padding);
+ }
codeFormatter.updateLineStateChange(block);
block = block.next();
} while (block.isValid() && block != end);