summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorLeandro Melo <leandro.melo@nokia.com>2010-09-24 20:16:34 +0200
committerLeandro Melo <leandro.melo@nokia.com>2010-09-24 20:22:03 +0200
commitcafcce0c3738264d48795f60b85472c06d587079 (patch)
treea7e1a60562a6e235a7043d66732f9d3472b08038 /src/plugins/cpptools/cppcodecompletion.cpp
parentf64cf427f2a0cd37789b9feb782cd1b4e26563ec (diff)
downloadqt-creator-cafcce0c3738264d48795f60b85472c06d587079.tar.gz
Add support for C++ snippets.
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 32a51d7f2c..4426cb64a7 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -75,6 +75,7 @@
#include <QtGui/QTextDocument> // Qt::escape()
#include <QtGui/QToolButton>
#include <QtGui/QVBoxLayout>
+#include <QtAlgorithms>
namespace {
const bool debug = ! qgetenv("CPLUSPLUS_DEBUG").isEmpty();
@@ -460,7 +461,8 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager)
m_shouldRestartCompletion(false),
m_automaticCompletion(false),
m_completionOperator(T_EOF_SYMBOL),
- m_objcEnabled(true)
+ m_objcEnabled(true),
+ m_snippetsParser(Core::ICore::instance()->resourcePath() + QLatin1String("/snippets/cpp.xml"))
{
}
@@ -1123,7 +1125,10 @@ void CppCodeCompletion::globalCompletion(Scope *currentScope)
foreach (ClassOrNamespace *b, usingBindings)
completeNamespace(b);
+ addSnippets();
addKeywords();
+ qStableSort(m_completions.begin(), m_completions.end(), completionItemLessThan);
+
addMacros(QLatin1String("<configuration>"), context.snapshot());
addMacros(context.thisDocument()->fileName(), context.snapshot());
}
@@ -1759,18 +1764,19 @@ void CppCodeCompletion::completions(QList<TextEditor::CompletionItem> *completio
QList<TextEditor::CompletionItem> CppCodeCompletion::removeDuplicates(const QList<TextEditor::CompletionItem> &items)
{
- // Remove duplicates
+ // Duplicates are kept only if they are snippets.
QList<TextEditor::CompletionItem> uniquelist;
QSet<QString> processed;
-
foreach (const TextEditor::CompletionItem &item, items) {
- if (! processed.contains(item.text)) {
- processed.insert(item.text);
+ if (!processed.contains(item.text) || item.isSnippet) {
uniquelist.append(item);
- if (Symbol *symbol = qvariant_cast<Symbol *>(item.data)) {
- if (Function *funTy = symbol->type()->asFunctionType()) {
- if (funTy->hasArguments())
- ++uniquelist.back().duplicateCount;
+ if (!item.isSnippet) {
+ processed.insert(item.text);
+ if (Symbol *symbol = qvariant_cast<Symbol *>(item.data)) {
+ if (Function *funTy = symbol->type()->asFunctionType()) {
+ if (funTy->hasArguments())
+ ++uniquelist.back().duplicateCount;
+ }
}
}
}
@@ -2018,4 +2024,10 @@ bool CppCodeCompletion::objcKeywordsWanted() const
return mdb->findByFile(fileName).type() == CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE;
}
+void CppCodeCompletion::addSnippets()
+{
+ static const QIcon icon(QLatin1String(":/texteditor/images/snippet.png"));
+ m_completions.append(m_snippetsParser.execute(this, icon));
+}
+
#include "cppcodecompletion.moc"