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>;
|
||||
|
||||
Reference in New Issue
Block a user