Clang: ClangAssistProposalItem is now inheriting AssistProposalItemInterface

Change-Id: I781ba27659e852782292596fe590666b09d7253e
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Marco Bubke
2016-01-28 15:35:18 +01:00
parent c903f4974f
commit bb3b7307ef
4 changed files with 140 additions and 108 deletions

View File

@@ -62,119 +62,39 @@ using TextEditor::AssistProposalItemInterface;
namespace {
const char SNIPPET_ICON_PATH[] = ":/texteditor/images/snippet.png";
QList<AssistProposalItemInterface *> toAssistProposalItems(const CodeCompletions &completions)
{
static CPlusPlus::Icons m_icons; // de-deduplicate
bool signalCompletion = false; // TODO
bool slotCompletion = false; // TODO
const QIcon snippetIcon = QIcon(QLatin1String(SNIPPET_ICON_PATH));
QHash<QString, ClangAssistProposalItem *> items;
foreach (const CodeCompletion &ccr, completions) {
if (ccr.text().isEmpty()) // TODO: Make isValid()?
foreach (const CodeCompletion &codeCompletion, completions) {
if (codeCompletion.text().isEmpty()) // TODO: Make isValid()?
continue;
if (signalCompletion && ccr.completionKind() != CodeCompletion::SignalCompletionKind)
if (signalCompletion && codeCompletion.completionKind() != CodeCompletion::SignalCompletionKind)
continue;
if (slotCompletion && ccr.completionKind() != CodeCompletion::SlotCompletionKind)
if (slotCompletion && codeCompletion.completionKind() != CodeCompletion::SlotCompletionKind)
continue;
QString name;
if (ccr.completionKind() == CodeCompletion::KeywordCompletionKind)
name = CompletionChunksToTextConverter::convertToName(ccr.chunks());
if (codeCompletion.completionKind() == CodeCompletion::KeywordCompletionKind)
name = CompletionChunksToTextConverter::convertToName(codeCompletion.chunks());
else
name = ccr.text().toString();
name = codeCompletion.text().toString();
ClangAssistProposalItem *item = items.value(name, 0);
if (item) {
item->addOverload(ccr);
item->addOverload(codeCompletion);
} else {
item = new ClangAssistProposalItem;
QString detail = CompletionChunksToTextConverter::convertToToolTipWithHtml(codeCompletion.chunks());
items.insert(name, item);
item->setText(name);
item->setOrder(ccr.priority());
QString detail
= CompletionChunksToTextConverter::convertToToolTipWithHtml(ccr.chunks());
if (!ccr.briefComment().isEmpty())
detail += QStringLiteral("\n\n") + ccr.briefComment().toString();
item->setDetail(detail);
item->setCodeCompletion(ccr);
}
// FIXME: show the effective accessebility instead of availability
using CPlusPlus::Icons;
switch (ccr.completionKind()) {
case CodeCompletion::ClassCompletionKind:
case CodeCompletion::TemplateClassCompletionKind:
case CodeCompletion::TypeAliasCompletionKind:
item->setIcon(m_icons.iconForType(Icons::ClassIconType)); break;
case CodeCompletion::EnumerationCompletionKind: item->setIcon(m_icons.iconForType(Icons::EnumIconType)); break;
case CodeCompletion::EnumeratorCompletionKind: item->setIcon(m_icons.iconForType(Icons::EnumeratorIconType)); break;
case CodeCompletion::ConstructorCompletionKind: // fall through
case CodeCompletion::DestructorCompletionKind: // fall through
case CodeCompletion::FunctionCompletionKind:
case CodeCompletion::TemplateFunctionCompletionKind:
case CodeCompletion::ObjCMessageCompletionKind:
switch (ccr.availability()) {
case CodeCompletion::Available:
case CodeCompletion::Deprecated:
item->setIcon(m_icons.iconForType(Icons::FuncPublicIconType));
break;
default:
item->setIcon(m_icons.iconForType(Icons::FuncPrivateIconType));
break;
}
break;
case CodeCompletion::SignalCompletionKind:
item->setIcon(m_icons.iconForType(Icons::SignalIconType));
break;
case CodeCompletion::SlotCompletionKind:
switch (ccr.availability()) {
case CodeCompletion::Available:
case CodeCompletion::Deprecated:
item->setIcon(m_icons.iconForType(Icons::SlotPublicIconType));
break;
case CodeCompletion::NotAccessible:
case CodeCompletion::NotAvailable:
item->setIcon(m_icons.iconForType(Icons::SlotPrivateIconType));
break;
}
break;
case CodeCompletion::NamespaceCompletionKind: item->setIcon(m_icons.iconForType(Icons::NamespaceIconType)); break;
case CodeCompletion::PreProcessorCompletionKind: item->setIcon(m_icons.iconForType(Icons::MacroIconType)); break;
case CodeCompletion::VariableCompletionKind:
switch (ccr.availability()) {
case CodeCompletion::Available:
case CodeCompletion::Deprecated:
item->setIcon(m_icons.iconForType(Icons::VarPublicIconType));
break;
default:
item->setIcon(m_icons.iconForType(Icons::VarPrivateIconType));
break;
}
break;
case CodeCompletion::KeywordCompletionKind:
item->setIcon(m_icons.iconForType(Icons::KeywordIconType));
break;
case CodeCompletion::ClangSnippetKind:
item->setIcon(snippetIcon);
break;
case CodeCompletion::Other:
item->setIcon(m_icons.iconForType(Icons::UnknownIconType));
break;
item->setOrder(int(codeCompletion.priority()));
item->setCodeCompletion(codeCompletion);
}
}
@@ -613,10 +533,10 @@ void ClangCompletionAssistProcessor::completeIncludePath(const QString &realPath
if (fileInfo.isDir())
text += QLatin1Char('/');
ClangAssistProposalItem *item = new ClangAssistProposalItem;
auto *item = new ClangAssistProposalItem; // TODO: Add IncludeAssistProposalItem
item->setText(text);
item->setDetail(hint);
item->setIcon(m_icons.keywordIcon());
//item->setDetail(hint);
//item->setIcon(m_icons.keywordIcon());
item->keepCompletionOperator(m_completionOperator);
m_completions.append(item);
}
@@ -645,14 +565,12 @@ bool ClangCompletionAssistProcessor::completeDoxygenKeywords()
void ClangCompletionAssistProcessor::addCompletionItem(const QString &text,
const QIcon &icon,
int order,
const QVariant &data)
int order)
{
ClangAssistProposalItem *item = new ClangAssistProposalItem;
item->setText(text);
item->setIcon(icon);
//item->setIcon(icon); TODO: Add item for macros and includes
item->setOrder(order);
item->setData(data);
item->keepCompletionOperator(m_completionOperator);
m_completions.append(item);
}