dang created this revision.
dang added reviewers: zixuw, ributzka, QuietMisdreavus.
Herald added a project: All.
dang requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This includes:

- replacing "relationhips" with "relationships"
- emitting the "pathComponents" property on symbols
- emitting the "accessLevel" property on symbols


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D123045

Files:
  clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
  clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
  clang/test/ExtractAPI/enum.c
  clang/test/ExtractAPI/global_record.c
  clang/test/ExtractAPI/global_record_multifile.c
  clang/test/ExtractAPI/language.c
  clang/test/ExtractAPI/macro_undefined.c
  clang/test/ExtractAPI/macros.c
  clang/test/ExtractAPI/objc_interface.m
  clang/test/ExtractAPI/objc_protocol.m
  clang/test/ExtractAPI/struct.c

Index: clang/test/ExtractAPI/struct.c
===================================================================
--- clang/test/ExtractAPI/struct.c
+++ clang/test/ExtractAPI/struct.c
@@ -48,7 +48,7 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [
+  "relationships": [
     {
       "kind": "memberOf",
       "source": "c:@S@Color@FI@Red",
@@ -72,6 +72,7 @@
   ],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -112,8 +113,10 @@
         "identifier": "c.struct"
       },
       "location": {
-        "character": 8,
-        "line": 2,
+        "position": {
+          "character": 8,
+          "line": 2
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -124,9 +127,13 @@
           }
         ],
         "title": "Color"
-      }
+      },
+      "pathComponents": [
+        "Color"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -151,8 +158,10 @@
         "identifier": "c.property"
       },
       "location": {
-        "character": 12,
-        "line": 3,
+        "position": {
+          "character": 12,
+          "line": 3
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -163,9 +172,14 @@
           }
         ],
         "title": "Red"
-      }
+      },
+      "pathComponents": [
+        "Color",
+        "Red"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -190,8 +204,10 @@
         "identifier": "c.property"
       },
       "location": {
-        "character": 12,
-        "line": 4,
+        "position": {
+          "character": 12,
+          "line": 4
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -202,9 +218,14 @@
           }
         ],
         "title": "Green"
-      }
+      },
+      "pathComponents": [
+        "Color",
+        "Green"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -229,8 +250,10 @@
         "identifier": "c.property"
       },
       "location": {
-        "character": 12,
-        "line": 5,
+        "position": {
+          "character": 12,
+          "line": 5
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -241,9 +264,14 @@
           }
         ],
         "title": "Blue"
-      }
+      },
+      "pathComponents": [
+        "Color",
+        "Blue"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -285,8 +313,10 @@
         "identifier": "c.property"
       },
       "location": {
-        "character": 12,
-        "line": 7,
+        "position": {
+          "character": 12,
+          "line": 7
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -297,7 +327,11 @@
           }
         ],
         "title": "Alpha"
-      }
+      },
+      "pathComponents": [
+        "Color",
+        "Alpha"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/objc_protocol.m
===================================================================
--- clang/test/ExtractAPI/objc_protocol.m
+++ clang/test/ExtractAPI/objc_protocol.m
@@ -45,7 +45,7 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [
+  "relationships": [
     {
       "kind": "conformsTo",
       "source": "c:objc(pl)AnotherProtocol",
@@ -54,6 +54,7 @@
   ],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -77,8 +78,10 @@
         "identifier": "objective-c.protocol"
       },
       "location": {
-        "character": 11,
-        "line": 1,
+        "position": {
+          "character": 11,
+          "line": 1
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -89,9 +92,13 @@
           }
         ],
         "title": "Protocol"
-      }
+      },
+      "pathComponents": [
+        "Protocol"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -128,8 +135,10 @@
         "identifier": "objective-c.protocol"
       },
       "location": {
-        "character": 11,
-        "line": 4,
+        "position": {
+          "character": 11,
+          "line": 4
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -140,7 +149,10 @@
           }
         ],
         "title": "AnotherProtocol"
-      }
+      },
+      "pathComponents": [
+        "AnotherProtocol"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/objc_interface.m
===================================================================
--- clang/test/ExtractAPI/objc_interface.m
+++ clang/test/ExtractAPI/objc_interface.m
@@ -52,7 +52,7 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [
+  "relationships": [
     {
       "kind": "memberOf",
       "source": "c:objc(cs)Super(cm)getWithProperty:",
@@ -86,6 +86,7 @@
   ],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -109,8 +110,10 @@
         "identifier": "objective-c.class"
       },
       "location": {
-        "character": 12,
-        "line": 3,
+        "position": {
+          "character": 12,
+          "line": 3
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -121,9 +124,13 @@
           }
         ],
         "title": "Super"
-      }
+      },
+      "pathComponents": [
+        "Super"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "text",
@@ -172,8 +179,10 @@
         "identifier": "objective-c.type.method"
       },
       "location": {
-        "character": 1,
-        "line": 5,
+        "position": {
+          "character": 1,
+          "line": 5
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -188,9 +197,14 @@
           }
         ],
         "title": "getWithProperty:"
-      }
+      },
+      "pathComponents": [
+        "Super",
+        "getWithProperty:"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -251,8 +265,10 @@
         "identifier": "objective-c.property"
       },
       "location": {
-        "character": 50,
-        "line": 4,
+        "position": {
+          "character": 50,
+          "line": 4
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -263,9 +279,14 @@
           }
         ],
         "title": "Property"
-      }
+      },
+      "pathComponents": [
+        "Super",
+        "Property"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -298,8 +319,10 @@
         "identifier": "objective-c.class"
       },
       "location": {
-        "character": 12,
-        "line": 8,
+        "position": {
+          "character": 12,
+          "line": 8
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -310,9 +333,13 @@
           }
         ],
         "title": "Derived"
-      }
+      },
+      "pathComponents": [
+        "Derived"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -337,8 +364,10 @@
         "identifier": "objective-c.ivar"
       },
       "location": {
-        "character": 8,
-        "line": 9,
+        "position": {
+          "character": 8,
+          "line": 9
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -349,9 +378,14 @@
           }
         ],
         "title": "Ivar"
-      }
+      },
+      "pathComponents": [
+        "Derived",
+        "Ivar"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "text",
@@ -380,8 +414,10 @@
         "identifier": "objective-c.method"
       },
       "location": {
-        "character": 1,
-        "line": 11,
+        "position": {
+          "character": 1,
+          "line": 11
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -396,7 +432,11 @@
           }
         ],
         "title": "getIvar"
-      }
+      },
+      "pathComponents": [
+        "Derived",
+        "getIvar"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/macros.c
===================================================================
--- clang/test/ExtractAPI/macros.c
+++ clang/test/ExtractAPI/macros.c
@@ -46,9 +46,10 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [],
+  "relationships": [],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -72,8 +73,10 @@
         "identifier": "objective-c.macro"
       },
       "location": {
-        "character": 9,
-        "line": 1,
+        "position": {
+          "character": 9,
+          "line": 1
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -84,9 +87,13 @@
           }
         ],
         "title": "HELLO"
-      }
+      },
+      "pathComponents": [
+        "HELLO"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -110,8 +117,10 @@
         "identifier": "objective-c.macro"
       },
       "location": {
-        "character": 9,
-        "line": 2,
+        "position": {
+          "character": 9,
+          "line": 2
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -122,9 +131,13 @@
           }
         ],
         "title": "WORLD"
-      }
+      },
+      "pathComponents": [
+        "WORLD"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -160,8 +173,10 @@
         "identifier": "objective-c.macro"
       },
       "location": {
-        "character": 9,
-        "line": 3,
+        "position": {
+          "character": 9,
+          "line": 3
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -172,9 +187,13 @@
           }
         ],
         "title": "MACRO_FUN"
-      }
+      },
+      "pathComponents": [
+        "MACRO_FUN"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -226,8 +245,10 @@
         "identifier": "objective-c.macro"
       },
       "location": {
-        "character": 9,
-        "line": 4,
+        "position": {
+          "character": 9,
+          "line": 4
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -238,9 +259,13 @@
           }
         ],
         "title": "FUN"
-      }
+      },
+      "pathComponents": [
+        "FUN"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -276,8 +301,10 @@
         "identifier": "objective-c.macro"
       },
       "location": {
-        "character": 9,
-        "line": 5,
+        "position": {
+          "character": 9,
+          "line": 5
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -288,9 +315,13 @@
           }
         ],
         "title": "FUNC99"
-      }
+      },
+      "pathComponents": [
+        "FUNC99"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -326,8 +357,10 @@
         "identifier": "objective-c.macro"
       },
       "location": {
-        "character": 9,
-        "line": 6,
+        "position": {
+          "character": 9,
+          "line": 6
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -338,7 +371,10 @@
           }
         ],
         "title": "FUNGNU"
-      }
+      },
+      "pathComponents": [
+        "FUNGNU"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/macro_undefined.c
===================================================================
--- clang/test/ExtractAPI/macro_undefined.c
+++ clang/test/ExtractAPI/macro_undefined.c
@@ -45,9 +45,10 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [],
+  "relationships": [],
   "symbols": [
     {
+      "accessLevel": "public"m
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -76,8 +77,10 @@
         "identifier": "objective-c.func"
       },
       "location": {
-        "character": 1,
-        "line": 3,
+        "position": {
+          "character": 1,
+          "line": 3
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -97,9 +100,13 @@
             "spelling": "void"
           }
         ]
-      }
+      },
+      "pathComponents": [
+        "foo"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -170,8 +177,10 @@
         "identifier": "objective-c.func"
       },
       "location": {
-        "character": 1,
-        "line": 4,
+        "position": {
+          "character": 1,
+          "line": 4
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -237,9 +246,13 @@
             "spelling": "void"
           }
         ]
-      }
+      },
+      "pathComponents": [
+        "bar"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -263,8 +276,10 @@
         "identifier": "objective-c.macro"
       },
       "location": {
-        "character": 9,
-        "line": 1,
+        "position": {
+          "character": 9,
+          "line": 1
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -275,7 +290,10 @@
           }
         ],
         "title": "HELLO"
-      }
+      },
+      "pathComponents": [
+        "HELLO"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/language.c
===================================================================
--- clang/test/ExtractAPI/language.c
+++ clang/test/ExtractAPI/language.c
@@ -53,9 +53,10 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [],
+  "relationships": [],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -80,8 +81,10 @@
         "identifier": "c.var"
       },
       "location": {
-        "character": 6,
-        "line": 1,
+        "position": {
+          "character": 6,
+          "line": 1
+        },
         "uri": "file://INPUT_DIR/c.h"
       },
       "names": {
@@ -92,7 +95,10 @@
           }
         ],
         "title": "c"
-      }
+      },
+      "pathComponents": [
+        "c"
+      ]
     }
   ]
 }
@@ -121,9 +127,10 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [],
+  "relationships": [],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -148,8 +155,10 @@
         "identifier": "objective-c.var"
       },
       "location": {
-        "character": 6,
-        "line": 1,
+        "position": {
+          "character": 6,
+          "line": 1
+        },
         "uri": "file://INPUT_DIR/objc.h"
       },
       "names": {
@@ -160,7 +169,10 @@
           }
         ],
         "title": "objc"
-      }
+      },
+      "pathComponents": [
+        "objc"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/global_record_multifile.c
===================================================================
--- clang/test/ExtractAPI/global_record_multifile.c
+++ clang/test/ExtractAPI/global_record_multifile.c
@@ -53,9 +53,10 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [],
+  "relationships": [],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -80,8 +81,10 @@
         "identifier": "c.var"
       },
       "location": {
-        "character": 5,
-        "line": 1,
+        "position": {
+          "character": 5,
+          "line": 1
+        },
         "uri": "file://INPUT_DIR/input1.h"
       },
       "names": {
@@ -92,9 +95,13 @@
           }
         ],
         "title": "num"
-      }
+      },
+      "pathComponents": [
+        "num"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -272,8 +279,10 @@
         "identifier": "c.func"
       },
       "location": {
-        "character": 6,
-        "line": 7,
+        "position": {
+          "character": 6,
+          "line": 7
+        },
         "uri": "file://INPUT_DIR/input2.h"
       },
       "names": {
@@ -365,7 +374,10 @@
             "spelling": "void"
           }
         ]
-      }
+      },
+      "pathComponents": [
+        "add"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/global_record.c
===================================================================
--- clang/test/ExtractAPI/global_record.c
+++ clang/test/ExtractAPI/global_record.c
@@ -51,9 +51,10 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [],
+  "relationships": [],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -78,8 +79,10 @@
         "identifier": "c.var"
       },
       "location": {
-        "character": 5,
-        "line": 1,
+        "position": {
+          "character": 5,
+          "line": 1
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -90,9 +93,13 @@
           }
         ],
         "title": "num"
-      }
+      },
+      "pathComponents": [
+        "num"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "typeIdentifier",
@@ -270,8 +277,10 @@
         "identifier": "c.func"
       },
       "location": {
-        "character": 6,
-        "line": 9,
+        "position": {
+          "character": 6,
+          "line": 9
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -363,7 +372,10 @@
             "spelling": "void"
           }
         ]
-      }
+      },
+      "pathComponents": [
+        "add"
+      ]
     }
   ]
 }
Index: clang/test/ExtractAPI/enum.c
===================================================================
--- clang/test/ExtractAPI/enum.c
+++ clang/test/ExtractAPI/enum.c
@@ -55,7 +55,7 @@
       "vendor": "apple"
     }
   },
-  "relationhips": [
+  "relationships": [
     {
       "kind": "memberOf",
       "source": "c:@E@Vehicle@Bicycle",
@@ -104,6 +104,7 @@
   ],
   "symbols": [
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -153,8 +154,10 @@
         "identifier": "c.enum"
       },
       "location": {
-        "character": 6,
-        "line": 2,
+        "position": {
+          "character": 6,
+          "line": 2
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -165,9 +168,13 @@
           }
         ],
         "title": "Vehicle"
-      }
+      },
+      "pathComponents": [
+        "Vehicle"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -183,8 +190,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 3,
+        "position": {
+          "character": 3,
+          "line": 3
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -195,9 +204,14 @@
           }
         ],
         "title": "Bicycle"
-      }
+      },
+      "pathComponents": [
+        "Vehicle",
+        "Bicycle"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -213,8 +227,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 4,
+        "position": {
+          "character": 3,
+          "line": 4
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -225,9 +241,14 @@
           }
         ],
         "title": "Car"
-      }
+      },
+      "pathComponents": [
+        "Vehicle",
+        "Car"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -260,8 +281,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 5,
+        "position": {
+          "character": 3,
+          "line": 5
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -272,9 +295,14 @@
           }
         ],
         "title": "Train"
-      }
+      },
+      "pathComponents": [
+        "Vehicle",
+        "Train"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -290,8 +318,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 6,
+        "position": {
+          "character": 3,
+          "line": 6
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -302,9 +332,14 @@
           }
         ],
         "title": "Ship"
-      }
+      },
+      "pathComponents": [
+        "Vehicle",
+        "Ship"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -320,8 +355,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 7,
+        "position": {
+          "character": 3,
+          "line": 7
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -332,9 +369,14 @@
           }
         ],
         "title": "Airplane"
-      }
+      },
+      "pathComponents": [
+        "Vehicle",
+        "Airplane"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "keyword",
@@ -367,8 +409,10 @@
         "identifier": "c.enum"
       },
       "location": {
-        "character": 6,
-        "line": 10,
+        "position": {
+          "character": 6,
+          "line": 10
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -379,9 +423,13 @@
           }
         ],
         "title": "Direction"
-      }
+      },
+      "pathComponents": [
+        "Direction"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -397,8 +445,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 11,
+        "position": {
+          "character": 3,
+          "line": 11
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -409,9 +459,14 @@
           }
         ],
         "title": "North"
-      }
+      },
+      "pathComponents": [
+        "Direction",
+        "North"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -427,8 +482,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 12,
+        "position": {
+          "character": 3,
+          "line": 12
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -439,9 +496,14 @@
           }
         ],
         "title": "East"
-      }
+      },
+      "pathComponents": [
+        "Direction",
+        "East"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -457,8 +519,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 13,
+        "position": {
+          "character": 3,
+          "line": 13
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -469,9 +533,14 @@
           }
         ],
         "title": "South"
-      }
+      },
+      "pathComponents": [
+        "Direction",
+        "South"
+      ]
     },
     {
+      "accessLevel": "public",
       "declarationFragments": [
         {
           "kind": "identifier",
@@ -487,8 +556,10 @@
         "identifier": "c.enum.case"
       },
       "location": {
-        "character": 3,
-        "line": 14,
+        "position": {
+          "character": 3,
+          "line": 14
+        },
         "uri": "file://INPUT_DIR/input.h"
       },
       "names": {
@@ -499,7 +570,11 @@
           }
         ],
         "title": "West"
-      }
+      },
+      "pathComponents": [
+        "Direction",
+        "West"
+      ]
     }
   ]
 }
Index: clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
===================================================================
--- clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -14,6 +14,7 @@
 #include "clang/ExtractAPI/Serialization/SymbolGraphSerializer.h"
 #include "clang/Basic/Version.h"
 #include "clang/ExtractAPI/API.h"
+#include "clang/ExtractAPI/DeclarationFragments.h"
 #include "llvm/Support/JSON.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/VersionTuple.h"
@@ -90,27 +91,35 @@
   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.
@@ -438,10 +447,12 @@
 }
 
 Optional<Object>
-SymbolGraphSerializer::serializeAPIRecord(const APIRecord &Record) const {
+SymbolGraphSerializer::serializeAPIRecord(const APIRecord &Record) {
   if (shouldSkip(Record))
     return None;
 
+  PathComponentContext.emplace_back(Record.Name);
+
   Object Obj;
   serializeObject(Obj, "identifier",
                   serializeIdentifier(Record, API.getLanguage()));
@@ -449,12 +460,16 @@
   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(PathComponentContext));
 
   return Obj;
 }
@@ -492,6 +507,7 @@
                     serializeFunctionSignature(Record.Signature));
 
   Symbols.emplace_back(std::move(*Obj));
+  PathComponentContext.pop_back();
 }
 
 void SymbolGraphSerializer::serializeEnumRecord(const EnumRecord &Record) {
@@ -503,12 +519,16 @@
 
   for (const auto &Constant : Record.Constants) {
     auto EnumConstant = serializeAPIRecord(*Constant);
+
+    PathComponentContext.pop_back();
+
     if (!EnumConstant)
       continue;
 
     Symbols.emplace_back(std::move(*EnumConstant));
     serializeRelationship(RelationshipKind::MemberOf, *Constant, Record);
   }
+  PathComponentContext.pop_back();
 }
 
 void SymbolGraphSerializer::serializeStructRecord(const StructRecord &Record) {
@@ -520,6 +540,9 @@
 
   for (const auto &Field : Record.Fields) {
     auto StructField = serializeAPIRecord(*Field);
+
+    PathComponentContext.pop_back();
+
     if (!StructField)
       continue;
 
@@ -540,6 +563,9 @@
   // the container.
   for (const auto &Ivar : Record.Ivars) {
     auto ObjCIvar = serializeAPIRecord(*Ivar);
+
+    PathComponentContext.pop_back();
+
     if (!ObjCIvar)
       continue;
 
@@ -550,6 +576,9 @@
   // Record methods and that the methods are members of the container.
   for (const auto &Method : Record.Methods) {
     auto ObjCMethod = serializeAPIRecord(*Method);
+
+    PathComponentContext.pop_back();
+
     if (!ObjCMethod)
       continue;
 
@@ -560,6 +589,9 @@
   // Record properties and that the properties are members of the container.
   for (const auto &Property : Record.Properties) {
     auto ObjCProperty = serializeAPIRecord(*Property);
+
+    PathComponentContext.pop_back();
+
     if (!ObjCProperty)
       continue;
 
@@ -577,11 +609,16 @@
       // record that Record is inherited from SuperClass.
       serializeRelationship(RelationshipKind::InheritsFrom, Record,
                             ObjCInterface->SuperClass);
+
+  PathComponentContext.pop_back();
 }
 
 void SymbolGraphSerializer::serializeMacroDefinitionRecord(
     const MacroDefinitionRecord &Record) {
   auto Macro = serializeAPIRecord(Record);
+
+  PathComponentContext.pop_back();
+
   if (!Macro)
     return;
 
@@ -617,7 +654,7 @@
     serializeMacroDefinitionRecord(*Macro.second);
 
   Root["symbols"] = std::move(Symbols);
-  Root["relationhips"] = std::move(Relationships);
+  Root["relationships"] = std::move(Relationships);
 
   return Root;
 }
Index: clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
===================================================================
--- clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
+++ clang/include/clang/ExtractAPI/Serialization/SymbolGraphSerializer.h
@@ -19,6 +19,7 @@
 
 #include "clang/ExtractAPI/API.h"
 #include "clang/ExtractAPI/Serialization/SerializerBase.h"
+#include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/JSON.h"
 #include "llvm/Support/VersionTuple.h"
 #include "llvm/Support/raw_ostream.h"
@@ -45,6 +46,9 @@
   /// The Symbol Graph format version used by this serializer.
   static const VersionTuple FormatVersion;
 
+  /// The current path component stack.
+  llvm::SmallVector<StringRef, 4> PathComponentContext;
+
 public:
   /// Serialize the APIs in \c APISet in the Symbol Graph format.
   ///
@@ -102,7 +106,7 @@
   ///
   /// \returns \c None if this \p Record should be skipped, or a JSON object
   /// containing common symbol information of \p Record.
-  Optional<Object> serializeAPIRecord(const APIRecord &Record) const;
+  Optional<Object> serializeAPIRecord(const APIRecord &Record);
 
   /// Serialize the \p Kind relationship between \p Source and \p Target.
   ///
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to