From 7671a04a266a996809b832161a233cc49f200401 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Tue, 1 Aug 2017 10:55:27 +0200 Subject: [PATCH] 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 --- .../clangassistproposalitem.cpp | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangassistproposalitem.cpp b/src/plugins/clangcodemodel/clangassistproposalitem.cpp index 75dc40c6710..c6a2c453505 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('(');