[clang-tools-extra] [clang-doc] Add protected members to class template (PR #174883)
Erick Velez via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 7 15:09:55 PST 2026
https://github.com/evelez7 created https://github.com/llvm/llvm-project/pull/174883
There were already tags for protected members in the Mustache template,
but didn't use the proper tags for the newer JSON scheme.
>From da562758d6b659e1f0a3bd708f8e092d76e29c87 Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvelez7 at gmail.com>
Date: Wed, 7 Jan 2026 14:22:28 -0800
Subject: [PATCH] [clang-doc] Add protected members to class template
There were already tags for protected members in the Mustache template,
but didn't use the proper tags for the newer JSON scheme.
---
clang-tools-extra/clang-doc/JSONGenerator.cpp | 2 +-
.../clang-doc/assets/class-template.mustache | 23 ++++++++-----------
.../test/clang-doc/json/class.cpp | 9 ++++++++
.../unittests/clang-doc/JSONGeneratorTest.cpp | 1 +
4 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 2dbc4186a32cc..fab54591b8faa 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -657,7 +657,7 @@ static void serializeInfo(const RecordInfo &I, json::Object &Obj,
if (!PubMembersArrayRef.empty())
insertArray(Obj, PublicMembersArray, "PublicMembers");
if (!ProtMembersArrayRef.empty())
- Obj["ProtectedMembers"] = ProtectedMembersArray;
+ insertArray(Obj, ProtectedMembersArray, "ProtectedMembers");
if (!PrivateMembersArrayRef.empty())
insertArray(Obj, PrivateMembersArray, "PrivateMembers");
}
diff --git a/clang-tools-extra/clang-doc/assets/class-template.mustache b/clang-tools-extra/clang-doc/assets/class-template.mustache
index 498fc5f079901..19e6e6adf1b44 100644
--- a/clang-tools-extra/clang-doc/assets/class-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/class-template.mustache
@@ -31,22 +31,22 @@
</details>
</li>
{{/HasPublicMembers}}
- {{#ProtectedMembers}}
+ {{#HasProtectedMembers}}
<li>
<details open>
<summary class="sidebar-section">
- <a class="sidebar-item" href="#PublicMethods">Protected Members</a>
+ <a class="sidebar-item" href="#ProtectedMembers">Protected Members</a>
</summary>
<ul>
- {{#Obj}}
+ {{#ProtectedMembers}}
<li class="sidebar-item-container">
<a class="sidebar-item" href="#{{Name}}">{{Name}}</a>
</li>
- {{/Obj}}
+ {{/ProtectedMembers}}
</ul>
</details>
</li>
- {{/ProtectedMembers}}
+ {{/HasProtectedMembers}}
{{#HasPublicFunctions}}
<li>
<details open>
@@ -178,23 +178,18 @@
</div>
</section>
{{/HasPublicMembers}}
- {{#ProtectedMembers}}
+ {{#HasProtectedMembers}}
<section id="ProtectedMembers" class="section-container">
<h2>Protected Members</h2>
<div>
- {{#Obj}}
+ {{#ProtectedMembers}}
<div id="{{Name}}" class="delimiter-container">
<pre><code class="language-cpp code-clang-doc" >{{#IsStatic}}static {{/IsStatic}}{{Type}} {{Name}}</code></pre>
- {{#MemberComments}}
- <div>
- {{>Comments}}
- </div>
- {{/MemberComments}}
</div>
- {{/Obj}}
+ {{/ProtectedMembers}}
</div>
</section>
- {{/ProtectedMembers}}
+ {{/HasProtectedMembers}}
{{#HasPublicFunctions}}
<section id="PublicMethods" class="section-container">
<h2>Public Methods</h2>
diff --git a/clang-tools-extra/test/clang-doc/json/class.cpp b/clang-tools-extra/test/clang-doc/json/class.cpp
index 9b45f86ff3292..6356aee14c16c 100644
--- a/clang-tools-extra/test/clang-doc/json/class.cpp
+++ b/clang-tools-extra/test/clang-doc/json/class.cpp
@@ -170,6 +170,7 @@ struct MyClass {
// CHECK-NEXT: "HasEnums": true,
// CHECK-NEXT: "HasFriends": true,
// CHECK-NEXT: "HasPrivateMembers": true,
+// CHECK-NEXT: "HasProtectedMembers": true,
// CHECK-NEXT: "HasPublicFunctions": true,
// CHECK-NEXT: "HasPublicMembers": true,
// CHECK-NEXT: "HasRecords": true,
@@ -320,6 +321,14 @@ struct MyClass {
// HTML-NEXT: </li>
// HTML-NEXT: </ul>
// HTML-NEXT: </details>
+// HTML: <section id="ProtectedMembers" class="section-container">
+// HTML-NEXT: <h2>Protected Members</h2>
+// HTML-NEXT: <div>
+// HTML-NEXT: <div id="ProtectedField" class="delimiter-container">
+// HTML-NEXT: <pre><code class="language-cpp code-clang-doc" >int ProtectedField</code></pre>
+// HTML-NEXT: </div>
+// HTML-NEXT: </div>
+// HTML-NEXT: </section>
// HTML: <section id="Classes" class="section-container">
// HTML-NEXT: <h2>Inner Classes</h2>
// HTML-NEXT: <ul class="class-container">
diff --git a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
index ee2c11061d706..d4260ebae3123 100644
--- a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
+++ b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
@@ -117,6 +117,7 @@ TEST_F(JSONGeneratorTest, emitRecordJSON) {
],
"HasEnums": true,
"HasParents": true,
+ "HasProtectedMembers": true,
"HasPublicFunctions": true,
"HasRecords": true,
"HasVirtualParents": true,
More information about the cfe-commits
mailing list