diff options
author | Zixu Wang <zixu_wang@apple.com> | 2022-03-21 19:11:29 -0700 |
---|---|---|
committer | Zixu Wang <zixu_wang@apple.com> | 2022-03-23 09:45:06 -0700 |
commit | 5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2 (patch) | |
tree | dfdf6f8149f31b13fc83902a211b55cbd5ca8119 /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | |
parent | 311bdbc9b73f7aadc37be4285c74576600b9bdba (diff) | |
download | llvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.zip llvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.tar.gz llvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.tar.bz2 |
[clang][extract-api] Add struct support
- Add `StructFieldRecord` and `StructRecord` to store API information
for structs
- Implement `VisitRecordDecl` in `ExtractAPIVisitor`
- Implement Symbol Graph serialization for struct records.
- Add test case for struct records.
Depends on D121873
Differential Revision: https://reviews.llvm.org/D122202
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r-- | clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp index 574ea45..57fcc8a 100644 --- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp +++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp @@ -367,6 +367,14 @@ Object serializeSymbolKind(const APIRecord &Record, Kind["identifier"] = AddLangPrefix("enum"); Kind["displayName"] = "Enumeration"; break; + case APIRecord::RK_StructField: + Kind["identifier"] = AddLangPrefix("property"); + Kind["displayName"] = "Instance Property"; + break; + case APIRecord::RK_Struct: + Kind["identifier"] = AddLangPrefix("struct"); + Kind["displayName"] = "Structure"; + break; } return Kind; @@ -474,6 +482,23 @@ void SymbolGraphSerializer::serializeEnumRecord(const EnumRecord &Record) { } } +void SymbolGraphSerializer::serializeStructRecord(const StructRecord &Record) { + auto Struct = serializeAPIRecord(Record); + if (!Struct) + return; + + Symbols.emplace_back(std::move(*Struct)); + + for (const auto &Field : Record.Fields) { + auto StructField = serializeAPIRecord(*Field); + if (!StructField) + continue; + + Symbols.emplace_back(std::move(*StructField)); + serializeRelationship(RelationshipKind::MemberOf, *Field, Record); + } +} + Object SymbolGraphSerializer::serialize() { Object Root; serializeObject(Root, "metadata", serializeMetadata()); @@ -487,6 +512,10 @@ Object SymbolGraphSerializer::serialize() { for (const auto &Enum : API.getEnums()) serializeEnumRecord(*Enum.second); + // Serialize struct records in the API set. + for (const auto &Struct : API.getStructs()) + serializeStructRecord(*Struct.second); + Root["symbols"] = std::move(Symbols); Root["relationhips"] = std::move(Relationships); |