diff --git a/src/plugins/clangcodemodel/clangassistproposalitem.cpp b/src/plugins/clangcodemodel/clangassistproposalitem.cpp index c668484ccc4..15adb5c67bf 100644 --- a/src/plugins/clangcodemodel/clangassistproposalitem.cpp +++ b/src/plugins/clangcodemodel/clangassistproposalitem.cpp @@ -63,7 +63,7 @@ bool ClangAssistProposalItem::prematurelyApplies(const QChar &typedCharacter) co bool ClangAssistProposalItem::implicitlyApplies() const { - return false; + return true; } void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface &manipulator, @@ -174,20 +174,13 @@ void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface } // Avoid inserting characters that are already there - const int endsPosition = manipulator.positionAt(TextEditor::EndOfLinePosition); - const QString existingText = manipulator.textAt(manipulator.currentPosition(), endsPosition - manipulator.currentPosition()); - int existLength = 0; - if (!existingText.isEmpty() && ccr.completionKind() != CodeCompletion::KeywordCompletionKind) { - // Calculate the exist length in front of the extra chars - existLength = textToBeInserted.length() - (manipulator.currentPosition() - basePosition); - while (!existingText.startsWith(textToBeInserted.right(existLength))) { - if (--existLength == 0) - break; - } - } + QTextCursor cursor = manipulator.textCursorAt(basePosition); + cursor.movePosition(QTextCursor::EndOfWord); + const int currentPosition = cursor.position(); + for (int i = 0; i < extraCharacters.length(); ++i) { const QChar a = extraCharacters.at(i); - const QChar b = manipulator.characterAt(manipulator.currentPosition() + i + existLength); + const QChar b = manipulator.characterAt(currentPosition + i); if (a == b) ++extraLength; else @@ -196,9 +189,10 @@ void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface textToBeInserted += extraCharacters; - const int length = manipulator.currentPosition() - basePosition + existLength + extraLength; + const int length = currentPosition - basePosition + extraLength; const bool isReplaced = manipulator.replace(basePosition, length, textToBeInserted); + manipulator.setCursorPosition(basePosition + textToBeInserted.length()); if (isReplaced) { if (cursorOffset) manipulator.setCursorPosition(manipulator.currentPosition() + cursorOffset); diff --git a/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp b/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp index 0c860addd29..6fb0f2e9990 100644 --- a/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp +++ b/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp @@ -46,7 +46,7 @@ bool ClangPreprocessorAssistProposalItem::prematurelyApplies(const QChar &typedC bool ClangPreprocessorAssistProposalItem::implicitlyApplies() const { - return false; + return true; } void ClangPreprocessorAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface &manipulator, diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index ab3b9907a9e..98c2d24168c 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -354,9 +354,13 @@ void CodeAssistantPrivate::processProposalItem(AssistProposalItemInterface *prop void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix) { QTC_ASSERT(m_proposal, return); - const int currentPosition = m_editorWidget->position(); + + QTextCursor cursor(m_editorWidget->document()); + cursor.setPosition(m_proposal->basePosition()); + cursor.movePosition(QTextCursor::EndOfWord); + m_editorWidget->setCursorPosition(m_proposal->basePosition()); - m_editorWidget->replace(currentPosition - m_proposal->basePosition(), newPrefix); + m_editorWidget->replace(cursor.position() - m_proposal->basePosition(), newPrefix); notifyChange(); }