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