forked from qt-creator/qt-creator
Clang: Distinguish between Enum and Records
Creator is distinguishing enumerations and records, so we should do too. Change-Id: I114cfd207464abd9afd96c26c7504cf8a3a1cb8c Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -64,15 +64,19 @@ using SymbolKindAndTags = std::pair<SymbolKind, SymbolTags>;
|
||||
class IndexingDeclVisitor : public clang::ConstDeclVisitor<IndexingDeclVisitor, SymbolKindAndTags>
|
||||
{
|
||||
public:
|
||||
SymbolKindAndTags VisitTagDecl(const clang::TagDecl *declaration)
|
||||
SymbolKindAndTags VisitEnumDecl(const clang::EnumDecl *declaration)
|
||||
{
|
||||
SymbolKindAndTags result = {SymbolKind::Tag, {}};
|
||||
return {SymbolKind::Enumeration, {}};;
|
||||
}
|
||||
SymbolKindAndTags VisitRecordDecl(const clang::RecordDecl *declaration)
|
||||
{
|
||||
SymbolKindAndTags result = {SymbolKind::Record, {}};
|
||||
switch (declaration->getTagKind()) {
|
||||
case clang::TTK_Struct: result.second.push_back(SymbolTag::Struct); break;
|
||||
case clang::TTK_Interface: result.second.push_back(SymbolTag::MsvcInterface); break;
|
||||
case clang::TTK_Union: result.second.push_back(SymbolTag::Union); break;
|
||||
case clang::TTK_Class: result.second.push_back(SymbolTag::Class); break;
|
||||
case clang::TTK_Enum: result.second.push_back(SymbolTag::Enumeration); break;
|
||||
case clang::TTK_Enum: break; // this case can never happen in a record but it is there to silent the warning
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -41,7 +41,8 @@ using SymbolIndex = long long;
|
||||
enum class SymbolKind : uchar
|
||||
{
|
||||
None = 0,
|
||||
Tag,
|
||||
Enumeration,
|
||||
Record,
|
||||
Function,
|
||||
Variable,
|
||||
Macro
|
||||
@@ -50,11 +51,10 @@ enum class SymbolKind : uchar
|
||||
enum class SymbolTag : uchar
|
||||
{
|
||||
None = 0,
|
||||
Class,
|
||||
Struct,
|
||||
Enumeration,
|
||||
Union,
|
||||
MsvcInterface
|
||||
Class,
|
||||
Struct,
|
||||
Union,
|
||||
MsvcInterface
|
||||
};
|
||||
|
||||
using SymbolTags = Utils::SizedArray<SymbolTag, 7>;
|
||||
|
||||
@@ -921,10 +921,12 @@ const char *symbolKindString(SymbolKind symbolKind)
|
||||
using ClangBackEnd::SymbolKind;
|
||||
|
||||
switch (symbolKind) {
|
||||
case SymbolKind::None: return "SymbolKind::None";
|
||||
case SymbolKind::Tag: return "SymbolKind::Tag";
|
||||
case SymbolKind::Function: return "SymbolKind::Function";
|
||||
case SymbolKind::Macro: return "SymbolKind::Macro";
|
||||
case SymbolKind::None: return "None";
|
||||
case SymbolKind::Enumeration: return "Enumeration";
|
||||
case SymbolKind::Record: return "Record";
|
||||
case SymbolKind::Function: return "Function";
|
||||
case SymbolKind::Variable: return "Variable";
|
||||
case SymbolKind::Macro: return "Macro";
|
||||
}
|
||||
|
||||
return "";
|
||||
@@ -940,9 +942,10 @@ const char *symbolTagString(SymbolTag symbolTag)
|
||||
using ClangBackEnd::SymbolTag;
|
||||
|
||||
switch (symbolTag) {
|
||||
case SymbolTag::None: return "None";
|
||||
case SymbolTag::Class: return "Class";
|
||||
case SymbolTag::Struct: return "Struct";
|
||||
case SymbolTag::Enumeration: return "Enumeration";
|
||||
case SymbolTag::Union: return "Union";
|
||||
case SymbolTag::MsvcInterface: return "MsvcInterface";
|
||||
}
|
||||
|
||||
|
||||
@@ -617,7 +617,7 @@ TEST_F(SymbolsCollector, IsClassSymbol)
|
||||
Contains(
|
||||
AllOf(
|
||||
HasSymbolName("Class"),
|
||||
HasSymbolKind(SymbolKind::Tag),
|
||||
HasSymbolKind(SymbolKind::Record),
|
||||
HasSymbolTag(SymbolTag::Class))));
|
||||
}
|
||||
|
||||
@@ -631,7 +631,7 @@ TEST_F(SymbolsCollector, IsStructSymbol)
|
||||
Contains(
|
||||
AllOf(
|
||||
HasSymbolName("Struct"),
|
||||
HasSymbolKind(SymbolKind::Tag),
|
||||
HasSymbolKind(SymbolKind::Record),
|
||||
HasSymbolTag(SymbolTag::Struct))));
|
||||
}
|
||||
|
||||
@@ -646,13 +646,11 @@ TEST_F(SymbolsCollector, IsEnumerationSymbol)
|
||||
Contains(
|
||||
AllOf(
|
||||
HasSymbolName("Enumeration"),
|
||||
HasSymbolKind(SymbolKind::Tag),
|
||||
HasSymbolTag(SymbolTag::Enumeration))),
|
||||
HasSymbolKind(SymbolKind::Enumeration))),
|
||||
Contains(
|
||||
AllOf(
|
||||
HasSymbolName("ScopedEnumeration"),
|
||||
HasSymbolKind(SymbolKind::Tag),
|
||||
HasSymbolTag(SymbolTag::Enumeration)))));
|
||||
HasSymbolKind(SymbolKind::Enumeration)))));
|
||||
}
|
||||
|
||||
TEST_F(SymbolsCollector, IsUnionSymbol)
|
||||
@@ -665,7 +663,7 @@ TEST_F(SymbolsCollector, IsUnionSymbol)
|
||||
Contains(
|
||||
AllOf(
|
||||
HasSymbolName("Union"),
|
||||
HasSymbolKind(SymbolKind::Tag),
|
||||
HasSymbolKind(SymbolKind::Record),
|
||||
HasSymbolTag(SymbolTag::Union))));
|
||||
}
|
||||
|
||||
@@ -679,7 +677,7 @@ TEST_F(SymbolsCollector, DISABLED_ON_NON_WINDOWS(IsMsvcInterfaceSymbol))
|
||||
Contains(
|
||||
AllOf(
|
||||
HasSymbolName("MsvcInterface"),
|
||||
HasSymbolKind(SymbolKind::Tag),
|
||||
HasSymbolKind(SymbolKind::Record),
|
||||
HasSymbolTag(SymbolTag::MsvcInterface))));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user