diff options
author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-12-08 13:01:25 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-12-08 13:05:02 +0000 |
commit | 0af0bd8e3603b547e1af4396fc5cc60ec208a3f8 (patch) | |
tree | 9fe02e113f705b5e68c7b418560705dcf588d3cd | |
parent | 69cf6b536e79605dd10c4a441fa3a75496a6138d (diff) |
Clang: Show type icon for usings/typedefs
...in the completion widget.
Task-number: QTCREATORBUG-15078
Change-Id: I1309b628e1f060fa68bdcf13838037728207b035
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
6 files changed, 31 insertions, 1 deletions
diff --git a/src/libs/clangbackendipc/codecompletion.cpp b/src/libs/clangbackendipc/codecompletion.cpp index f67f7dad04..e2f4753982 100644 --- a/src/libs/clangbackendipc/codecompletion.cpp +++ b/src/libs/clangbackendipc/codecompletion.cpp @@ -177,6 +177,7 @@ static const char *completionKindToString(CodeCompletion::Kind kind) case CodeCompletion::DestructorCompletionKind: return "Destructor"; case CodeCompletion::VariableCompletionKind: return "Variable"; case CodeCompletion::ClassCompletionKind: return "Class"; + case CodeCompletion::TypeAliasCompletionKind: return "TypeAlias"; case CodeCompletion::TemplateClassCompletionKind: return "TemplateClass"; case CodeCompletion::EnumerationCompletionKind: return "Enumeration"; case CodeCompletion::EnumeratorCompletionKind: return "Enumerator"; diff --git a/src/libs/clangbackendipc/codecompletion.h b/src/libs/clangbackendipc/codecompletion.h index 059496bc54..5d29a22576 100644 --- a/src/libs/clangbackendipc/codecompletion.h +++ b/src/libs/clangbackendipc/codecompletion.h @@ -62,6 +62,7 @@ public: DestructorCompletionKind, VariableCompletionKind, ClassCompletionKind, + TypeAliasCompletionKind, TemplateClassCompletionKind, EnumerationCompletionKind, EnumeratorCompletionKind, diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index fe437f52fc..0cd362d4da 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -118,6 +118,7 @@ QList<AssistProposalItem *> toAssistProposalItems(const CodeCompletions &complet 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; @@ -178,6 +179,7 @@ QList<AssistProposalItem *> toAssistProposalItems(const CodeCompletions &complet break; case CodeCompletion::Other: + item->setIcon(m_icons.iconForType(Icons::UnknownIconType)); break; } } diff --git a/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp b/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp index 311cde61ae..3e56090f83 100644 --- a/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp +++ b/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp @@ -126,6 +126,10 @@ void CodeCompletionsExtractor::extractCompletionKind() case CXCursor_TemplateTypeParameter: currentCodeCompletion_.setCompletionKind(CodeCompletion::ClassCompletionKind); break; + case CXCursor_TypedefDecl: + case CXCursor_TypeAliasDecl: + currentCodeCompletion_.setCompletionKind(CodeCompletion::TypeAliasCompletionKind); + break; case CXCursor_ClassTemplatePartialSpecialization: case CXCursor_ClassTemplate: case CXCursor_TemplateTemplateParameter: diff --git a/tests/unit/unittest/codecompletionsextractortest.cpp b/tests/unit/unittest/codecompletionsextractortest.cpp index cf31413085..d9f070a3ba 100644 --- a/tests/unit/unittest/codecompletionsextractortest.cpp +++ b/tests/unit/unittest/codecompletionsextractortest.cpp @@ -281,6 +281,28 @@ TEST_F(CodeCompletionsExtractor, Union) CodeCompletion::Available)); } +TEST_F(CodeCompletionsExtractor, Typedef) +{ + ClangCodeCompleteResults completeResults(getResults(classTranslationUnit, 20)); + + ::CodeCompletionsExtractor extractor(completeResults.data()); + + ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("TypeDef"), + CodeCompletion::TypeAliasCompletionKind, + CodeCompletion::Available)); +} + +TEST_F(CodeCompletionsExtractor, UsingAsTypeAlias) +{ + ClangCodeCompleteResults completeResults(getResults(classTranslationUnit, 20)); + + ::CodeCompletionsExtractor extractor(completeResults.data()); + + ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("UsingClass"), + CodeCompletion::TypeAliasCompletionKind, + CodeCompletion::Available)); +} + TEST_F(CodeCompletionsExtractor, TemplateTypeParameter) { ClangCodeCompleteResults completeResults(getResults(classTranslationUnit, 20)); diff --git a/tests/unit/unittest/data/complete_extractor_class.cpp b/tests/unit/unittest/data/complete_extractor_class.cpp index becfdc3292..218b5fbe25 100644 --- a/tests/unit/unittest/data/complete_extractor_class.cpp +++ b/tests/unit/unittest/data/complete_extractor_class.cpp @@ -2,6 +2,7 @@ class Class {}; struct Struct{}; union Union{}; typedef Class TypeDef; +using UsingClass = Class; template<class T> class TemplateClass{}; template<class T> class ClassTemplatePartialSpecialization; template<class T> class ClassTemplatePartialSpecialization<T*>; @@ -13,7 +14,6 @@ template<class T> class ClassTemplatePartialSpecialization<T*>; - template<class TemplateTypeParameter, template<class> class TemplateTemplateParameter> void function() { |