From 46e612761f6bce9629028ef7fe6d3da45b98cd95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com> Date: Fri, 11 Dec 2009 12:26:42 +0100 Subject: [PATCH] Be smarter about CamelCase when doing case-insensitive completion Even when an upper case character can also match a lower case one, it should only be treated as a CamelCase match when the matched character is also upper case. This avoids some false positives. Also, the part that allows a word in a CamelCase identifier to be truncated should never be matched case-insensitively. --- src/plugins/cpptools/cppcodecompletion.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 9f2a5cd8b9c..8726a4300be 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -1444,23 +1444,27 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio QString keyRegExp; keyRegExp += QLatin1Char('^'); bool first = true; + const QLatin1String wordContinuation("[a-z0-9_]*"); foreach (const QChar &c, key) { - if (c.isUpper() && !first) - keyRegExp += QLatin1String("[a-z0-9_]*"); + if (m_caseSensitivity == CaseInsensitive || + (m_caseSensitivity == FirstLetterCaseSensitive && !first)) { - if (m_caseSensitivity == FirstLetterCaseSensitive && !first) { - keyRegExp += QLatin1Char('['); - keyRegExp += QRegExp::escape(c.toLower()); + keyRegExp += QLatin1String("(?:"); + if (c.isUpper() && !first) + keyRegExp += wordContinuation; keyRegExp += QRegExp::escape(c.toUpper()); - keyRegExp += QLatin1Char(']'); + keyRegExp += "|"; + keyRegExp += QRegExp::escape(c.toLower()); + keyRegExp += QLatin1Char(')'); } else { + if (c.isUpper() && !first) + keyRegExp += wordContinuation; keyRegExp += QRegExp::escape(c); } first = false; } - const QRegExp regExp(keyRegExp, (m_caseSensitivity == CaseInsensitive) - ? Qt::CaseInsensitive : Qt::CaseSensitive); + const QRegExp regExp(keyRegExp); foreach (TextEditor::CompletionItem item, m_completions) { if (regExp.indexIn(item.text) == 0) { -- GitLab