summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2017-08-01 10:55:27 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2017-08-04 10:47:21 +0000
commit7671a04a266a996809b832161a233cc49f200401 (patch)
treecaa78e9a7e9a0424f2b7753bb120b5ec4c3556bd /src
parent8b8a32ba0ec372e84c189228fde2b1a8d204f6f4 (diff)
downloadqt-creator-7671a04a266a996809b832161a233cc49f200401.tar.gz
Clang: fix regression in paren autocompletion
Limit the cases when paren is not added after function name completion Task-number: QTCREATORBUG-18656 Change-Id: Ibdf1e9c1d7d7b400c1c853e0bb81622e52729cfa Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/clangcodemodel/clangassistproposalitem.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/plugins/clangcodemodel/clangassistproposalitem.cpp b/src/plugins/clangcodemodel/clangassistproposalitem.cpp
index 75dc40c671..c6a2c45350 100644
--- a/src/plugins/clangcodemodel/clangassistproposalitem.cpp
+++ b/src/plugins/clangcodemodel/clangassistproposalitem.cpp
@@ -66,6 +66,14 @@ bool ClangAssistProposalItem::implicitlyApplies() const
return true;
}
+static void moveToPrevChar(TextEditor::TextDocumentManipulatorInterface &manipulator,
+ QTextCursor &cursor)
+{
+ cursor.movePosition(QTextCursor::PreviousCharacter);
+ while (manipulator.characterAt(cursor.position()).isSpace())
+ cursor.movePosition(QTextCursor::PreviousCharacter);
+}
+
void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface &manipulator,
int basePosition) const
{
@@ -116,7 +124,17 @@ void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface
cursor.movePosition(QTextCursor::PreviousWord);
while (manipulator.characterAt(cursor.position()) == ':')
cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 2);
- if (manipulator.characterAt(cursor.position()) != '&') {
+
+ // Move to the last character in the previous word
+ cursor.movePosition(QTextCursor::NextWord);
+ moveToPrevChar(manipulator, cursor);
+ bool abandonParen = false;
+ if (manipulator.characterAt(cursor.position()) == '&') {
+ moveToPrevChar(manipulator, cursor);
+ const QChar prevChar = manipulator.characterAt(cursor.position());
+ abandonParen = QString("(;,{}").contains(prevChar);
+ }
+ if (!abandonParen) {
if (completionSettings.m_spaceAfterFunctionName)
extraCharacters += QLatin1Char(' ');
extraCharacters += QLatin1Char('(');