summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-12-11 12:26:42 +0100
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-12-11 14:38:28 +0100
commit46e612761f6bce9629028ef7fe6d3da45b98cd95 (patch)
treeb62e18f10b247c6de075bfdafdacb7f324b9c4c6 /src/plugins/cpptools/cppcodecompletion.cpp
parent96707f0b924f244908e1060ba8718700dad5e539 (diff)
downloadqt-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.cpp20
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) {