-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[clang-doc] Add JSON bools for parents, vparents and test #171699
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
602d10e to
dc830ae
Compare
40a7689 to
a0298a6
Compare
🐧 Linux x64 Test Results
✅ The build succeeded and all tests passed. |
🪟 Windows x64 Test Results
✅ The build succeeded and all tests passed. |
|
@llvm/pr-subscribers-clang-tools-extra Author: Erick Velez (evelez7) ChangesParents and virtual parents didn't have "Has" bools in JSON output. That Also add an explicit test for inheritance and parents, vparents, and Full diff: https://github.com/llvm/llvm-project/pull/171699.diff 3 Files Affected:
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": {
|
dc830ae to
85b0b75
Compare
a0298a6 to
45d8e8a
Compare

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