forked from qt-creator/qt-creator
		
	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.
This commit is contained in:
		@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user