[llvm-branch-commits] [clang-tools-extra] [clang-doc] Add JSON bools for parents, vparents and test (PR #171699)
Erick Velez via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Dec 11 08:53:57 PST 2025
https://github.com/evelez7 updated https://github.com/llvm/llvm-project/pull/171699
>From 45d8e8a1662089056d2293c631b617ab22986f60 Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvelez7 at gmail.com>
Date: Sun, 16 Nov 2025 12:43:44 -0800
Subject: [PATCH] fix unittest
---
clang-tools-extra/clang-doc/JSONGenerator.cpp | 8 +-
.../test/clang-doc/json/inheritance.cpp | 111 ++++++++++++++++++
.../unittests/clang-doc/JSONGeneratorTest.cpp | 2 +
3 files changed, 119 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
diff --git a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
index d5ce34d2b984c..bcb9fd8e47bc6 100644
--- a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
+++ b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
@@ -116,8 +116,10 @@ TEST_F(JSONGeneratorTest, emitRecordJSON) {
}
],
"HasEnums": true,
+ "HasParents": true,
"HasPublicFunctions": true,
"HasRecords": true,
+ "HasVirtualParents": true,
"InfoType": "record",
"IsTypedef": false,
"Location": {
More information about the llvm-branch-commits
mailing list