[clang-tools-extra] [clang-doc] Display enum type along with enum name in HTML view (PR #181347)

Samrudh Nelli via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 13 22:07:34 PST 2026


https://github.com/SamrudhNelli updated https://github.com/llvm/llvm-project/pull/181347

>From ad23cfaa3b9d265e5d52cde46854dac269a20810 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Fri, 13 Feb 2026 16:46:45 +0530
Subject: [PATCH 1/3] [clang-doc] Display enum type along with enum name in
 HTML view

For named variables
Previous output : enum XYZ
Current output : enum XYZ : unsigned int

For unnamed variables
Previous output : enum
Current output : enum : unsigned int

Fixes #llvm/166652
---
 clang-tools-extra/clang-doc/JSONGenerator.cpp          | 10 +++++++---
 .../clang-doc/assets/enum-template.mustache            |  2 +-
 clang-tools-extra/test/clang-doc/enum.cpp              |  2 +-
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 5051e7e6e690d..e44bdaaf8e510 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -565,9 +565,13 @@ static void serializeInfo(const EnumInfo &I, json::Object &Obj,
   if (I.BaseType) {
     json::Value BaseTypeVal = Object();
     auto &BaseTypeObj = *BaseTypeVal.getAsObject();
-    BaseTypeObj["Name"] = I.BaseType->Type.Name;
-    BaseTypeObj["QualName"] = I.BaseType->Type.QualName;
-    BaseTypeObj["USR"] = toHex(toStringRef(I.BaseType->Type.USR));
+    // Create a nested 'Type' object so the template can find {{Type.Name}}
+    json::Value TypeVal = Object();
+    auto &TypeObj = *TypeVal.getAsObject();
+    TypeObj["Name"] = I.BaseType->Type.Name;
+    TypeObj["QualName"] = I.BaseType->Type.QualName;
+    TypeObj["USR"] = toHex(toStringRef(I.BaseType->Type.USR));
+    BaseTypeObj["Type"] = TypeVal;
     Obj["BaseType"] = BaseTypeVal;
   }
 
diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache
index 7434b7bfce347..dc4260dcc37e2 100644
--- a/clang-tools-extra/clang-doc/assets/enum-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache
@@ -7,7 +7,7 @@
 }}
 <div id="{{USR}}" class="delimiter-container">
     <div>
-        <pre><code class="language-cpp code-clang-doc">enum {{Name}}</code></pre>
+        <pre><code class="language-cpp code-clang-doc">enum {{Name}}{{#BaseType}} : {{Type.Name}}{{/BaseType}}</code></pre>
     </div>
     {{! Enum Values }}
     <table class="table-wrapper">
diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp
index 6e11bbf065f25..a866f2e43aa75 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -82,7 +82,7 @@ enum class Shapes {
 
 // COM: FIXME: Serialize "enum class" in template
 // HTML-INDEX:     <div>
-// HTML-INDEX:         <pre><code class="language-cpp code-clang-doc">enum Shapes</code></pre>
+// HTML-INDEX:         <pre><code class="language-cpp code-clang-doc">enum Shapes : int</code></pre>
 // HTML-INDEX:     </div>
 // HTML-INDEX:     <table class="table-wrapper">
 // HTML-INDEX:         <tbody>

>From 46b3401fcf5b2e5cc80fecf2ccc467422bde3d80 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Sat, 14 Feb 2026 11:21:15 +0530
Subject: [PATCH 2/3] fix: remove duplicate info from the json

---
 clang-tools-extra/clang-doc/JSONGenerator.cpp             | 8 +-------
 clang-tools-extra/clang-doc/assets/enum-template.mustache | 2 +-
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index e44bdaaf8e510..47d69ce38ffbb 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -565,13 +565,7 @@ static void serializeInfo(const EnumInfo &I, json::Object &Obj,
   if (I.BaseType) {
     json::Value BaseTypeVal = Object();
     auto &BaseTypeObj = *BaseTypeVal.getAsObject();
-    // Create a nested 'Type' object so the template can find {{Type.Name}}
-    json::Value TypeVal = Object();
-    auto &TypeObj = *TypeVal.getAsObject();
-    TypeObj["Name"] = I.BaseType->Type.Name;
-    TypeObj["QualName"] = I.BaseType->Type.QualName;
-    TypeObj["USR"] = toHex(toStringRef(I.BaseType->Type.USR));
-    BaseTypeObj["Type"] = TypeVal;
+    BaseTypeObj["Name"] = I.BaseType->Type.QualName;
     Obj["BaseType"] = BaseTypeVal;
   }
 
diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache
index dc4260dcc37e2..809539565e185 100644
--- a/clang-tools-extra/clang-doc/assets/enum-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache
@@ -7,7 +7,7 @@
 }}
 <div id="{{USR}}" class="delimiter-container">
     <div>
-        <pre><code class="language-cpp code-clang-doc">enum {{Name}}{{#BaseType}} : {{Type.Name}}{{/BaseType}}</code></pre>
+        <pre><code class="language-cpp code-clang-doc">enum {{Name}}{{#BaseType}} : {{Name}}{{/BaseType}}</code></pre>
     </div>
     {{! Enum Values }}
     <table class="table-wrapper">

>From 86b23f9680d0e03a3bcd9009ed8571b1af231f42 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Sat, 14 Feb 2026 11:33:06 +0530
Subject: [PATCH 3/3] fix: revert JSONGenerator.cpp and use QualName for type
 in template

---
 clang-tools-extra/clang-doc/JSONGenerator.cpp             | 4 +++-
 clang-tools-extra/clang-doc/assets/enum-template.mustache | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 47d69ce38ffbb..5051e7e6e690d 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -565,7 +565,9 @@ static void serializeInfo(const EnumInfo &I, json::Object &Obj,
   if (I.BaseType) {
     json::Value BaseTypeVal = Object();
     auto &BaseTypeObj = *BaseTypeVal.getAsObject();
-    BaseTypeObj["Name"] = I.BaseType->Type.QualName;
+    BaseTypeObj["Name"] = I.BaseType->Type.Name;
+    BaseTypeObj["QualName"] = I.BaseType->Type.QualName;
+    BaseTypeObj["USR"] = toHex(toStringRef(I.BaseType->Type.USR));
     Obj["BaseType"] = BaseTypeVal;
   }
 
diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache
index 809539565e185..4b9e635ac86f9 100644
--- a/clang-tools-extra/clang-doc/assets/enum-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache
@@ -7,7 +7,7 @@
 }}
 <div id="{{USR}}" class="delimiter-container">
     <div>
-        <pre><code class="language-cpp code-clang-doc">enum {{Name}}{{#BaseType}} : {{Name}}{{/BaseType}}</code></pre>
+        <pre><code class="language-cpp code-clang-doc">enum {{Name}}{{#BaseType}} : {{QualName}}{{/BaseType}}</code></pre>
     </div>
     {{! Enum Values }}
     <table class="table-wrapper">



More information about the cfe-commits mailing list