diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp index efe3c276671dae86b0ea8da2a1f7671c090c4f3a..2a3818e0da520197fc023c498661c9535109bcfd 100644 --- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp +++ b/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" @@ -331,6 +332,12 @@ Object serializeNames(const APIRecord &Record) { Names["title"] = Record.Name; serializeArray(Names, "subHeading", serializeDeclarationFragments(Record.SubHeading)); + DeclarationFragments NavigatorFragments; + NavigatorFragments.append(Record.Name, + DeclarationFragments::FragmentKind::Identifier, + /*PreciseIdentifier*/ ""); + serializeArray(Names, "navigator", + serializeDeclarationFragments(NavigatorFragments)); return Names; } diff --git a/clang/test/ExtractAPI/enum.c b/clang/test/ExtractAPI/enum.c index a9646e21cc8f17b592adeef0b5b9f22977608f44..60f69059c942f9009558dde04843e916050cab75 100644 --- a/clang/test/ExtractAPI/enum.c +++ b/clang/test/ExtractAPI/enum.c @@ -161,6 +161,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Vehicle" + } + ], "subHeading": [ { "kind": "identifier", @@ -197,6 +203,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Bicycle" + } + ], "subHeading": [ { "kind": "identifier", @@ -234,6 +246,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Car" + } + ], "subHeading": [ { "kind": "identifier", @@ -288,6 +306,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Train" + } + ], "subHeading": [ { "kind": "identifier", @@ -325,6 +349,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Ship" + } + ], "subHeading": [ { "kind": "identifier", @@ -362,6 +392,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Airplane" + } + ], "subHeading": [ { "kind": "identifier", @@ -416,6 +452,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Direction" + } + ], "subHeading": [ { "kind": "identifier", @@ -452,6 +494,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "North" + } + ], "subHeading": [ { "kind": "identifier", @@ -489,6 +537,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "East" + } + ], "subHeading": [ { "kind": "identifier", @@ -526,6 +580,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "South" + } + ], "subHeading": [ { "kind": "identifier", @@ -563,6 +623,12 @@ enum Direction : unsigned char { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "West" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/global_record.c b/clang/test/ExtractAPI/global_record.c index dfe99c2f55f67962059338830e9220d9eccc08f4..1722c03eb47f91740551e8f19f0e401af84d886a 100644 --- a/clang/test/ExtractAPI/global_record.c +++ b/clang/test/ExtractAPI/global_record.c @@ -86,6 +86,12 @@ char unavailable __attribute__((unavailable)); "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "num" + } + ], "subHeading": [ { "kind": "identifier", @@ -365,6 +371,12 @@ char unavailable __attribute__((unavailable)); "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "add" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/global_record_multifile.c b/clang/test/ExtractAPI/global_record_multifile.c index 577eb121cf9226584e0b2148ee5649fe3467f54a..4d6566506a2265c94a90f0f2ed95cdab9e81ae1d 100644 --- a/clang/test/ExtractAPI/global_record_multifile.c +++ b/clang/test/ExtractAPI/global_record_multifile.c @@ -88,6 +88,12 @@ char unavailable __attribute__((unavailable)); "uri": "file://INPUT_DIR/input1.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "num" + } + ], "subHeading": [ { "kind": "identifier", @@ -367,6 +373,12 @@ char unavailable __attribute__((unavailable)); "uri": "file://INPUT_DIR/input2.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "add" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/known_files_only.c b/clang/test/ExtractAPI/known_files_only.c index 4f1d75b05fc972e81498e6b3d595bde50c244461..6baba4e7d921e823bf3ebfd7b706d365500d7be8 100644 --- a/clang/test/ExtractAPI/known_files_only.c +++ b/clang/test/ExtractAPI/known_files_only.c @@ -84,6 +84,12 @@ struct Foo { int a; }; "uri": "file://INPUT_DIR/input1.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "num" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/known_files_only_hmap.c b/clang/test/ExtractAPI/known_files_only_hmap.c index f213287975d06736c9d5f44d5d74d6e7ee3016b9..d5d06e65aa6f96a1fa5a2ca5d946ffc8681722c6 100644 --- a/clang/test/ExtractAPI/known_files_only_hmap.c +++ b/clang/test/ExtractAPI/known_files_only_hmap.c @@ -103,6 +103,12 @@ struct Foo { int a; }; "uri": "file://INPUT_DIR/subdir/subdir1/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "num" + } + ], "subHeading": [ { "kind": "identifier", @@ -148,6 +154,12 @@ struct Foo { int a; }; "uri": "file://INPUT_DIR/subdir/subdir2/known_file.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "known_num" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/language.c b/clang/test/ExtractAPI/language.c index df182cf07819e2024e518c9f86efa92736a4cd99..7effe75807d48ff69531a530378af3a321bd99bf 100644 --- a/clang/test/ExtractAPI/language.c +++ b/clang/test/ExtractAPI/language.c @@ -88,6 +88,12 @@ char objc; "uri": "file://INPUT_DIR/c.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "c" + } + ], "subHeading": [ { "kind": "identifier", @@ -162,6 +168,12 @@ char objc; "uri": "file://INPUT_DIR/objc.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "objc" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/macro_undefined.c b/clang/test/ExtractAPI/macro_undefined.c index 0ae04d02e15433aeae0dc908682541f740feceb0..9eee8ebb22f0f996ffdb1d6dc52fddc6dc39be19 100644 --- a/clang/test/ExtractAPI/macro_undefined.c +++ b/clang/test/ExtractAPI/macro_undefined.c @@ -95,6 +95,12 @@ FUNC_GEN(bar, const int *, unsigned); "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "foo" + } + ], "subHeading": [ { "kind": "identifier", @@ -241,6 +247,12 @@ FUNC_GEN(bar, const int *, unsigned); "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "bar" + } + ], "subHeading": [ { "kind": "identifier", @@ -285,6 +297,12 @@ FUNC_GEN(bar, const int *, unsigned); "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "HELLO" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/macros.c b/clang/test/ExtractAPI/macros.c index 867b0aed0061944523556b1c2f00c02f7a7bc54d..eb8e3f2b8e3aa63551b9cf3cec785101885a8400 100644 --- a/clang/test/ExtractAPI/macros.c +++ b/clang/test/ExtractAPI/macros.c @@ -80,6 +80,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "HELLO" + } + ], "subHeading": [ { "kind": "identifier", @@ -124,6 +130,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "WORLD" + } + ], "subHeading": [ { "kind": "identifier", @@ -180,6 +192,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MACRO_FUN" + } + ], "subHeading": [ { "kind": "identifier", @@ -252,6 +270,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "FUN" + } + ], "subHeading": [ { "kind": "identifier", @@ -308,6 +332,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "FUNC99" + } + ], "subHeading": [ { "kind": "identifier", @@ -364,6 +394,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "FUNGNU" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/objc_category.m b/clang/test/ExtractAPI/objc_category.m index 20eefdfbb00e5d2ab15e45c776b70f209e4c6548..af5a44ff5b424164acf93539e3d8cf377db36016 100644 --- a/clang/test/ExtractAPI/objc_category.m +++ b/clang/test/ExtractAPI/objc_category.m @@ -105,6 +105,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Interface" + } + ], "subHeading": [ { "kind": "identifier", @@ -158,6 +164,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "InstanceMethod" + } + ], "subHeading": [ { "kind": "text", @@ -216,6 +228,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "ClassMethod" + } + ], "subHeading": [ { "kind": "text", @@ -302,6 +320,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Property" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/objc_interface.m b/clang/test/ExtractAPI/objc_interface.m index 5ca64046839873fdb68c42e0bddbc2177917505c..fc42cfc7c6728112ccbc9de07125087557f27d3f 100644 --- a/clang/test/ExtractAPI/objc_interface.m +++ b/clang/test/ExtractAPI/objc_interface.m @@ -19,6 +19,7 @@ @interface Super <Protocol> @property(readonly, getter=getProperty) unsigned Property; + (id)getWithProperty:(unsigned) Property; +- (void)setProperty:(unsigned) Property andOtherThing: (unsigned) Thing; @end @interface Derived : Super { @@ -58,6 +59,11 @@ "source": "c:objc(cs)Super(cm)getWithProperty:", "target": "c:objc(cs)Super" }, + { + "kind": "memberOf", + "source": "c:objc(cs)Super(im)setProperty:andOtherThing:", + "target": "c:objc(cs)Super" + }, { "kind": "memberOf", "source": "c:objc(cs)Super(py)Property", @@ -117,6 +123,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Super" + } + ], "subHeading": [ { "kind": "identifier", @@ -186,6 +198,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "getWithProperty:" + } + ], "subHeading": [ { "kind": "text", @@ -203,6 +221,112 @@ "getWithProperty:" ] }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "setProperty:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Property" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "andOtherThing:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Thing" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Super(im)setProperty:andOtherThing:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 1, + "line": 6 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "setProperty:andOtherThing:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "setProperty:andOtherThing:" + } + ], + "title": "setProperty:andOtherThing:" + }, + "pathComponents": [ + "Super", + "setProperty:andOtherThing:" + ] + }, { "accessLevel": "public", "declarationFragments": [ @@ -272,6 +396,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Property" + } + ], "subHeading": [ { "kind": "identifier", @@ -321,11 +451,17 @@ "location": { "position": { "character": 12, - "line": 8 + "line": 9 }, "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Derived" + } + ], "subHeading": [ { "kind": "identifier", @@ -366,11 +502,17 @@ "location": { "position": { "character": 8, - "line": 9 + "line": 10 }, "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Ivar" + } + ], "subHeading": [ { "kind": "identifier", @@ -420,11 +562,17 @@ "location": { "position": { "character": 1, - "line": 11 + "line": 12 }, "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "getIvar" + } + ], "subHeading": [ { "kind": "text", diff --git a/clang/test/ExtractAPI/objc_protocol.m b/clang/test/ExtractAPI/objc_protocol.m index cffb0ed55d54e4249e4ca45250b3ab7f8ec44782..28cc0c3a73df4d38478b14a0299a2ce45a8b1584 100644 --- a/clang/test/ExtractAPI/objc_protocol.m +++ b/clang/test/ExtractAPI/objc_protocol.m @@ -85,6 +85,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Protocol" + } + ], "subHeading": [ { "kind": "identifier", @@ -142,6 +148,12 @@ "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "AnotherProtocol" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/struct.c b/clang/test/ExtractAPI/struct.c index ec03d84493b05ba8034cc6d8ad1370c1115c594e..38f55c19119e3d95b5242b6ed714fb2d94460e70 100644 --- a/clang/test/ExtractAPI/struct.c +++ b/clang/test/ExtractAPI/struct.c @@ -120,6 +120,12 @@ struct Color { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Color" + } + ], "subHeading": [ { "kind": "identifier", @@ -165,6 +171,12 @@ struct Color { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Red" + } + ], "subHeading": [ { "kind": "identifier", @@ -211,6 +223,12 @@ struct Color { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Green" + } + ], "subHeading": [ { "kind": "identifier", @@ -257,6 +275,12 @@ struct Color { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Blue" + } + ], "subHeading": [ { "kind": "identifier", @@ -320,6 +344,12 @@ struct Color { "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Alpha" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/typedef.c b/clang/test/ExtractAPI/typedef.c index 95a4a3d9663a9926a776fbb653caee1f8ac3df2d..4d1fd01566fdd3ede8009d502929ced95fd4d83f 100644 --- a/clang/test/ExtractAPI/typedef.c +++ b/clang/test/ExtractAPI/typedef.c @@ -84,6 +84,12 @@ typedef int MyInt; "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyInt" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/typedef_anonymous_record.c b/clang/test/ExtractAPI/typedef_anonymous_record.c index 80eff7cd140621016b0afcf582adbe4e2f54eb33..5444239fe34647a7f7daf1ad54a36e1468f13308 100644 --- a/clang/test/ExtractAPI/typedef_anonymous_record.c +++ b/clang/test/ExtractAPI/typedef_anonymous_record.c @@ -85,6 +85,12 @@ typedef MyStructStruct MyStructStructStruct; "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyStruct" + } + ], "title": "MyStruct" }, "pathComponents": [ @@ -132,6 +138,12 @@ typedef MyStructStruct MyStructStructStruct; "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyStructStruct" + } + ], "subHeading": [ { "kind": "identifier", @@ -186,6 +198,12 @@ typedef MyStructStruct MyStructStructStruct; "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyStructStructStruct" + } + ], "subHeading": [ { "kind": "identifier", diff --git a/clang/test/ExtractAPI/typedef_chain.c b/clang/test/ExtractAPI/typedef_chain.c index 52f2f75f0ded874761d4e7f86d818a680b396fe0..42a78d1d541cf965e12548108b6156b5aa777acb 100644 --- a/clang/test/ExtractAPI/typedef_chain.c +++ b/clang/test/ExtractAPI/typedef_chain.c @@ -86,6 +86,12 @@ typedef MyIntInt MyIntIntInt; "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyInt" + } + ], "subHeading": [ { "kind": "identifier", @@ -140,6 +146,12 @@ typedef MyIntInt MyIntIntInt; "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyIntInt" + } + ], "subHeading": [ { "kind": "identifier", @@ -194,6 +206,12 @@ typedef MyIntInt MyIntIntInt; "uri": "file://INPUT_DIR/input.h" }, "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyIntIntInt" + } + ], "subHeading": [ { "kind": "identifier",