diff options
author | Erick Velez <erickvelez7@gmail.com> | 2023-08-22 09:12:23 -0700 |
---|---|---|
committer | Erick Velez <erickvelez7@gmail.com> | 2023-08-22 09:56:34 -0700 |
commit | 08f034f952fa67fc379df4caee2904de466a69f9 (patch) | |
tree | 83354144f3dc9629e404280f25084f5c923b1cbe /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | |
parent | 62020a3a7eb359cfea0bc719a7151cad0717d7be (diff) | |
download | llvm-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.cpp | 27 |
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( |