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 <[email protected]> Date: Fri, 13 Feb 2026 16:46:45 +0530 Subject: [PATCH 1/8] [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 <[email protected]> Date: Sat, 14 Feb 2026 11:21:15 +0530 Subject: [PATCH 2/8] 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 <[email protected]> Date: Sat, 14 Feb 2026 11:33:06 +0530 Subject: [PATCH 3/8] 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"> >From 5e8dfc23fe3cfec833609d101820a344fc3f5d81 Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Thu, 19 Feb 2026 05:20:19 +0530 Subject: [PATCH 4/8] Print underlying type only for explicitly defined enums --- clang-tools-extra/clang-doc/MDGenerator.cpp | 16 +- clang-tools-extra/clang-doc/Serialize.cpp | 4 +- clang-tools-extra/test/clang-doc/enum.cpp | 292 +++++++++++++------- 3 files changed, 208 insertions(+), 104 deletions(-) diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index fcb75af80f9e9..cd32b5ea8970a 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -156,10 +156,18 @@ static void writeNameLink(const StringRef &CurrentPath, const Reference &R, static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, llvm::raw_ostream &OS) { - if (I.Scoped) - writeLine("| enum class " + I.Name + " |", OS); - else - writeLine("| enum " + I.Name + " |", OS); + std::string Header = "| enum "; + if(I.Scoped) + Header += "class "; + Header += I.Name; + Header += " "; + if(I.BaseType && I.BaseType->Type.QualName != "") { + Header += ": "; + Header += I.BaseType->Type.QualName; + Header += " "; + } + Header += "|"; + writeLine(Header, OS); writeLine("--", OS); std::string Buffer; diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp index 39c0cb378b0f5..8c6d5c972fd9e 100644 --- a/clang-tools-extra/clang-doc/Serialize.cpp +++ b/clang-tools-extra/clang-doc/Serialize.cpp @@ -1207,8 +1207,8 @@ emitInfo(const EnumDecl *D, const FullComment *FC, Location Loc, return {}; Enum.Scoped = D->isScoped(); - if (D->isFixed()) { - auto Name = D->getIntegerType().getAsString(); + if (const TypeSourceInfo *Info = D->getIntegerTypeSourceInfo()) { + auto Name = Info->getType().getAsString(); Enum.BaseType = TypeInfo(Name, Name); } parseEnumerators(Enum, D); diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp index a866f2e43aa75..983f5f7a81aec 100644 --- a/clang-tools-extra/test/clang-doc/enum.cpp +++ b/clang-tools-extra/test/clang-doc/enum.cpp @@ -13,6 +13,7 @@ // RUN: FileCheck %s < %t/GlobalNamespace/Animals.md --check-prefix=MD-ANIMAL // RUN: FileCheck %s < %t/Vehicles/index.md --check-prefix=MD-VEHICLES-LINE // RUN: FileCheck %s < %t/Vehicles/index.md --check-prefix=MD-VEHICLES +#include <cstdint> // COM: FIXME: Add enum value comments to template @@ -35,29 +36,28 @@ enum Color { // MD-INDEX: | Blue | // MD-INDEX: **brief** For specifying RGB colors -// HTML-INDEX: <div> -// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum Color</code></pre> -// HTML-INDEX: </div> -// HTML-INDEX: <table class="table-wrapper"> -// HTML-INDEX: <tbody> -// HTML-INDEX: <tr> -// HTML-INDEX: <th>Name</th> -// HTML-INDEX: <th>Value</th> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>Red</td> -// HTML-INDEX: <td>0</td> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>Green</td> -// HTML-INDEX: <td>1</td> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>Blue</td> -// HTML-INDEX: <td>2</td> -// HTML-INDEX: </tr> -// HTML-INDEX: </tbody> -// HTML-INDEX: </table> +// HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum Color</code></pre> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <table class="table-wrapper"> +// HTML-INDEX-NEXT: <tbody> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <th>Name</th> +// HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Red</td> +// HTML-INDEX-NEXT: <td>0</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Green</td> +// HTML-INDEX-NEXT: <td>1</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Blue</td> +// HTML-INDEX-NEXT: <td>2</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: </tbody> +// HTML-INDEX-NEXT: </table> /** * @brief Shape Types @@ -81,29 +81,127 @@ enum class Shapes { // MD-INDEX: **brief** Shape Types // COM: FIXME: Serialize "enum class" in template -// HTML-INDEX: <div> -// 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> -// HTML-INDEX: <tr> -// HTML-INDEX: <th>Name</th> -// HTML-INDEX: <th>Value</th> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>Circle</td> -// HTML-INDEX: <td>0</td> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>Rectangle</td> -// HTML-INDEX: <td>1</td> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>Triangle</td> -// HTML-INDEX: <td>2</td> -// HTML-INDEX: </tr> -// HTML-INDEX: </tbody> -// HTML-INDEX: </table> +// HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum Shapes</code></pre> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <table class="table-wrapper"> +// HTML-INDEX-NEXT: <tbody> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <th>Name</th> +// HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Circle</td> +// HTML-INDEX-NEXT: <td>0</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Rectangle</td> +// HTML-INDEX-NEXT: <td>1</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Triangle</td> +// HTML-INDEX-NEXT: <td>2</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: </tbody> +// HTML-INDEX-NEXT: </table> + +/** + * @brief Specify the size + */ +enum Size : uint8_t { + // MD-INDEX-LINE: *Defined at {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp#[[@LINE-1]]* + // HTML-INDEX-LINE: <p>Defined at line [[@LINE-2]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> + Small, ///< A pearl + Medium, ///< A tennis ball + Large ///< A football +}; + +// MD-INDEX: | enum Size : uint8_t | +// MD-INDEX: -- +// MD-INDEX: | Small | +// MD-INDEX: | Medium | +// MD-INDEX: | Large | +// MD-INDEX: **brief** Specify the size + +// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum Size : uint8_t</code></pre> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <table class="table-wrapper"> +// HTML-INDEX-NEXT: <tbody> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <th>Name</th> +// HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Small</td> +// HTML-INDEX-NEXT: <td>0</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Medium</td> +// HTML-INDEX-NEXT: <td>1</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>Large</td> +// HTML-INDEX-NEXT: <td>2</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: </tbody> +// HTML-INDEX-NEXT: </table> + +/** + * @brief Very long number + */ +enum : long long { + // MD-INDEX-LINE: *Defined at {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp#[[@LINE-1]]* + // HTML-INDEX-LINE: <p>Defined at line [[@LINE-2]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> + BigVal = 999999999999 +}; + +// MD-INDEX: | enum : long long | +// MD-INDEX: -- +// MD-INDEX: | BigVal | +// MD-INDEX: **brief** Very long number + +// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum : long long</code></pre> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <table class="table-wrapper"> +// HTML-INDEX-NEXT: <tbody> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <th>Name</th> +// HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>BigVal</td> +// HTML-INDEX-NEXT: <td>999999999999</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: </tbody> +// HTML-INDEX-NEXT: </table> + +/** + * @brief This is a top secret + */ +enum { + // MD-INDEX-LINE: *Defined at {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp#[[@LINE-1]]* + // HTML-INDEX-LINE: <p>Defined at line [[@LINE-2]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> + secret = true +}; + +// MD-INDEX: | enum | +// MD-INDEX: -- +// MD-INDEX: | secret | +// MD-INDEX: **brief** This is a top secret + +// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum </code></pre> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <table class="table-wrapper"> +// HTML-INDEX-NEXT: <tbody> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <th>Name</th> +// HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>secret</td> +// HTML-INDEX-NEXT: <td>true</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: </tbody> +// HTML-INDEX-NEXT: </table> // COM: FIXME: Add enums declared inside of classes to class template class Animals { @@ -122,7 +220,7 @@ class Animals { }; }; -// HTML-ANIMAL: <section id="Enums" class="section-container"> +// HTML-ANIMAL: <section id="Enums" class="section-container"> // HTML-ANIMAL-NEXT: <h2>Enumerations</h2> // HTML-ANIMAL-NEXT: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> // HTML-ANIMAL-NEXT: <div> @@ -153,7 +251,7 @@ class Animals { // HTML-ANIMAL-NEXT: <p> specify what animal the class is</p> // HTML-ANIMAL-NEXT: </div> // HTML-ANIMAL-NEXT: </div> -// HTML-ANIMAL-NEXT: <p>Defined at line 116 of file {{.*}}enum.cpp</p> +// HTML-ANIMAL-NEXT: <p>Defined at line {{.*}} of file {{.*}}enum.cpp</p> // HTML-ANIMAL-NEXT: </div> // HTML-ANIMAL-NEXT: </section> @@ -191,33 +289,32 @@ enum Car { // MD-VEHICLES: | Hatchback | // MD-VEHICLES: **brief** specify type of car -// HTML-VEHICLES: <div> -// HTML-VEHICLES: <pre><code class="language-cpp code-clang-doc">enum Car</code></pre> -// HTML-VEHICLES: </div> -// HTML-VEHICLES: <table class="table-wrapper"> -// HTML-VEHICLES: <tbody> -// HTML-VEHICLES: <tr> -// HTML-VEHICLES: <th>Name</th> -// HTML-VEHICLES: <th>Value</th> -// HTML-VEHICLES: </tr> -// HTML-VEHICLES: <tr> -// HTML-VEHICLES: <td>Sedan</td> -// HTML-VEHICLES: <td>0</td> -// HTML-VEHICLES: </tr> -// HTML-VEHICLES: <tr> -// HTML-VEHICLES: <td>SUV</td> -// HTML-VEHICLES: <td>1</td> -// HTML-VEHICLES: </tr> -// HTML-VEHICLES: <tr> -// HTML-VEHICLES: <td>Pickup</td> -// HTML-VEHICLES: <td>2</td> -// HTML-VEHICLES: </tr> -// HTML-VEHICLES: <tr> -// HTML-VEHICLES: <td>Hatchback</td> -// HTML-VEHICLES: <td>3</td> -// HTML-VEHICLES: </tr> -// HTML-VEHICLES: </tbody> -// HTML-VEHICLES: </table> +// HTML-VEHICLES-LABEL: <pre><code class="language-cpp code-clang-doc">enum Car</code></pre> +// HTML-VEHICLES-NEXT: </div> +// HTML-VEHICLES-NEXT: <table class="table-wrapper"> +// HTML-VEHICLES-NEXT: <tbody> +// HTML-VEHICLES-NEXT: <tr> +// HTML-VEHICLES-NEXT: <th>Name</th> +// HTML-VEHICLES-NEXT: <th>Value</th> +// HTML-VEHICLES-NEXT: </tr> +// HTML-VEHICLES-NEXT: <tr> +// HTML-VEHICLES-NEXT: <td>Sedan</td> +// HTML-VEHICLES-NEXT: <td>0</td> +// HTML-VEHICLES-NEXT: </tr> +// HTML-VEHICLES-NEXT: <tr> +// HTML-VEHICLES-NEXT: <td>SUV</td> +// HTML-VEHICLES-NEXT: <td>1</td> +// HTML-VEHICLES-NEXT: </tr> +// HTML-VEHICLES-NEXT: <tr> +// HTML-VEHICLES-NEXT: <td>Pickup</td> +// HTML-VEHICLES-NEXT: <td>2</td> +// HTML-VEHICLES-NEXT: </tr> +// HTML-VEHICLES-NEXT: <tr> +// HTML-VEHICLES-NEXT: <td>Hatchback</td> +// HTML-VEHICLES-NEXT: <td>3</td> +// HTML-VEHICLES-NEXT: </tr> +// HTML-VEHICLES-NEXT: </tbody> +// HTML-VEHICLES-NEXT: </table> enum ColorUserSpecified { RedUserSpecified = 'A', @@ -231,26 +328,25 @@ enum ColorUserSpecified { // MD-INDEX: | GreenUserSpecified | // MD-INDEX: | BlueUserSpecified | -// HTML-INDEX: <div> -// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum ColorUserSpecified</code></pre> -// HTML-INDEX: </div> -// HTML-INDEX: <table class="table-wrapper"> -// HTML-INDEX: <tbody> -// HTML-INDEX: <tr> -// HTML-INDEX: <th>Name</th> -// HTML-INDEX: <th>Value</th> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>RedUserSpecified</td> -// HTML-INDEX: <td>'A'</td> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>GreenUserSpecified</td> -// HTML-INDEX: <td>2</td> -// HTML-INDEX: </tr> -// HTML-INDEX: <tr> -// HTML-INDEX: <td>BlueUserSpecified</td> -// HTML-INDEX: <td>'C'</td> -// HTML-INDEX: </tr> -// HTML-INDEX: </tbody> -// HTML-INDEX: </table> +// HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum ColorUserSpecified</code></pre> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <table class="table-wrapper"> +// HTML-INDEX-NEXT: <tbody> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <th>Name</th> +// HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>RedUserSpecified</td> +// HTML-INDEX-NEXT: <td>'A'</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>GreenUserSpecified</td> +// HTML-INDEX-NEXT: <td>2</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: <tr> +// HTML-INDEX-NEXT: <td>BlueUserSpecified</td> +// HTML-INDEX-NEXT: <td>'C'</td> +// HTML-INDEX-NEXT: </tr> +// HTML-INDEX-NEXT: </tbody> +// HTML-INDEX-NEXT: </table> >From f83524bf05ff72c60c2730df4dee3d82823b9354 Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Thu, 19 Feb 2026 05:50:03 +0530 Subject: [PATCH 5/8] Display Enum Value along with Name --- clang-tools-extra/clang-doc/MDGenerator.cpp | 6 +-- clang-tools-extra/test/clang-doc/enum.cpp | 42 ++++++++++----------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index cd32b5ea8970a..4fad57c51db7e 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -157,11 +157,11 @@ static void writeNameLink(const StringRef &CurrentPath, const Reference &R, static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, llvm::raw_ostream &OS) { std::string Header = "| enum "; - if(I.Scoped) + if (I.Scoped) Header += "class "; Header += I.Name; Header += " "; - if(I.BaseType && I.BaseType->Type.QualName != "") { + if (I.BaseType && I.BaseType->Type.QualName != "") { Header += ": "; Header += I.BaseType->Type.QualName; Header += " "; @@ -174,7 +174,7 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, llvm::raw_string_ostream Members(Buffer); if (!I.Members.empty()) for (const auto &N : I.Members) - Members << "| " << N.Name << " |\n"; + Members << "| " << N.Name << " | " << N.Value << " |\n"; writeLine(Members.str(), OS); maybeWriteSourceFileRef(OS, CDCtx, I.DefLoc); diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp index 983f5f7a81aec..ca03946ff4acf 100644 --- a/clang-tools-extra/test/clang-doc/enum.cpp +++ b/clang-tools-extra/test/clang-doc/enum.cpp @@ -31,9 +31,9 @@ enum Color { // MD-INDEX: ## Enums // MD-INDEX: | enum Color | // MD-INDEX: -- -// MD-INDEX: | Red | -// MD-INDEX: | Green | -// MD-INDEX: | Blue | +// MD-INDEX: | Red | 0 | +// MD-INDEX: | Green | 1 | +// MD-INDEX: | Blue | 2 | // MD-INDEX: **brief** For specifying RGB colors // HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum Color</code></pre> @@ -75,9 +75,9 @@ enum class Shapes { }; // MD-INDEX: | enum class Shapes | // MD-INDEX: -- -// MD-INDEX: | Circle | -// MD-INDEX: | Rectangle | -// MD-INDEX: | Triangle | +// MD-INDEX: | Circle | 0 | +// MD-INDEX: | Rectangle | 1 | +// MD-INDEX: | Triangle | 2 | // MD-INDEX: **brief** Shape Types // COM: FIXME: Serialize "enum class" in template @@ -117,9 +117,9 @@ enum Size : uint8_t { // MD-INDEX: | enum Size : uint8_t | // MD-INDEX: -- -// MD-INDEX: | Small | -// MD-INDEX: | Medium | -// MD-INDEX: | Large | +// MD-INDEX: | Small | 0 | +// MD-INDEX: | Medium | 1 | +// MD-INDEX: | Large | 2 | // MD-INDEX: **brief** Specify the size // HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum Size : uint8_t</code></pre> @@ -156,7 +156,7 @@ enum : long long { // MD-INDEX: | enum : long long | // MD-INDEX: -- -// MD-INDEX: | BigVal | +// MD-INDEX: | BigVal | 999999999999 | // MD-INDEX: **brief** Very long number // HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum : long long</code></pre> @@ -185,7 +185,7 @@ enum { // MD-INDEX: | enum | // MD-INDEX: -- -// MD-INDEX: | secret | +// MD-INDEX: | secret | 1 | // MD-INDEX: **brief** This is a top secret // HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum </code></pre> @@ -259,9 +259,9 @@ class Animals { // MD-ANIMAL: ## Enums // MD-ANIMAL: | enum AnimalType | // MD-ANIMAL: -- -// MD-ANIMAL: | Dog | -// MD-ANIMAL: | Cat | -// MD-ANIMAL: | Iguana | +// MD-ANIMAL: | Dog | 0 | +// MD-ANIMAL: | Cat | 1 | +// MD-ANIMAL: | Iguana | 2 | // MD-ANIMAL: **brief** specify what animal the class is namespace Vehicles { @@ -283,10 +283,10 @@ enum Car { // MD-VEHICLES: ## Enums // MD-VEHICLES: | enum Car | // MD-VEHICLES: -- -// MD-VEHICLES: | Sedan | -// MD-VEHICLES: | SUV | -// MD-VEHICLES: | Pickup | -// MD-VEHICLES: | Hatchback | +// MD-VEHICLES: | Sedan | 0 | +// MD-VEHICLES: | SUV | 1 | +// MD-VEHICLES: | Pickup | 2 | +// MD-VEHICLES: | Hatchback | 3 | // MD-VEHICLES: **brief** specify type of car // HTML-VEHICLES-LABEL: <pre><code class="language-cpp code-clang-doc">enum Car</code></pre> @@ -324,9 +324,9 @@ enum ColorUserSpecified { // MD-INDEX: | enum ColorUserSpecified | // MD-INDEX: -- -// MD-INDEX: | RedUserSpecified | -// MD-INDEX: | GreenUserSpecified | -// MD-INDEX: | BlueUserSpecified | +// MD-INDEX: | RedUserSpecified | 65 | +// MD-INDEX: | GreenUserSpecified | 2 | +// MD-INDEX: | BlueUserSpecified | 67 | // HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum ColorUserSpecified</code></pre> // HTML-INDEX-NEXT: </div> >From 6be1f15185331e27c0262c4760ffaa382f46af16 Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Thu, 19 Feb 2026 12:22:34 +0530 Subject: [PATCH 6/8] Update unittests to include | Name | Value | --- clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp index b44b09b28e90f..b6d02974020a1 100644 --- a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp @@ -199,7 +199,7 @@ TEST_F(MDGeneratorTest, emitEnumMD) { -- -| X | +| X | 0 | *Defined at test.cpp#10* >From 4032a6ba53570e8a2439f98af8c093e8d4725555 Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Fri, 20 Feb 2026 16:11:48 +0530 Subject: [PATCH 7/8] specify (unnamed) for unnamed enums, update tests --- clang-tools-extra/clang-doc/JSONGenerator.cpp | 2 + clang-tools-extra/clang-doc/MDGenerator.cpp | 20 +-- clang-tools-extra/clang-doc/Serialize.cpp | 4 +- .../clang-doc/assets/enum-template.mustache | 2 +- clang-tools-extra/test/clang-doc/enum.cpp | 165 +++++++++++++----- 5 files changed, 137 insertions(+), 56 deletions(-) diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index 5051e7e6e690d..0c61da26b89dd 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -560,6 +560,8 @@ static void serializeInfo(const EnumInfo &I, json::Object &Obj, const std::optional<StringRef> &RepositoryUrl, const std::optional<StringRef> &RepositoryLine) { serializeCommonAttributes(I, Obj, RepositoryUrl, RepositoryLine); + if(I.Name.empty()) + Obj["Name"] = "(unnamed)"; Obj["Scoped"] = I.Scoped; if (I.BaseType) { diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index 4fad57c51db7e..360786f461088 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -156,19 +156,17 @@ static void writeNameLink(const StringRef &CurrentPath, const Reference &R, static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, llvm::raw_ostream &OS) { - std::string Header = "| enum "; + OS << "| enum "; if (I.Scoped) - Header += "class "; - Header += I.Name; - Header += " "; - if (I.BaseType && I.BaseType->Type.QualName != "") { - Header += ": "; - Header += I.BaseType->Type.QualName; - Header += " "; + OS << "class "; + if(I.Name.empty()) + OS << "(unnamed) "; + else + OS << I.Name << " "; + if (I.BaseType && !I.BaseType->Type.QualName.empty()) { + OS << ": " << I.BaseType->Type.QualName << " "; } - Header += "|"; - writeLine(Header, OS); - writeLine("--", OS); + OS << "|\n\n" << "--\n\n"; std::string Buffer; llvm::raw_string_ostream Members(Buffer); diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp index 8c6d5c972fd9e..f07187132cc07 100644 --- a/clang-tools-extra/clang-doc/Serialize.cpp +++ b/clang-tools-extra/clang-doc/Serialize.cpp @@ -1207,8 +1207,8 @@ emitInfo(const EnumDecl *D, const FullComment *FC, Location Loc, return {}; Enum.Scoped = D->isScoped(); - if (const TypeSourceInfo *Info = D->getIntegerTypeSourceInfo()) { - auto Name = Info->getType().getAsString(); + if (const TypeSourceInfo *TSI = D->getIntegerTypeSourceInfo()) { + auto Name = TSI->getType().getAsString(); Enum.BaseType = TypeInfo(Name, Name); } parseEnumerators(Enum, D); diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache index 4b9e635ac86f9..83c6a56a4e574 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}} : {{QualName}}{{/BaseType}}</code></pre> + <pre><code class="language-cpp code-clang-doc">enum {{#Scoped}}class {{/Scoped}}{{Name}}{{#BaseType}} : {{QualName}}{{/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 ca03946ff4acf..72a021dd552b7 100644 --- a/clang-tools-extra/test/clang-doc/enum.cpp +++ b/clang-tools-extra/test/clang-doc/enum.cpp @@ -5,15 +5,18 @@ // RUN: FileCheck %s < %t/html/GlobalNamespace/index.html --check-prefix=HTML-INDEX // RUN: FileCheck %s < %t/html/GlobalNamespace/_ZTV7Animals.html --check-prefix=HTML-ANIMAL-LINE // RUN: FileCheck %s < %t/html/GlobalNamespace/_ZTV7Animals.html --check-prefix=HTML-ANIMAL +// RUN: FileCheck %s < %t/html/GlobalNamespace/_ZTV15FilePermissions.html --check-prefix=HTML-PERM-LINE +// RUN: FileCheck %s < %t/html/GlobalNamespace/_ZTV15FilePermissions.html --check-prefix=HTML-PERM // RUN: FileCheck %s < %t/html/Vehicles/index.html --check-prefix=HTML-VEHICLES-LINE // RUN: FileCheck %s < %t/html/Vehicles/index.html --check-prefix=HTML-VEHICLES // RUN: FileCheck %s < %t/GlobalNamespace/index.md --check-prefix=MD-INDEX-LINE // RUN: FileCheck %s < %t/GlobalNamespace/index.md --check-prefix=MD-INDEX // RUN: FileCheck %s < %t/GlobalNamespace/Animals.md --check-prefix=MD-ANIMAL-LINE // RUN: FileCheck %s < %t/GlobalNamespace/Animals.md --check-prefix=MD-ANIMAL +// RUN: FileCheck %s < %t/GlobalNamespace/FilePermissions.md --check-prefix=MD-PERM-LINE +// RUN: FileCheck %s < %t/GlobalNamespace/FilePermissions.md --check-prefix=MD-PERM // RUN: FileCheck %s < %t/Vehicles/index.md --check-prefix=MD-VEHICLES-LINE // RUN: FileCheck %s < %t/Vehicles/index.md --check-prefix=MD-VEHICLES -#include <cstdint> // COM: FIXME: Add enum value comments to template @@ -36,7 +39,9 @@ enum Color { // MD-INDEX: | Blue | 2 | // MD-INDEX: **brief** For specifying RGB colors -// HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum Color</code></pre> +// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-INDEX-NEXT: <div> +// HTML-INDEX-NEXT: <pre><code class="language-cpp code-clang-doc">enum Color</code></pre> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: <table class="table-wrapper"> // HTML-INDEX-NEXT: <tbody> @@ -58,6 +63,13 @@ enum Color { // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> +// HTML-INDEX-NEXT: <div class="doc-card"> +// HTML-INDEX-NEXT: <div class="nested-delimiter-container"> +// HTML-INDEX-NEXT: <p> For specifying RGB colors</p> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-45]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: </div> /** * @brief Shape Types @@ -80,8 +92,9 @@ enum class Shapes { // MD-INDEX: | Triangle | 2 | // MD-INDEX: **brief** Shape Types -// COM: FIXME: Serialize "enum class" in template -// HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum Shapes</code></pre> +// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-INDEX-NEXT: <div> +// HTML-INDEX-NEXT: <pre><code class="language-cpp code-clang-doc">enum class Shapes</code></pre> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: <table class="table-wrapper"> // HTML-INDEX-NEXT: <tbody> @@ -103,7 +116,15 @@ enum class Shapes { // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> +// HTML-INDEX-NEXT: <div class="doc-card"> +// HTML-INDEX-NEXT: <div class="nested-delimiter-container"> +// HTML-INDEX-NEXT: <p> Shape Types</p> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-47]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: </div> +typedef unsigned char uint8_t; /** * @brief Specify the size */ @@ -122,7 +143,9 @@ enum Size : uint8_t { // MD-INDEX: | Large | 2 | // MD-INDEX: **brief** Specify the size -// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum Size : uint8_t</code></pre> +// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-INDEX-NEXT: <div> +// HTML-INDEX-NEXT: <pre><code class="language-cpp code-clang-doc">enum Size : uint8_t</code></pre> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: <table class="table-wrapper"> // HTML-INDEX-NEXT: <tbody> @@ -144,6 +167,13 @@ enum Size : uint8_t { // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> +// HTML-INDEX-NEXT: <div class="doc-card"> +// HTML-INDEX-NEXT: <div class="nested-delimiter-container"> +// HTML-INDEX-NEXT: <p> Specify the size</p> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-44]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: </div> /** * @brief Very long number @@ -151,15 +181,17 @@ enum Size : uint8_t { enum : long long { // MD-INDEX-LINE: *Defined at {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp#[[@LINE-1]]* // HTML-INDEX-LINE: <p>Defined at line [[@LINE-2]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> - BigVal = 999999999999 + BigVal = 999999999999 ///< A very large value }; -// MD-INDEX: | enum : long long | +// MD-INDEX: | enum (unnamed) : long long | // MD-INDEX: -- // MD-INDEX: | BigVal | 999999999999 | // MD-INDEX: **brief** Very long number -// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum : long long</code></pre> +// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-INDEX-NEXT: <div> +// HTML-INDEX-NEXT: <pre><code class="language-cpp code-clang-doc">enum (unnamed) : long long</code></pre> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: <table class="table-wrapper"> // HTML-INDEX-NEXT: <tbody> @@ -173,35 +205,71 @@ enum : long long { // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> +// HTML-INDEX-NEXT: <div class="doc-card"> +// HTML-INDEX-NEXT: <div class="nested-delimiter-container"> +// HTML-INDEX-NEXT: <p> Very long number</p> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: </div> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-32]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: </div> -/** - * @brief This is a top secret - */ -enum { - // MD-INDEX-LINE: *Defined at {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp#[[@LINE-1]]* - // HTML-INDEX-LINE: <p>Defined at line [[@LINE-2]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> - secret = true +class FilePermissions { +// MD-PERM-LINE: *Defined at {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp#[[@LINE-1]]* +// HTML-PERM-LINE: <p>Defined at line [[@LINE-2]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +public: + /** + * @brief File permission flags + */ + enum { + // MD-PERM-LINE: *Defined at {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp#[[@LINE-1]]* + // HTML-PERM-LINE: <p>Defined at line [[@LINE-2]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> + Read = 1, ///> Permission to READ r + Write = 2, ///> Permission to WRITE w + Execute = 4 ///> Permission to EXECUTE x + }; }; -// MD-INDEX: | enum | -// MD-INDEX: -- -// MD-INDEX: | secret | 1 | -// MD-INDEX: **brief** This is a top secret +// MD-PERM: | enum (unnamed) | +// MD-PERM: -- +// MD-PERM: | Read | 1 | +// MD-PERM: | Write | 2 | +// MD-PERM: | Execute | 4 | +// MD-PERM: **brief** File permission flags -// HTML-INDEX: <pre><code class="language-cpp code-clang-doc">enum </code></pre> -// HTML-INDEX-NEXT: </div> -// HTML-INDEX-NEXT: <table class="table-wrapper"> -// HTML-INDEX-NEXT: <tbody> -// HTML-INDEX-NEXT: <tr> -// HTML-INDEX-NEXT: <th>Name</th> -// HTML-INDEX-NEXT: <th>Value</th> -// HTML-INDEX-NEXT: </tr> -// HTML-INDEX-NEXT: <tr> -// HTML-INDEX-NEXT: <td>secret</td> -// HTML-INDEX-NEXT: <td>true</td> -// HTML-INDEX-NEXT: </tr> -// HTML-INDEX-NEXT: </tbody> -// HTML-INDEX-NEXT: </table> +// HTML-PERM-LABEL: <section id="Enums" class="section-container"> +// HTML-PERM-NEXT: <h2>Enumerations</h2> +// HTML-PERM-NEXT: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-PERM-NEXT: <div> +// HTML-PERM-NEXT: <pre><code class="language-cpp code-clang-doc">enum (unnamed)</code></pre> +// HTML-PERM-NEXT: </div> +// HTML-PERM-NEXT: <table class="table-wrapper"> +// HTML-PERM-NEXT: <tbody> +// HTML-PERM-NEXT: <tr> +// HTML-PERM-NEXT: <th>Name</th> +// HTML-PERM-NEXT: <th>Value</th> +// HTML-PERM-NEXT: </tr> +// HTML-PERM-NEXT: <tr> +// HTML-PERM-NEXT: <td>Read</td> +// HTML-PERM-NEXT: <td>1</td> +// HTML-PERM-NEXT: </tr> +// HTML-PERM-NEXT: <tr> +// HTML-PERM-NEXT: <td>Write</td> +// HTML-PERM-NEXT: <td>2</td> +// HTML-PERM-NEXT: </tr> +// HTML-PERM-NEXT: <tr> +// HTML-PERM-NEXT: <td>Execute</td> +// HTML-PERM-NEXT: <td>4</td> +// HTML-PERM-NEXT: </tr> +// HTML-PERM-NEXT: </tbody> +// HTML-PERM-NEXT: </table> +// HTML-PERM-NEXT: <div class="doc-card"> +// HTML-PERM-NEXT: <div class="nested-delimiter-container"> +// HTML-PERM-NEXT: <p> File permission flags</p> +// HTML-PERM-NEXT: </div> +// HTML-PERM-NEXT: </div> +// HTML-PERM-NEXT: <p>Defined at line [[@LINE-47]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-PERM-NEXT: </div> +// HTML-PERM-NEXT: </section> // COM: FIXME: Add enums declared inside of classes to class template class Animals { @@ -220,11 +288,11 @@ class Animals { }; }; -// HTML-ANIMAL: <section id="Enums" class="section-container"> -// HTML-ANIMAL-NEXT: <h2>Enumerations</h2> -// HTML-ANIMAL-NEXT: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-ANIMAL-LABEL: <section id="Enums" class="section-container"> +// HTML-ANIMAL-NEXT: <h2>Enumerations</h2> +// HTML-ANIMAL-NEXT: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> // HTML-ANIMAL-NEXT: <div> -// HTML-ANIMAL-NEXT: <pre><code class="language-cpp code-clang-doc">enum AnimalType</code></pre> +// HTML-ANIMAL-NEXT: <pre><code class="language-cpp code-clang-doc">enum AnimalType</code></pre> // HTML-ANIMAL-NEXT: </div> // HTML-ANIMAL-NEXT: <table class="table-wrapper"> // HTML-ANIMAL-NEXT: <tbody> @@ -251,9 +319,9 @@ class Animals { // HTML-ANIMAL-NEXT: <p> specify what animal the class is</p> // HTML-ANIMAL-NEXT: </div> // HTML-ANIMAL-NEXT: </div> -// HTML-ANIMAL-NEXT: <p>Defined at line {{.*}} of file {{.*}}enum.cpp</p> -// HTML-ANIMAL-NEXT: </div> -// HTML-ANIMAL-NEXT: </section> +// HTML-ANIMAL-NEXT: <p>Defined at line [[@LINE-40]] of file {{.*}}enum.cpp</p> +// HTML-ANIMAL-NEXT: </div> +// HTML-ANIMAL-NEXT: </section> // MD-ANIMAL: # class Animals // MD-ANIMAL: ## Enums @@ -289,7 +357,9 @@ enum Car { // MD-VEHICLES: | Hatchback | 3 | // MD-VEHICLES: **brief** specify type of car -// HTML-VEHICLES-LABEL: <pre><code class="language-cpp code-clang-doc">enum Car</code></pre> +// HTML-VEHICLES-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-VEHICLES-NEXT: <div> +// HTML-VEHICLES-NEXT: <pre><code class="language-cpp code-clang-doc">enum Car</code></pre> // HTML-VEHICLES-NEXT: </div> // HTML-VEHICLES-NEXT: <table class="table-wrapper"> // HTML-VEHICLES-NEXT: <tbody> @@ -315,6 +385,13 @@ enum Car { // HTML-VEHICLES-NEXT: </tr> // HTML-VEHICLES-NEXT: </tbody> // HTML-VEHICLES-NEXT: </table> +// HTML-VEHICLES-NEXT: <div class="doc-card"> +// HTML-VEHICLES-NEXT: <div class="nested-delimiter-container"> +// HTML-VEHICLES-NEXT: <p> specify type of car</p> +// HTML-VEHICLES-NEXT: </div> +// HTML-VEHICLES-NEXT: </div> +// HTML-VEHICLES-NEXT: <p>Defined at line [[@LINE-54]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-VEHICLES-NEXT: </div> enum ColorUserSpecified { RedUserSpecified = 'A', @@ -328,7 +405,9 @@ enum ColorUserSpecified { // MD-INDEX: | GreenUserSpecified | 2 | // MD-INDEX: | BlueUserSpecified | 67 | -// HTML-INDEX-LABEL: <pre><code class="language-cpp code-clang-doc">enum ColorUserSpecified</code></pre> +// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> +// HTML-INDEX-NEXT: <div> +// HTML-INDEX-NEXT: <pre><code class="language-cpp code-clang-doc">enum ColorUserSpecified</code></pre> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: <table class="table-wrapper"> // HTML-INDEX-NEXT: <tbody> @@ -350,3 +429,5 @@ enum ColorUserSpecified { // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-36]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: </div> >From 480e7cb08076447d1becc9e4154aa6a1c365184e Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Fri, 20 Feb 2026 16:26:33 +0530 Subject: [PATCH 8/8] clang-format the code --- clang-tools-extra/clang-doc/JSONGenerator.cpp | 2 +- clang-tools-extra/clang-doc/MDGenerator.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index 0c61da26b89dd..ba8bc77314964 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -560,7 +560,7 @@ static void serializeInfo(const EnumInfo &I, json::Object &Obj, const std::optional<StringRef> &RepositoryUrl, const std::optional<StringRef> &RepositoryLine) { serializeCommonAttributes(I, Obj, RepositoryUrl, RepositoryLine); - if(I.Name.empty()) + if (I.Name.empty()) Obj["Name"] = "(unnamed)"; Obj["Scoped"] = I.Scoped; diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index 360786f461088..dd527be28358d 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -159,7 +159,7 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, OS << "| enum "; if (I.Scoped) OS << "class "; - if(I.Name.empty()) + if (I.Name.empty()) OS << "(unnamed) "; else OS << I.Name << " "; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
