aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
diff options
context:
space:
mode:
authorErick Velez <erickvelez7@gmail.com>2023-08-22 09:12:23 -0700
committerErick Velez <erickvelez7@gmail.com>2023-08-22 09:56:34 -0700
commit08f034f952fa67fc379df4caee2904de466a69f9 (patch)
tree83354144f3dc9629e404280f25084f5c923b1cbe /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
parent62020a3a7eb359cfea0bc719a7151cad0717d7be (diff)
downloadllvm-08f034f952fa67fc379df4caee2904de466a69f9.zip
llvm-08f034f952fa67fc379df4caee2904de466a69f9.tar.gz
llvm-08f034f952fa67fc379df4caee2904de466a69f9.tar.bz2
[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
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r--clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index e1b5f65..229bf04 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -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(