aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
diff options
context:
space:
mode:
authorDaniel Grumberg <dgrumberg@apple.com>2022-04-04 17:19:03 +0100
committerDaniel Grumberg <dgrumberg@apple.com>2022-04-06 18:42:55 +0100
commit28d793144f2a5c92b83df3cc3d2772ec4cab0ad3 (patch)
treeb73589c32c9b3d6522982054d9386812b83d480c /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
parent090309d31624798fc5dde0220147519dc22c73c8 (diff)
downloadllvm-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.cpp57
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;
}