diff options
author | Daniel Grumberg <dgrumberg@apple.com> | 2022-04-04 17:19:03 +0100 |
---|---|---|
committer | Daniel Grumberg <dgrumberg@apple.com> | 2022-04-06 18:42:55 +0100 |
commit | 28d793144f2a5c92b83df3cc3d2772ec4cab0ad3 (patch) | |
tree | b73589c32c9b3d6522982054d9386812b83d480c /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | |
parent | 090309d31624798fc5dde0220147519dc22c73c8 (diff) | |
download | llvm-28d793144f2a5c92b83df3cc3d2772ec4cab0ad3.zip llvm-28d793144f2a5c92b83df3cc3d2772ec4cab0ad3.tar.gz llvm-28d793144f2a5c92b83df3cc3d2772ec4cab0ad3.tar.bz2 |
[clang][extract-api] Fix small issues with SymbolGraphSerializer
This includes:
- replacing "relationhips" with "relationships"
- emitting the "pathComponents" property on symbols
- emitting the "accessLevel" property on symbols
Differential Revision: https://reviews.llvm.org/D123045
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r-- | clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | 57 |
1 files changed, 46 insertions, 11 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp index bfd2c20..1440ca3 100644 --- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp +++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp @@ -90,27 +90,35 @@ Object serializePlatform(const Triple &T) { return Platform; } +/// Serialize a source position. +Object serializeSourcePosition(const PresumedLoc &Loc) { + assert(Loc.isValid() && "invalid source position"); + + Object SourcePosition; + SourcePosition["line"] = Loc.getLine(); + SourcePosition["character"] = Loc.getColumn(); + + return SourcePosition; +} + /// Serialize a source location in file. /// /// \param Loc The presumed location to serialize. /// \param IncludeFileURI If true, include the file path of \p Loc as a URI. /// Defaults to false. -Object serializeSourcePosition(const PresumedLoc &Loc, +Object serializeSourceLocation(const PresumedLoc &Loc, bool IncludeFileURI = false) { - assert(Loc.isValid() && "invalid source position"); - - Object SourcePosition; - SourcePosition["line"] = Loc.getLine(); - SourcePosition["character"] = Loc.getColumn(); + Object SourceLocation; + serializeObject(SourceLocation, "position", serializeSourcePosition(Loc)); if (IncludeFileURI) { std::string FileURI = "file://"; // Normalize file path to use forward slashes for the URI. FileURI += sys::path::convert_to_slash(Loc.getFilename()); - SourcePosition["uri"] = FileURI; + SourceLocation["uri"] = FileURI; } - return SourcePosition; + return SourceLocation; } /// Serialize a source range with begin and end locations. @@ -449,12 +457,16 @@ SymbolGraphSerializer::serializeAPIRecord(const APIRecord &Record) const { serializeObject(Obj, "names", serializeNames(Record)); serializeObject( Obj, "location", - serializeSourcePosition(Record.Location, /*IncludeFileURI=*/true)); + serializeSourceLocation(Record.Location, /*IncludeFileURI=*/true)); serializeObject(Obj, "availbility", serializeAvailability(Record.Availability)); serializeObject(Obj, "docComment", serializeDocComment(Record.Comment)); serializeArray(Obj, "declarationFragments", serializeDeclarationFragments(Record.Declaration)); + // TODO: Once we keep track of symbol access information serialize it + // correctly here. + Obj["accessLevel"] = "public"; + serializeArray(Obj, "pathComponents", Array(PathComponents)); return Obj; } @@ -483,18 +495,21 @@ void SymbolGraphSerializer::serializeRelationship(RelationshipKind Kind, } void SymbolGraphSerializer::serializeGlobalRecord(const GlobalRecord &Record) { + auto GlobalPathComponentGuard = makePathComponentGuard(Record.Name); + auto Obj = serializeAPIRecord(Record); if (!Obj) return; if (Record.GlobalKind == GVKind::Function) - serializeObject(*Obj, "parameters", + serializeObject(*Obj, "functionSignature", serializeFunctionSignature(Record.Signature)); Symbols.emplace_back(std::move(*Obj)); } void SymbolGraphSerializer::serializeEnumRecord(const EnumRecord &Record) { + auto EnumPathComponentGuard = makePathComponentGuard(Record.Name); auto Enum = serializeAPIRecord(Record); if (!Enum) return; @@ -502,7 +517,10 @@ void SymbolGraphSerializer::serializeEnumRecord(const EnumRecord &Record) { Symbols.emplace_back(std::move(*Enum)); for (const auto &Constant : Record.Constants) { + auto EnumConstantPathComponentGuard = + makePathComponentGuard(Constant->Name); auto EnumConstant = serializeAPIRecord(*Constant); + if (!EnumConstant) continue; @@ -512,6 +530,7 @@ void SymbolGraphSerializer::serializeEnumRecord(const EnumRecord &Record) { } void SymbolGraphSerializer::serializeStructRecord(const StructRecord &Record) { + auto StructPathComponentGuard = makePathComponentGuard(Record.Name); auto Struct = serializeAPIRecord(Record); if (!Struct) return; @@ -519,7 +538,9 @@ void SymbolGraphSerializer::serializeStructRecord(const StructRecord &Record) { Symbols.emplace_back(std::move(*Struct)); for (const auto &Field : Record.Fields) { + auto StructFieldPathComponentGuard = makePathComponentGuard(Field->Name); auto StructField = serializeAPIRecord(*Field); + if (!StructField) continue; @@ -530,6 +551,7 @@ void SymbolGraphSerializer::serializeStructRecord(const StructRecord &Record) { void SymbolGraphSerializer::serializeObjCContainerRecord( const ObjCContainerRecord &Record) { + auto ObjCContainerPathComponentGuard = makePathComponentGuard(Record.Name); auto ObjCContainer = serializeAPIRecord(Record); if (!ObjCContainer) return; @@ -539,7 +561,9 @@ void SymbolGraphSerializer::serializeObjCContainerRecord( // Record instance variables and that the instance variables are members of // the container. for (const auto &Ivar : Record.Ivars) { + auto IvarPathComponentGuard = makePathComponentGuard(Ivar->Name); auto ObjCIvar = serializeAPIRecord(*Ivar); + if (!ObjCIvar) continue; @@ -549,7 +573,9 @@ void SymbolGraphSerializer::serializeObjCContainerRecord( // Record methods and that the methods are members of the container. for (const auto &Method : Record.Methods) { + auto MethodPathComponentGuard = makePathComponentGuard(Method->Name); auto ObjCMethod = serializeAPIRecord(*Method); + if (!ObjCMethod) continue; @@ -559,7 +585,9 @@ void SymbolGraphSerializer::serializeObjCContainerRecord( // Record properties and that the properties are members of the container. for (const auto &Property : Record.Properties) { + auto PropertyPathComponentGuard = makePathComponentGuard(Property->Name); auto ObjCProperty = serializeAPIRecord(*Property); + if (!ObjCProperty) continue; @@ -581,13 +609,20 @@ void SymbolGraphSerializer::serializeObjCContainerRecord( void SymbolGraphSerializer::serializeMacroDefinitionRecord( const MacroDefinitionRecord &Record) { + auto MacroPathComponentGuard = makePathComponentGuard(Record.Name); auto Macro = serializeAPIRecord(Record); + if (!Macro) return; Symbols.emplace_back(std::move(*Macro)); } +SymbolGraphSerializer::PathComponentGuard +SymbolGraphSerializer::makePathComponentGuard(StringRef Component) { + return PathComponentGuard(PathComponents, Component); +} + Object SymbolGraphSerializer::serialize() { Object Root; serializeObject(Root, "metadata", serializeMetadata()); @@ -617,7 +652,7 @@ Object SymbolGraphSerializer::serialize() { serializeMacroDefinitionRecord(*Macro.second); Root["symbols"] = std::move(Symbols); - Root["relationhips"] = std::move(Relationships); + Root["relationships"] = std::move(Relationships); return Root; } |