https://github.com/evelez7 created https://github.com/llvm/llvm-project/pull/171699
Parents and virtual parents didn't have "Has" bools in JSON output. That made it difficult to only create output conditionally. Also add an explicit test for inheritance and parents, vparents, and bases which actually weren't tested in JSON >From 40a76890f36b0fa77c9a5adea0ec1f82f30f063b Mon Sep 17 00:00:00 2001 From: Erick Velez <[email protected]> Date: Sun, 16 Nov 2025 12:43:44 -0800 Subject: [PATCH] [clang-doc] Add JSON bools for parents, vparents and test Parents and virtual parents didn't have "Has" bools in JSON output. That made it difficult to only create output conditionally. Also add an explicit test for inheritance and parents, vparents, and bases which actually weren't tested in JSON --- clang-tools-extra/clang-doc/JSONGenerator.cpp | 8 +- .../test/clang-doc/json/inheritance.cpp | 111 ++++++++++++++++++ 2 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 clang-tools-extra/test/clang-doc/json/inheritance.cpp diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index 0253ebf5335da..c65c3dc759c3e 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -572,12 +572,16 @@ static void serializeInfo(const RecordInfo &I, json::Object &Obj, serializeInfo(Base, BaseObj, RepositoryUrl); }); - if (!I.Parents.empty()) + if (!I.Parents.empty()) { serializeArray(I.Parents, Obj, "Parents", SerializeReferenceLambda); + Obj["HasParents"] = true; + } - if (!I.VirtualParents.empty()) + if (!I.VirtualParents.empty()) { serializeArray(I.VirtualParents, Obj, "VirtualParents", SerializeReferenceLambda); + Obj["HasVirtualParents"] = true; + } if (I.Template) serializeInfo(I.Template.value(), Obj); diff --git a/clang-tools-extra/test/clang-doc/json/inheritance.cpp b/clang-tools-extra/test/clang-doc/json/inheritance.cpp new file mode 100644 index 0000000000000..53476da870c61 --- /dev/null +++ b/clang-tools-extra/test/clang-doc/json/inheritance.cpp @@ -0,0 +1,111 @@ +// RUN: rm -rf %t && mkdir -p %t +// RUN: clang-doc --output=%t --format=json --executor=standalone %s +// RUN: FileCheck %s < %t/json/GlobalNamespace/_ZTV7MyClass.json + +class Virtual {}; +class Foo : virtual Virtual {}; +class Bar : Foo {}; +class Fizz : virtual Virtual {}; +class Buzz : Fizz {}; + +class MyClass : Bar, Buzz {}; + +// CHECK: "Bases": [ +// CHECK-NEXT: { +// CHECK-NEXT: "Access": "private", +// CHECK-NEXT: "InfoType": "record", +// CHECK-NEXT: "IsParent": true, +// CHECK-NEXT: "IsTypedef": false, +// CHECK-NEXT: "IsVirtual": false, +// CHECK-NEXT: "MangledName": "", +// CHECK-NEXT: "Name": "Bar", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "TagType": "struct", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "Access": "private", +// CHECK-NEXT: "InfoType": "record", +// CHECK-NEXT: "IsParent": false, +// CHECK-NEXT: "IsTypedef": false, +// CHECK-NEXT: "IsVirtual": false, +// CHECK-NEXT: "MangledName": "", +// CHECK-NEXT: "Name": "Foo", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "TagType": "struct", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "Access": "private", +// CHECK-NEXT: "InfoType": "record", +// CHECK-NEXT: "IsParent": false, +// CHECK-NEXT: "IsTypedef": false, +// CHECK-NEXT: "IsVirtual": true, +// CHECK-NEXT: "MangledName": "", +// CHECK-NEXT: "Name": "Virtual", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "TagType": "struct", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "Access": "private", +// CHECK-NEXT: "InfoType": "record", +// CHECK-NEXT: "IsParent": true, +// CHECK-NEXT: "IsTypedef": false, +// CHECK-NEXT: "IsVirtual": false, +// CHECK-NEXT: "MangledName": "", +// CHECK-NEXT: "Name": "Buzz", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "TagType": "struct", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "Access": "private", +// CHECK-NEXT: "InfoType": "record", +// CHECK-NEXT: "IsParent": false, +// CHECK-NEXT: "IsTypedef": false, +// CHECK-NEXT: "IsVirtual": false, +// CHECK-NEXT: "MangledName": "", +// CHECK-NEXT: "Name": "Fizz", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "TagType": "struct", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "Access": "private", +// CHECK-NEXT: "End": true, +// CHECK-NEXT: "InfoType": "record", +// CHECK-NEXT: "IsParent": false, +// CHECK-NEXT: "IsTypedef": false, +// CHECK-NEXT: "IsVirtual": true, +// CHECK-NEXT: "MangledName": "", +// CHECK-NEXT: "Name": "Virtual", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "TagType": "struct", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK: "Parents": [ +// CHECK-NEXT: { +// CHECK-NEXT: "Name": "Bar", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "QualName": "Bar", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "End": true, +// CHECK-NEXT: "Name": "Buzz", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "QualName": "Buzz", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK: "VirtualParents": [ +// CHECK-NEXT: { +// CHECK-NEXT: "End": true, +// CHECK-NEXT: "Name": "Virtual", +// CHECK-NEXT: "Path": "GlobalNamespace", +// CHECK-NEXT: "QualName": "Virtual", +// CHECK-NEXT: "USR": "{{[0-9A-F]*}}" +// CHECK-NEXT: } +// CHECK-NEXT: ] \ No newline at end of file _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
