https://github.com/SamrudhNelli updated https://github.com/llvm/llvm-project/pull/183085
>From 7e5abbeac7c100a07854af63402fcdaae740fa1e Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Tue, 24 Feb 2026 21:10:19 +0530 Subject: [PATCH 1/5] [Clang-doc] Display enum comments and member values in html/md --- clang-tools-extra/clang-doc/JSONGenerator.cpp | 16 ++++++++++ clang-tools-extra/clang-doc/MDGenerator.cpp | 30 +++++++++++++++++-- .../clang-doc/assets/enum-template.mustache | 2 ++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index 5051e7e6e690d..65a9a6bb94e04 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -554,6 +554,22 @@ static void serializeInfo(const EnumValueInfo &I, Object &Obj) { Obj["ValueExpr"] = I.ValueExpr; else Obj["Value"] = I.Value; + if (!I.Description.empty()) { + json::Value CommentsArray = Array(); + auto &CommentsArrayRef = *CommentsArray.getAsArray(); + Object TempObj, ChildJson; + for (const auto &Child : I.Description) { + for (const auto &CI : Child.Children) { + ChildJson = serializeComment(*CI, TempObj); + if (!ChildJson.empty()) { + CommentsArrayRef.push_back(std::move(ChildJson)); + } + } + } + if (!CommentsArrayRef.empty()) { + Obj["Description"] = CommentsArray; + } + } } static void serializeInfo(const EnumInfo &I, json::Object &Obj, diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index fcb75af80f9e9..7c01ae820b286 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -67,6 +67,23 @@ static void writeSourceFileRef(const ClangDocContext &CDCtx, const Location &L, OS << "\n\n"; } +static std::string genRawText(const std::vector<CommentInfo> &Comments) { + std::string Result; + std::queue<const CommentInfo *> Q; + for (const auto &CI : Comments) + Q.push(&CI); + const CommentInfo *Comment; + while (Q.size()) { + Comment = Q.front(); + Q.pop(); + if (!Comment->Text.empty()) + Result += Comment->Text; + for (const auto &CI : Comment->Children) + Q.push(CI.get()); + } + return Result; +} + static void maybeWriteSourceFileRef(llvm::raw_ostream &OS, const ClangDocContext &CDCtx, const std::optional<Location> &DefLoc) { @@ -162,11 +179,20 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, writeLine("| enum " + I.Name + " |", OS); writeLine("--", OS); + OS << "| Name | Value | Comments |\n\n"; std::string Buffer; llvm::raw_string_ostream Members(Buffer); if (!I.Members.empty()) - for (const auto &N : I.Members) - Members << "| " << N.Name << " |\n"; + for (const auto &N : I.Members) { + Members << "| " << N.Name << " "; + if (!N.Value.empty()) + Members << "| " << N.Value << " "; + std::string RawComment = genRawText(N.Description); + RawComment.erase(0, RawComment.find_first_not_of(" \t\r\n")); + RawComment.erase(RawComment.find_last_not_of(" \t\r\n") + 1); + Members << "| " << (RawComment.empty() ? "--" : RawComment) << " "; + Members << "|\n"; + } writeLine(Members.str(), OS); maybeWriteSourceFileRef(OS, CDCtx, I.DefLoc); diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache index 7434b7bfce347..783aaf9d2193f 100644 --- a/clang-tools-extra/clang-doc/assets/enum-template.mustache +++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache @@ -15,6 +15,7 @@ <tr> <th>Name</th> <th>Value</th> + <th>Comments</th> </tr> {{#Members}} <tr> @@ -26,6 +27,7 @@ {{^Value}} <td>{{ValueExpr}}</td> {{/Value}} + <td>{{#Description}}{{>Comments}}{{/Description}}{{^Description}} -- {{/Description}}</td> </tr> {{/Members}} </tbody> >From 213d9741b87e73a16d28203b28601b7d48653e52 Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Wed, 25 Feb 2026 16:32:53 +0530 Subject: [PATCH 2/5] display the comment column only if atleast any one member has comments --- clang-tools-extra/clang-doc/JSONGenerator.cpp | 24 +++++++++++++------ clang-tools-extra/clang-doc/MDGenerator.cpp | 22 +++++++++++++---- .../clang-doc/assets/enum-template.mustache | 4 ++-- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index 65a9a6bb94e04..4acb2cfd4f4f1 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -34,9 +34,10 @@ static void serializeInfo(const RecordInfo &I, Object &Obj, static void serializeReference(const Reference &Ref, Object &ReferenceObj); template <typename Container, typename SerializationFunc> -static void serializeArray(const Container &Records, Object &Obj, - const std::string &Key, - SerializationFunc SerializeInfo); +static void serializeArray( + const Container &Records, Object &Obj, const StringRef Key, + SerializationFunc SerializeInfo, const StringRef EndKey = "End", + function_ref<void(Object &)> UpdateJson = [](Object &Obj) {}); // Convenience lambda to pass to serializeArray. // If a serializeInfo needs a RepositoryUrl, create a local lambda that captures @@ -442,9 +443,9 @@ serializeCommonChildren(const ScopeChildren &Children, json::Object &Obj, } template <typename Container, typename SerializationFunc> -static void serializeArray(const Container &Records, Object &Obj, - const std::string &Key, - SerializationFunc SerializeInfo) { +static void serializeArray(const Container &Records, Object &Obj, StringRef Key, + SerializationFunc SerializeInfo, StringRef EndKey, + function_ref<void(Object &)> UpdateJson) { json::Value RecordsArray = Array(); auto &RecordsArrayRef = *RecordsArray.getAsArray(); RecordsArrayRef.reserve(Records.size()); @@ -457,6 +458,7 @@ static void serializeArray(const Container &Records, Object &Obj, RecordsArrayRef.push_back(ItemVal); } Obj[Key] = RecordsArray; + UpdateJson(Obj); } static void serializeInfo(const ConstraintInfo &I, Object &Obj) { @@ -588,7 +590,15 @@ static void serializeInfo(const EnumInfo &I, json::Object &Obj, } if (!I.Members.empty()) - serializeArray(I.Members, Obj, "Members", SerializeInfoLambda); + serializeArray(I.Members, Obj, "Members", SerializeInfoLambda, "End", + [&I](Object &JsonObj) { + for (const auto &Member : I.Members) { + if (!Member.Description.empty()) { + JsonObj["HasComments"] = true; + break; + } + } + }); } static void diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index 7c01ae820b286..f1a8dbcc344c1 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -179,7 +179,17 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, writeLine("| enum " + I.Name + " |", OS); writeLine("--", OS); - OS << "| Name | Value | Comments |\n\n"; + OS << "| Name | Value |"; + bool HasComments = false; + for (const auto &Member : I.Members) { + if (!Member.Description.empty()) { + HasComments = true; + break; + } + } + if (HasComments) + OS << " Comments |"; + OS << "\n\n"; std::string Buffer; llvm::raw_string_ostream Members(Buffer); if (!I.Members.empty()) @@ -187,10 +197,12 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, Members << "| " << N.Name << " "; if (!N.Value.empty()) Members << "| " << N.Value << " "; - std::string RawComment = genRawText(N.Description); - RawComment.erase(0, RawComment.find_first_not_of(" \t\r\n")); - RawComment.erase(RawComment.find_last_not_of(" \t\r\n") + 1); - Members << "| " << (RawComment.empty() ? "--" : RawComment) << " "; + if (HasComments) { + std::string RawComment = genRawText(N.Description); + RawComment.erase(0, RawComment.find_first_not_of(" \t\r\n")); + RawComment.erase(RawComment.find_last_not_of(" \t\r\n") + 1); + Members << "| " << (RawComment.empty() ? "--" : RawComment) << " "; + } Members << "|\n"; } writeLine(Members.str(), OS); diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache index 783aaf9d2193f..09e107c4850d2 100644 --- a/clang-tools-extra/clang-doc/assets/enum-template.mustache +++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache @@ -15,7 +15,7 @@ <tr> <th>Name</th> <th>Value</th> - <th>Comments</th> + {{#HasComments}}<th>Comments</th>{{/HasComments}} </tr> {{#Members}} <tr> @@ -27,7 +27,7 @@ {{^Value}} <td>{{ValueExpr}}</td> {{/Value}} - <td>{{#Description}}{{>Comments}}{{/Description}}{{^Description}} -- {{/Description}}</td> + {{#HasComments}}<td>{{#Description}}{{>Comments}}{{/Description}}{{^Description}} -- {{/Description}}</td>{{/HasComments}} </tr> {{/Members}} </tbody> >From e18391da14b56d2dbda68ab8d20c3668ec19a127 Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Wed, 25 Feb 2026 17:00:02 +0530 Subject: [PATCH 3/5] update tests --- clang-tools-extra/clang-doc/MDGenerator.cpp | 25 ++++++++++--------- .../clang-doc/assets/enum-template.mustache | 4 ++- clang-tools-extra/test/clang-doc/enum.cpp | 14 ++++++++--- .../test/clang-doc/mustache-index.cpp | 2 +- .../unittests/clang-doc/MDGeneratorTest.cpp | 4 ++- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index f1a8dbcc344c1..f9010caf0bb6c 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -179,20 +179,20 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, writeLine("| enum " + I.Name + " |", OS); writeLine("--", OS); - OS << "| Name | Value |"; - bool HasComments = false; - for (const auto &Member : I.Members) { - if (!Member.Description.empty()) { - HasComments = true; - break; - } - } - if (HasComments) - OS << " Comments |"; - OS << "\n\n"; std::string Buffer; llvm::raw_string_ostream Members(Buffer); - if (!I.Members.empty()) + if (!I.Members.empty()) { + OS << "| Name | Value |"; + bool HasComments = false; + for (const auto &Member : I.Members) { + if (!Member.Description.empty()) { + HasComments = true; + break; + } + } + if (HasComments) + OS << " Comments |"; + OS << "\n\n"; for (const auto &N : I.Members) { Members << "| " << N.Name << " "; if (!N.Value.empty()) @@ -205,6 +205,7 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, } Members << "|\n"; } + } writeLine(Members.str(), OS); maybeWriteSourceFileRef(OS, CDCtx, I.DefLoc); diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache index 09e107c4850d2..559cc69845884 100644 --- a/clang-tools-extra/clang-doc/assets/enum-template.mustache +++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache @@ -27,7 +27,9 @@ {{^Value}} <td>{{ValueExpr}}</td> {{/Value}} - {{#HasComments}}<td>{{#Description}}{{>Comments}}{{/Description}}{{^Description}} -- {{/Description}}</td>{{/HasComments}} + {{#HasComments}} + <td>{{#Description}}{{>Comments}}{{/Description}}{{^Description}} -- {{/Description}}</td> + {{/HasComments}} </tr> {{/Members}} </tbody> diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp index 6e11bbf065f25..7020e221abd32 100644 --- a/clang-tools-extra/test/clang-doc/enum.cpp +++ b/clang-tools-extra/test/clang-doc/enum.cpp @@ -133,18 +133,25 @@ class Animals { // HTML-ANIMAL-NEXT: <tr> // HTML-ANIMAL-NEXT: <th>Name</th> // HTML-ANIMAL-NEXT: <th>Value</th> +// HTML-ANIMAL-NEXT: <th>Comments</th> // HTML-ANIMAL-NEXT: </tr> // HTML-ANIMAL-NEXT: <tr> // HTML-ANIMAL-NEXT: <td>Dog</td> // HTML-ANIMAL-NEXT: <td>0</td> +// HTML-ANIMAL-NEXT: <td> Man's best friend +// HTML-ANIMAL-NEXT: </td> // HTML-ANIMAL-NEXT: </tr> // HTML-ANIMAL-NEXT: <tr> // HTML-ANIMAL-NEXT: <td>Cat</td> // HTML-ANIMAL-NEXT: <td>1</td> +// HTML-ANIMAL-NEXT: <td> Man's other best friend +// HTML-ANIMAL-NEXT: </td> // HTML-ANIMAL-NEXT: </tr> // HTML-ANIMAL-NEXT: <tr> // HTML-ANIMAL-NEXT: <td>Iguana</td> // HTML-ANIMAL-NEXT: <td>2</td> +// HTML-ANIMAL-NEXT: <td> A lizard +// HTML-ANIMAL-NEXT: </td> // HTML-ANIMAL-NEXT: </tr> // HTML-ANIMAL-NEXT: </tbody> // HTML-ANIMAL-NEXT: </table> @@ -161,9 +168,10 @@ class Animals { // MD-ANIMAL: ## Enums // MD-ANIMAL: | enum AnimalType | // MD-ANIMAL: -- -// MD-ANIMAL: | Dog | -// MD-ANIMAL: | Cat | -// MD-ANIMAL: | Iguana | +// MD-ANIMAL: | Name | Value | Comments | +// MD-ANIMAL: | Dog | 0 | Man's best friend | +// MD-ANIMAL: | Cat | 1 | Man's other best friend | +// MD-ANIMAL: | Iguana | 2 | A lizard | // MD-ANIMAL: **brief** specify what animal the class is namespace Vehicles { diff --git a/clang-tools-extra/test/clang-doc/mustache-index.cpp b/clang-tools-extra/test/clang-doc/mustache-index.cpp index 6e308ada51a45..7c4c65894fc6e 100644 --- a/clang-tools-extra/test/clang-doc/mustache-index.cpp +++ b/clang-tools-extra/test/clang-doc/mustache-index.cpp @@ -39,7 +39,7 @@ class Foo; // CHECK-NEXT: <tr> // CHECK-NEXT: <th>Name</th> // CHECK-NEXT: <th>Value</th> -// CHECK-NEXT: </tr> +// CHECK: </tr> // CHECK-NEXT: <tr> // CHECK-NEXT: <td>RED</td> // CHECK-NEXT: <td>0</td> diff --git a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp index b44b09b28e90f..8bb30bb7db6cc 100644 --- a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp @@ -199,7 +199,9 @@ TEST_F(MDGeneratorTest, emitEnumMD) { -- -| X | +| Name | Value | + +| X | 0 | *Defined at test.cpp#10* >From 22bef04b09f8c8019973e1646fdf79564eb6cf5c Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Thu, 26 Feb 2026 01:55:41 +0530 Subject: [PATCH 4/5] update /test/clang-doc/enum.cpp --- clang-tools-extra/test/clang-doc/enum.cpp | 112 +++++++++++++++------- 1 file changed, 79 insertions(+), 33 deletions(-) diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp index 49469ad8aa514..7a2d9c0baf930 100644 --- a/clang-tools-extra/test/clang-doc/enum.cpp +++ b/clang-tools-extra/test/clang-doc/enum.cpp @@ -18,7 +18,6 @@ // RUN: FileCheck %s < %t/Vehicles/index.md --check-prefix=MD-VEHICLES-LINE // RUN: FileCheck %s < %t/Vehicles/index.md --check-prefix=MD-VEHICLES -// COM: FIXME: Add enum value comments to template /** * @brief For specifying RGB colors @@ -34,9 +33,10 @@ enum Color { // MD-INDEX: ## Enums // MD-INDEX: | enum Color | // MD-INDEX: -- -// MD-INDEX: | Red | -// MD-INDEX: | Green | -// MD-INDEX: | Blue | +// MD-INDEX: | Name | Value | Comments | +// MD-INDEX: | Red | 0 | Comment 1 | +// MD-INDEX: | Green | 1 | Comment 2 | +// MD-INDEX: | Blue | 2 | Comment 3 | // MD-INDEX: **brief** For specifying RGB colors // HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> @@ -48,18 +48,25 @@ enum Color { // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <th>Name</th> // HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: <th>Comments</th> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Red</td> // HTML-INDEX-NEXT: <td>0</td> +// HTML-INDEX-NEXT: <td> Comment 1 +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Green</td> // HTML-INDEX-NEXT: <td>1</td> +// HTML-INDEX-NEXT: <td> Comment 2 +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Blue</td> // HTML-INDEX-NEXT: <td>2</td> +// HTML-INDEX-NEXT: <td> Comment 3 +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> @@ -68,7 +75,7 @@ enum Color { // 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: <p>Defined at line [[@LINE-53]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> /** @@ -87,9 +94,10 @@ enum class Shapes { }; // MD-INDEX: | enum class Shapes | // MD-INDEX: -- -// MD-INDEX: | Circle | -// MD-INDEX: | Rectangle | -// MD-INDEX: | Triangle | +// MD-INDEX: | Name | Value | Comments | +// MD-INDEX: | Circle | 0 | Comment 1 | +// MD-INDEX: | Rectangle | 1 | Comment 2 | +// MD-INDEX: | Triangle | 2 | Comment 3 | // MD-INDEX: **brief** Shape Types // HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> @@ -101,18 +109,25 @@ enum class Shapes { // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <th>Name</th> // HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: <th>Comments</th> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Circle</td> // HTML-INDEX-NEXT: <td>0</td> +// HTML-INDEX-NEXT: <td> Comment 1 +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Rectangle</td> // HTML-INDEX-NEXT: <td>1</td> +// HTML-INDEX-NEXT: <td> Comment 2 +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Triangle</td> // HTML-INDEX-NEXT: <td>2</td> +// HTML-INDEX-NEXT: <td> Comment 3 +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> @@ -121,7 +136,7 @@ enum class Shapes { // 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: <p>Defined at line [[@LINE-55]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> typedef unsigned char uint8_t; @@ -138,9 +153,10 @@ enum Size : uint8_t { // MD-INDEX: | enum Size : uint8_t | // MD-INDEX: -- -// MD-INDEX: | Small | -// MD-INDEX: | Medium | -// MD-INDEX: | Large | +// MD-INDEX: | Name | Value | Comments | +// MD-INDEX: | Small | 0 | A pearl | +// MD-INDEX: | Medium | 1 | A tennis ball | +// MD-INDEX: | Large | 2 | A football | // MD-INDEX: **brief** Specify the size // HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> @@ -152,18 +168,25 @@ enum Size : uint8_t { // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <th>Name</th> // HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: <th>Comments</th> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Small</td> // HTML-INDEX-NEXT: <td>0</td> +// HTML-INDEX-NEXT: <td> A pearl +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Medium</td> // HTML-INDEX-NEXT: <td>1</td> +// HTML-INDEX-NEXT: <td> A tennis ball +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>Large</td> // HTML-INDEX-NEXT: <td>2</td> +// HTML-INDEX-NEXT: <td> A football +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> @@ -172,7 +195,7 @@ enum Size : uint8_t { // 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: <p>Defined at line [[@LINE-52]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> /** @@ -186,7 +209,8 @@ enum : long long { // MD-INDEX: | enum (unnamed) : long long | // MD-INDEX: -- -// MD-INDEX: | BigVal | +// MD-INDEX: | Name | Value | Comments | +// MD-INDEX: | BigVal | 999999999999 | A very large value | // MD-INDEX: **brief** Very long number // HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> @@ -198,10 +222,13 @@ enum : long long { // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <th>Name</th> // HTML-INDEX-NEXT: <th>Value</th> +// HTML-INDEX-NEXT: <th>Comments</th> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>BigVal</td> // HTML-INDEX-NEXT: <td>999999999999</td> +// HTML-INDEX-NEXT: <td> A very large value +// HTML-INDEX-NEXT: </td> // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> @@ -210,7 +237,7 @@ enum : long long { // 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: <p>Defined at line [[@LINE-36]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> class FilePermissions { @@ -223,17 +250,18 @@ class FilePermissions { 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 + Read = 1, ///< Permission to READ r + Write = 2, ///< Permission to WRITE w + Execute = 4 ///< Permission to EXECUTE x }; }; // MD-PERM: | enum (unnamed) | // MD-PERM: -- -// MD-PERM: | Read | -// MD-PERM: | Write | -// MD-PERM: | Execute | +// MD-PERM: | Name | Value | Comments | +// MD-PERM: | Read | 1 | Permission to READ r | +// MD-PERM: | Write | 2 | Permission to WRITE w | +// MD-PERM: | Execute | 4 | Permission to EXECUTE x | // MD-PERM: **brief** File permission flags // HTML-PERM-LABEL: <section id="Enums" class="section-container"> @@ -247,18 +275,25 @@ class FilePermissions { // HTML-PERM-NEXT: <tr> // HTML-PERM-NEXT: <th>Name</th> // HTML-PERM-NEXT: <th>Value</th> +// HTML-PERM-NEXT: <th>Comments</th> // HTML-PERM-NEXT: </tr> // HTML-PERM-NEXT: <tr> // HTML-PERM-NEXT: <td>Read</td> // HTML-PERM-NEXT: <td>1</td> +// HTML-PERM-NEXT: <td> Permission to READ r +// HTML-PERM-NEXT: </td> // HTML-PERM-NEXT: </tr> // HTML-PERM-NEXT: <tr> // HTML-PERM-NEXT: <td>Write</td> // HTML-PERM-NEXT: <td>2</td> +// HTML-PERM-NEXT: <td> Permission to WRITE w +// HTML-PERM-NEXT: </td> // HTML-PERM-NEXT: </tr> // HTML-PERM-NEXT: <tr> // HTML-PERM-NEXT: <td>Execute</td> // HTML-PERM-NEXT: <td>4</td> +// HTML-PERM-NEXT: <td> Permission to EXECUTE x +// HTML-PERM-NEXT: </td> // HTML-PERM-NEXT: </tr> // HTML-PERM-NEXT: </tbody> // HTML-PERM-NEXT: </table> @@ -267,7 +302,7 @@ class FilePermissions { // 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: <p>Defined at line [[@LINE-55]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-PERM-NEXT: </div> // HTML-PERM-NEXT: </section> @@ -326,7 +361,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 [[@LINE-40]] of file {{.*}}enum.cpp</p> +// HTML-ANIMAL-NEXT: <p>Defined at line [[@LINE-47]] of file {{.*}}enum.cpp</p> // HTML-ANIMAL-NEXT: </div> // HTML-ANIMAL-NEXT: </section> @@ -359,10 +394,11 @@ 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: | Name | Value | Comments | +// MD-VEHICLES: | Sedan | 0 | Comment 1 | +// MD-VEHICLES: | SUV | 1 | Comment 2 | +// MD-VEHICLES: | Pickup | 2 | Comment 3 | +// MD-VEHICLES: | Hatchback | 3 | Comment 4 | // MD-VEHICLES: **brief** specify type of car // HTML-VEHICLES-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> @@ -374,22 +410,31 @@ enum Car { // HTML-VEHICLES-NEXT: <tr> // HTML-VEHICLES-NEXT: <th>Name</th> // HTML-VEHICLES-NEXT: <th>Value</th> +// HTML-VEHICLES-NEXT: <th>Comments</th> // HTML-VEHICLES-NEXT: </tr> // HTML-VEHICLES-NEXT: <tr> // HTML-VEHICLES-NEXT: <td>Sedan</td> // HTML-VEHICLES-NEXT: <td>0</td> +// HTML-VEHICLES-NEXT: <td> Comment 1 +// HTML-VEHICLES-NEXT: </td> // HTML-VEHICLES-NEXT: </tr> // HTML-VEHICLES-NEXT: <tr> // HTML-VEHICLES-NEXT: <td>SUV</td> // HTML-VEHICLES-NEXT: <td>1</td> +// HTML-VEHICLES-NEXT: <td> Comment 2 +// HTML-VEHICLES-NEXT: </td> // HTML-VEHICLES-NEXT: </tr> // HTML-VEHICLES-NEXT: <tr> // HTML-VEHICLES-NEXT: <td>Pickup</td> // HTML-VEHICLES-NEXT: <td>2</td> +// HTML-VEHICLES-NEXT: <td> Comment 3 +// HTML-VEHICLES-NEXT: </td> // HTML-VEHICLES-NEXT: </tr> // HTML-VEHICLES-NEXT: <tr> // HTML-VEHICLES-NEXT: <td>Hatchback</td> // HTML-VEHICLES-NEXT: <td>3</td> +// HTML-VEHICLES-NEXT: <td> Comment 4 +// HTML-VEHICLES-NEXT: </td> // HTML-VEHICLES-NEXT: </tr> // HTML-VEHICLES-NEXT: </tbody> // HTML-VEHICLES-NEXT: </table> @@ -398,7 +443,7 @@ enum Car { // 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: <p>Defined at line [[@LINE-64]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-VEHICLES-NEXT: </div> enum ColorUserSpecified { @@ -409,9 +454,10 @@ enum ColorUserSpecified { // MD-INDEX: | enum ColorUserSpecified | // MD-INDEX: -- -// MD-INDEX: | RedUserSpecified | -// MD-INDEX: | GreenUserSpecified | -// MD-INDEX: | BlueUserSpecified | +// MD-INDEX: | Name | Value | +// MD-INDEX: | RedUserSpecified | 65 | +// MD-INDEX: | GreenUserSpecified | 2 | +// MD-INDEX: | BlueUserSpecified | 67 | // HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container"> // HTML-INDEX-NEXT: <div> @@ -422,7 +468,7 @@ enum ColorUserSpecified { // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <th>Name</th> // HTML-INDEX-NEXT: <th>Value</th> -// HTML-INDEX-NEXT: </tr> +// HTML-INDEX: </tr> // HTML-INDEX-NEXT: <tr> // HTML-INDEX-NEXT: <td>RedUserSpecified</td> // HTML-INDEX-NEXT: <td>'A'</td> @@ -437,5 +483,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: <p>Defined at line [[@LINE-37]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> >From 9dd7f772d886c752f03a89f3fdb3b86121049539 Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Thu, 26 Feb 2026 21:35:36 +0530 Subject: [PATCH 5/5] remove header Name | Value | Comments, implement format suggestions --- clang-tools-extra/clang-doc/JSONGenerator.cpp | 28 +++++++++---------- clang-tools-extra/clang-doc/MDGenerator.cpp | 7 ++--- .../clang-doc/assets/enum-template.mustache | 4 ++- clang-tools-extra/test/clang-doc/enum.cpp | 22 +++++---------- .../unittests/clang-doc/MDGeneratorTest.cpp | 2 -- 5 files changed, 25 insertions(+), 38 deletions(-) diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index 3dd467614aa21..62fe4f821e349 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -565,22 +565,20 @@ static void serializeInfo(const EnumValueInfo &I, Object &Obj) { Obj["ValueExpr"] = I.ValueExpr; else Obj["Value"] = I.Value; - if (!I.Description.empty()) { - json::Value CommentsArray = Array(); - auto &CommentsArrayRef = *CommentsArray.getAsArray(); - Object TempObj, ChildJson; - for (const auto &Child : I.Description) { - for (const auto &CI : Child.Children) { - ChildJson = serializeComment(*CI, TempObj); - if (!ChildJson.empty()) { - CommentsArrayRef.push_back(std::move(ChildJson)); - } - } - } - if (!CommentsArrayRef.empty()) { - Obj["Description"] = CommentsArray; - } + + if (I.Description.empty()) + return; + + json::Value CommentsArray = Array(); + auto &CommentsArrayRef = *CommentsArray.getAsArray(); + Object TempObj; + for (const auto &Child : I.Description) { + for (const auto &CI : Child.Children) + if(Object ChildJson = serializeComment(*CI, TempObj); !ChildJson.empty()) + CommentsArrayRef.push_back(std::move(ChildJson)); } + if (!CommentsArrayRef.empty()) + Obj["Description"] = CommentsArray; } static void serializeInfo(const EnumInfo &I, json::Object &Obj, diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index d8ffb432a03f1..a5e387b15d9f6 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -69,6 +69,7 @@ static void writeSourceFileRef(const ClangDocContext &CDCtx, const Location &L, static std::string genRawText(const std::vector<CommentInfo> &Comments) { std::string Result; + llvm::raw_string_ostream OS(Result); std::queue<const CommentInfo *> Q; for (const auto &CI : Comments) Q.push(&CI); @@ -77,7 +78,7 @@ static std::string genRawText(const std::vector<CommentInfo> &Comments) { Comment = Q.front(); Q.pop(); if (!Comment->Text.empty()) - Result += Comment->Text; + OS << Comment->Text; for (const auto &CI : Comment->Children) Q.push(CI.get()); } @@ -185,7 +186,6 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, std::string Buffer; llvm::raw_string_ostream Members(Buffer); if (!I.Members.empty()) { - OS << "| Name | Value |"; bool HasComments = false; for (const auto &Member : I.Members) { if (!Member.Description.empty()) { @@ -193,9 +193,6 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I, break; } } - if (HasComments) - OS << " Comments |"; - OS << "\n\n"; for (const auto &N : I.Members) { Members << "| " << N.Name << " "; if (!N.Value.empty()) diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache index 93d128d449470..f39d176bed4f8 100644 --- a/clang-tools-extra/clang-doc/assets/enum-template.mustache +++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache @@ -15,7 +15,9 @@ <tr> <th>Name</th> <th>Value</th> - {{#HasComments}}<th>Comments</th>{{/HasComments}} + {{#HasComments}} + <th>Comments</th> + {{/HasComments}} </tr> {{#Members}} <tr> diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp index 7a2d9c0baf930..1a5086078cbec 100644 --- a/clang-tools-extra/test/clang-doc/enum.cpp +++ b/clang-tools-extra/test/clang-doc/enum.cpp @@ -33,7 +33,6 @@ enum Color { // MD-INDEX: ## Enums // MD-INDEX: | enum Color | // MD-INDEX: -- -// MD-INDEX: | Name | Value | Comments | // MD-INDEX: | Red | 0 | Comment 1 | // MD-INDEX: | Green | 1 | Comment 2 | // MD-INDEX: | Blue | 2 | Comment 3 | @@ -75,7 +74,7 @@ enum Color { // 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-53]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-52]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> /** @@ -94,7 +93,6 @@ enum class Shapes { }; // MD-INDEX: | enum class Shapes | // MD-INDEX: -- -// MD-INDEX: | Name | Value | Comments | // MD-INDEX: | Circle | 0 | Comment 1 | // MD-INDEX: | Rectangle | 1 | Comment 2 | // MD-INDEX: | Triangle | 2 | Comment 3 | @@ -136,7 +134,7 @@ enum class Shapes { // HTML-INDEX-NEXT: <p> Shape Types</p> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: </div> -// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-55]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-54]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> typedef unsigned char uint8_t; @@ -153,7 +151,6 @@ enum Size : uint8_t { // MD-INDEX: | enum Size : uint8_t | // MD-INDEX: -- -// MD-INDEX: | Name | Value | Comments | // MD-INDEX: | Small | 0 | A pearl | // MD-INDEX: | Medium | 1 | A tennis ball | // MD-INDEX: | Large | 2 | A football | @@ -195,7 +192,7 @@ enum Size : uint8_t { // HTML-INDEX-NEXT: <p> Specify the size</p> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: </div> -// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-52]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-51]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> /** @@ -209,7 +206,6 @@ enum : long long { // MD-INDEX: | enum (unnamed) : long long | // MD-INDEX: -- -// MD-INDEX: | Name | Value | Comments | // MD-INDEX: | BigVal | 999999999999 | A very large value | // MD-INDEX: **brief** Very long number @@ -237,7 +233,7 @@ enum : long long { // HTML-INDEX-NEXT: <p> Very long number</p> // HTML-INDEX-NEXT: </div> // HTML-INDEX-NEXT: </div> -// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-36]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-35]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> class FilePermissions { @@ -258,7 +254,6 @@ class FilePermissions { // MD-PERM: | enum (unnamed) | // MD-PERM: -- -// MD-PERM: | Name | Value | Comments | // MD-PERM: | Read | 1 | Permission to READ r | // MD-PERM: | Write | 2 | Permission to WRITE w | // MD-PERM: | Execute | 4 | Permission to EXECUTE x | @@ -302,7 +297,7 @@ class FilePermissions { // HTML-PERM-NEXT: <p> File permission flags</p> // HTML-PERM-NEXT: </div> // HTML-PERM-NEXT: </div> -// HTML-PERM-NEXT: <p>Defined at line [[@LINE-55]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-PERM-NEXT: <p>Defined at line [[@LINE-54]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-PERM-NEXT: </div> // HTML-PERM-NEXT: </section> @@ -369,7 +364,6 @@ class Animals { // MD-ANIMAL: ## Enums // MD-ANIMAL: | enum AnimalType | // MD-ANIMAL: -- -// MD-ANIMAL: | Name | Value | Comments | // MD-ANIMAL: | Dog | 0 | Man's best friend | // MD-ANIMAL: | Cat | 1 | Man's other best friend | // MD-ANIMAL: | Iguana | 2 | A lizard | @@ -394,7 +388,6 @@ enum Car { // MD-VEHICLES: ## Enums // MD-VEHICLES: | enum Car | // MD-VEHICLES: -- -// MD-VEHICLES: | Name | Value | Comments | // MD-VEHICLES: | Sedan | 0 | Comment 1 | // MD-VEHICLES: | SUV | 1 | Comment 2 | // MD-VEHICLES: | Pickup | 2 | Comment 3 | @@ -443,7 +436,7 @@ enum Car { // 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-64]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-VEHICLES-NEXT: <p>Defined at line [[@LINE-63]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-VEHICLES-NEXT: </div> enum ColorUserSpecified { @@ -454,7 +447,6 @@ enum ColorUserSpecified { // MD-INDEX: | enum ColorUserSpecified | // MD-INDEX: -- -// MD-INDEX: | Name | Value | // MD-INDEX: | RedUserSpecified | 65 | // MD-INDEX: | GreenUserSpecified | 2 | // MD-INDEX: | BlueUserSpecified | 67 | @@ -483,5 +475,5 @@ enum ColorUserSpecified { // HTML-INDEX-NEXT: </tr> // HTML-INDEX-NEXT: </tbody> // HTML-INDEX-NEXT: </table> -// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-37]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> +// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-36]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p> // HTML-INDEX-NEXT: </div> diff --git a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp index 8bb30bb7db6cc..b6d02974020a1 100644 --- a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp @@ -199,8 +199,6 @@ TEST_F(MDGeneratorTest, emitEnumMD) { -- -| Name | Value | - | X | 0 | _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
