Completion: improve complete in the middle

Apply clang fix to the old code model
Do not replace the text after cursor if
the proposal does not contain it or
if proposal matches 100% the text after it

Task-number: QTCREATORBUG-18471
Change-Id: I662cb6e48a9e0ee14065594f5c823f114fff2474
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2017-06-28 09:51:53 +02:00
parent 19c9194b11
commit 287ae7ae61
3 changed files with 35 additions and 22 deletions

View File

@@ -365,8 +365,21 @@ void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix)
cursor.setPosition(m_proposal->basePosition());
cursor.movePosition(QTextCursor::EndOfWord);
int currentPosition = m_editorWidget->position();
const QString textAfterCursor = m_editorWidget->textAt(currentPosition,
cursor.position() - currentPosition);
if (!textAfterCursor.startsWith(newPrefix)) {
if (newPrefix.indexOf(textAfterCursor, currentPosition - m_proposal->basePosition()) >= 0)
currentPosition = cursor.position();
const QStringRef prefixAddition =
newPrefix.midRef(currentPosition - m_proposal->basePosition());
// If remaining string starts with the prefix addition
if (textAfterCursor.startsWith(prefixAddition))
currentPosition += prefixAddition.size();
}
m_editorWidget->setCursorPosition(m_proposal->basePosition());
m_editorWidget->replace(cursor.position() - m_proposal->basePosition(), newPrefix);
m_editorWidget->replace(currentPosition - m_proposal->basePosition(), newPrefix);
notifyChange();
}