diff options
author | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2009-12-11 12:26:42 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2009-12-11 14:38:28 +0100 |
commit | 46e612761f6bce9629028ef7fe6d3da45b98cd95 (patch) | |
tree | b62e18f10b247c6de075bfdafdacb7f324b9c4c6 /src/plugins/cpptools/cppcodecompletion.cpp | |
parent | 96707f0b924f244908e1060ba8718700dad5e539 (diff) | |
download | qt-creator-46e612761f6bce9629028ef7fe6d3da45b98cd95.tar.gz |
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.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcodecompletion.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 9f2a5cd8b9..8726a4300b 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) { |