diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-02-14 14:41:51 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-02-15 09:27:00 +0100 |
commit | 2a59d2ae0c889fe6e4ac50a3f110b0103f880c15 (patch) | |
tree | ff989d0d79fcee735d24bf88ef7552aa43aa1c7f /src/plugins/cpptools/cppcodecompletion.cpp | |
parent | abdd404ff5ec8539f0d3fd38139eb08ad8a03d66 (diff) | |
download | qt-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.cpp | 35 |
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))); } } |