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> class IndexingDeclVisitor : public clang::ConstDeclVisitor<IndexingDeclVisitor, SymbolKindAndTags>
{ {
public: 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()) { switch (declaration->getTagKind()) {
case clang::TTK_Struct: result.second.push_back(SymbolTag::Struct); break; 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_Interface: result.second.push_back(SymbolTag::MsvcInterface); break;
case clang::TTK_Union: result.second.push_back(SymbolTag::Union); 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_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; return result;

View File

@@ -41,7 +41,8 @@ using SymbolIndex = long long;
enum class SymbolKind : uchar enum class SymbolKind : uchar
{ {
None = 0, None = 0,
Tag, Enumeration,
Record,
Function, Function,
Variable, Variable,
Macro Macro
@@ -52,7 +53,6 @@ enum class SymbolTag : uchar
None = 0, None = 0,
Class, Class,
Struct, Struct,
Enumeration,
Union, Union,
MsvcInterface MsvcInterface
}; };

View File

@@ -921,10 +921,12 @@ const char *symbolKindString(SymbolKind symbolKind)
using ClangBackEnd::SymbolKind; using ClangBackEnd::SymbolKind;
switch (symbolKind) { switch (symbolKind) {
case SymbolKind::None: return "SymbolKind::None"; case SymbolKind::None: return "None";
case SymbolKind::Tag: return "SymbolKind::Tag"; case SymbolKind::Enumeration: return "Enumeration";
case SymbolKind::Function: return "SymbolKind::Function"; case SymbolKind::Record: return "Record";
case SymbolKind::Macro: return "SymbolKind::Macro"; case SymbolKind::Function: return "Function";
case SymbolKind::Variable: return "Variable";
case SymbolKind::Macro: return "Macro";
} }
return ""; return "";
@@ -940,9 +942,10 @@ const char *symbolTagString(SymbolTag symbolTag)
using ClangBackEnd::SymbolTag; using ClangBackEnd::SymbolTag;
switch (symbolTag) { switch (symbolTag) {
case SymbolTag::None: return "None";
case SymbolTag::Class: return "Class"; case SymbolTag::Class: return "Class";
case SymbolTag::Struct: return "Struct"; case SymbolTag::Struct: return "Struct";
case SymbolTag::Enumeration: return "Enumeration"; case SymbolTag::Union: return "Union";
case SymbolTag::MsvcInterface: return "MsvcInterface"; case SymbolTag::MsvcInterface: return "MsvcInterface";
} }

View File

@@ -617,7 +617,7 @@ TEST_F(SymbolsCollector, IsClassSymbol)
Contains( Contains(
AllOf( AllOf(
HasSymbolName("Class"), HasSymbolName("Class"),
HasSymbolKind(SymbolKind::Tag), HasSymbolKind(SymbolKind::Record),
HasSymbolTag(SymbolTag::Class)))); HasSymbolTag(SymbolTag::Class))));
} }
@@ -631,7 +631,7 @@ TEST_F(SymbolsCollector, IsStructSymbol)
Contains( Contains(
AllOf( AllOf(
HasSymbolName("Struct"), HasSymbolName("Struct"),
HasSymbolKind(SymbolKind::Tag), HasSymbolKind(SymbolKind::Record),
HasSymbolTag(SymbolTag::Struct)))); HasSymbolTag(SymbolTag::Struct))));
} }
@@ -646,13 +646,11 @@ TEST_F(SymbolsCollector, IsEnumerationSymbol)
Contains( Contains(
AllOf( AllOf(
HasSymbolName("Enumeration"), HasSymbolName("Enumeration"),
HasSymbolKind(SymbolKind::Tag), HasSymbolKind(SymbolKind::Enumeration))),
HasSymbolTag(SymbolTag::Enumeration))),
Contains( Contains(
AllOf( AllOf(
HasSymbolName("ScopedEnumeration"), HasSymbolName("ScopedEnumeration"),
HasSymbolKind(SymbolKind::Tag), HasSymbolKind(SymbolKind::Enumeration)))));
HasSymbolTag(SymbolTag::Enumeration)))));
} }
TEST_F(SymbolsCollector, IsUnionSymbol) TEST_F(SymbolsCollector, IsUnionSymbol)
@@ -665,7 +663,7 @@ TEST_F(SymbolsCollector, IsUnionSymbol)
Contains( Contains(
AllOf( AllOf(
HasSymbolName("Union"), HasSymbolName("Union"),
HasSymbolKind(SymbolKind::Tag), HasSymbolKind(SymbolKind::Record),
HasSymbolTag(SymbolTag::Union)))); HasSymbolTag(SymbolTag::Union))));
} }
@@ -679,7 +677,7 @@ TEST_F(SymbolsCollector, DISABLED_ON_NON_WINDOWS(IsMsvcInterfaceSymbol))
Contains( Contains(
AllOf( AllOf(
HasSymbolName("MsvcInterface"), HasSymbolName("MsvcInterface"),
HasSymbolKind(SymbolKind::Tag), HasSymbolKind(SymbolKind::Record),
HasSymbolTag(SymbolTag::MsvcInterface)))); HasSymbolTag(SymbolTag::MsvcInterface))));
} }