forked from qt-creator/qt-creator
C++: Do not reuse content in completion if it's unfinished identifier
Taskn-number: QTCREATORBUG-7521 Change-Id: I7b8edb93d143f599c93a82c82bf2c0d49c8e49e9 Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
This commit is contained in:
@@ -337,18 +337,24 @@ void CppAssistProposalItem::applyContextualContent(TextEditor::BaseTextEditor *e
|
||||
--cursorOffset;
|
||||
}
|
||||
|
||||
// Avoid inserting characters that are already there
|
||||
const int endsPosition = editor->position(TextEditor::ITextEditor::EndOfLine);
|
||||
const QString text = editor->textAt(editor->position(), endsPosition - editor->position());
|
||||
// Determine the length of characters that should just be kept on the editor, but do
|
||||
// not consider content that ends as an identifier (which could be undesired).
|
||||
const int lineEnd = editor->position(TextEditor::ITextEditor::EndOfLine);
|
||||
const QString inEditor = editor->textAt(editor->position(), lineEnd - editor->position());
|
||||
int existLength = 0;
|
||||
if (!text.isEmpty()) {
|
||||
// Calculate the exist length in front of the extra chars
|
||||
if (!inEditor.isEmpty()) {
|
||||
existLength = toInsert.length() - (editor->position() - basePosition);
|
||||
while (!text.startsWith(toInsert.right(existLength))) {
|
||||
const int inEditorLength = inEditor.length();
|
||||
while (inEditorLength < existLength
|
||||
|| (!inEditor.startsWith(toInsert.right(existLength))
|
||||
|| (inEditorLength > existLength
|
||||
&& (inEditor.at(existLength).isLetterOrNumber()
|
||||
|| inEditor.at(existLength) == QLatin1Char('_'))))) {
|
||||
if (--existLength == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < extraChars.length(); ++i) {
|
||||
const QChar a = extraChars.at(i);
|
||||
const QChar b = editor->characterAt(editor->position() + i + existLength);
|
||||
|
||||
Reference in New Issue
Block a user