diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2017-08-01 10:55:27 +0200 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2017-08-04 10:47:21 +0000 |
commit | 7671a04a266a996809b832161a233cc49f200401 (patch) | |
tree | caa78e9a7e9a0424f2b7753bb120b5ec4c3556bd /src | |
parent | 8b8a32ba0ec372e84c189228fde2b1a8d204f6f4 (diff) | |
download | qt-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.cpp | 20 |
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('('); |