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:
Marco Bubke
2018-04-04 16:58:47 +02:00
parent bc698d4ce6
commit b0fd6c30ce
4 changed files with 27 additions and 22 deletions

View File

@@ -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;

View File

@@ -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>;

View File

@@ -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";
}

View File

@@ -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))));
}