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>
This commit is contained in:
Ivan Donchevskii
2017-08-01 10:55:27 +02:00
parent 8b8a32ba0e
commit 7671a04a26

View File

@@ -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('(');