[clang][ExtractAPI] Add support for namespaces

Serialize namespaces, nested namespaces, and class relationships inside them.

Depends on D157076

Reviewed By: dang

Differential Revision: https://reviews.llvm.org/D158239
This commit is contained in:
Erick Velez
2023-08-22 09:12:23 -07:00
parent 62020a3a7e
commit 08f034f952
10 changed files with 567 additions and 61 deletions

View File

@@ -357,6 +357,10 @@ Object serializeSymbolKind(APIRecord::RecordKind RK, Language Lang) {
case APIRecord::RK_Unknown:
llvm_unreachable("Records should have an explicit kind");
break;
case APIRecord::RK_Namespace:
Kind["identifier"] = AddLangPrefix("namespace");
Kind["displayName"] = "Namespace";
break;
case APIRecord::RK_GlobalFunction:
Kind["identifier"] = AddLangPrefix("func");
Kind["displayName"] = "Function";
@@ -834,6 +838,17 @@ void SymbolGraphSerializer::serializeRelationship(RelationshipKind Kind,
Relationships.emplace_back(std::move(Relationship));
}
void SymbolGraphSerializer::visitNamespaceRecord(
const NamespaceRecord &Record) {
auto Namespace = serializeAPIRecord(Record);
if (!Namespace)
return;
Symbols.emplace_back(std::move(*Namespace));
if (!Record.ParentInformation.empty())
serializeRelationship(RelationshipKind::MemberOf, Record,
Record.ParentInformation.ParentRecord);
}
void SymbolGraphSerializer::visitGlobalFunctionRecord(
const GlobalFunctionRecord &Record) {
auto Obj = serializeAPIRecord(Record);
@@ -887,6 +902,9 @@ void SymbolGraphSerializer::visitCXXClassRecord(const CXXClassRecord &Record) {
Symbols.emplace_back(std::move(*Class));
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
if (!Record.ParentInformation.empty())
serializeRelationship(RelationshipKind::MemberOf, Record,
Record.ParentInformation.ParentRecord);
}
void SymbolGraphSerializer::visitClassTemplateRecord(
@@ -898,6 +916,9 @@ void SymbolGraphSerializer::visitClassTemplateRecord(
Symbols.emplace_back(std::move(*Class));
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
if (!Record.ParentInformation.empty())
serializeRelationship(RelationshipKind::MemberOf, Record,
Record.ParentInformation.ParentRecord);
}
void SymbolGraphSerializer::visitClassTemplateSpecializationRecord(
@@ -910,6 +931,9 @@ void SymbolGraphSerializer::visitClassTemplateSpecializationRecord(
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
if (!Record.ParentInformation.empty())
serializeRelationship(RelationshipKind::MemberOf, Record,
Record.ParentInformation.ParentRecord);
}
void SymbolGraphSerializer::visitClassTemplatePartialSpecializationRecord(
@@ -922,6 +946,9 @@ void SymbolGraphSerializer::visitClassTemplatePartialSpecializationRecord(
for (const auto Base : Record.Bases)
serializeRelationship(RelationshipKind::InheritsFrom, Record, Base);
if (!Record.ParentInformation.empty())
serializeRelationship(RelationshipKind::MemberOf, Record,
Record.ParentInformation.ParentRecord);
}
void SymbolGraphSerializer::visitCXXInstanceMethodRecord(