summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-02-14 14:41:51 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-02-15 09:27:00 +0100
commit2a59d2ae0c889fe6e4ac50a3f110b0103f880c15 (patch)
treeff989d0d79fcee735d24bf88ef7552aa43aa1c7f /src/plugins/cpptools/cppcodecompletion.cpp
parentabdd404ff5ec8539f0d3fd38139eb08ad8a03d66 (diff)
downloadqt-creator-2a59d2ae0c889fe6e4ac50a3f110b0103f880c15.tar.gz
Split Objective-C keyword parsing to handle the '@' separately.
Because apparently, while designing the Objective-C language, somebody thought it was a world-class idea to allow any white-space between the '@' character and the subsequent keyword. With this fix, we now correctly parse: @ dynamic and: @ selector and: @"foo" "bar" @"mooze" (This last one is 1 single string split over multiple lines.) Wonderful, isn't it? What we (and Clang) do not support, but what GCC supports is something like: @"foo"@@ "bar" @"mooze" @@ which is equivalent to @"foobarmooze".
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 3d7cbebf9d..85a7666970 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -1197,18 +1197,35 @@ bool CppCodeCompletion::completeScope(const QList<LookupItem> &results,
return ! m_completions.isEmpty();
}
-void CppCodeCompletion::addKeywords()
+void CppCodeCompletion::addKeyword(const QString &text)
{
- int keywordLimit = T_FIRST_OBJC_AT_KEYWORD;
- if (objcKeywordsWanted())
- keywordLimit = T_LAST_OBJC_AT_KEYWORD + 1;
+ TextEditor::CompletionItem item(this);
+ item.text = text;
+ item.icon = m_icons.keywordIcon();
+ m_completions.append(item);
+}
+void CppCodeCompletion::addKeywords()
+{
// keyword completion items.
- for (int i = T_FIRST_KEYWORD; i < keywordLimit; ++i) {
- TextEditor::CompletionItem item(this);
- item.text = QLatin1String(Token::name(i));
- item.icon = m_icons.keywordIcon();
- m_completions.append(item);
+ for (int i = T_FIRST_KEYWORD; i < T_FIRST_OBJC_KEYWORD; ++i) {
+ addKeyword(QLatin1String(Token::name(i)));
+ }
+
+ if (objcKeywordsWanted()) {
+ // unique Objective-C keywords:
+ for (int i = T_FIRST_OBJC_KEYWORD; i <= T_LAST_OBJC_KEYWORD; ++i) {
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(i)));
+ }
+
+ // overlapping keywords:
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(T_CATCH)));
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(T_CLASS)));
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(T_PRIVATE)));
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(T_PROTECTED)));
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(T_PUBLIC)));
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(T_THROW)));
+ addKeyword(QLatin1Char('@') + QLatin1String(Token::name(T_TRY)));
}
}