[clang-tools-extra] [Clang-doc] Display enum comments in HTML (PR #183085)
Samrudh Nelli via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 6 10:10:03 PST 2026
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 <samrudhnelli at gmail.com>
Date: Tue, 24 Feb 2026 21:10:19 +0530
Subject: [PATCH 01/17] [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 <samrudhnelli at gmail.com>
Date: Wed, 25 Feb 2026 16:32:53 +0530
Subject: [PATCH 02/17] 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 <samrudhnelli at gmail.com>
Date: Wed, 25 Feb 2026 17:00:02 +0530
Subject: [PATCH 03/17] 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 <samrudhnelli at gmail.com>
Date: Thu, 26 Feb 2026 01:55:41 +0530
Subject: [PATCH 04/17] 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 <samrudhnelli at gmail.com>
Date: Thu, 26 Feb 2026 21:35:36 +0530
Subject: [PATCH 05/17] 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 |
>From 3d0d253518102242c9865c053c9277a56b8e8bf3 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Fri, 27 Feb 2026 18:44:27 +0530
Subject: [PATCH 06/17] split display in md into another PR, use -CHECK-NEXT
instead of -CHECK
---
clang-tools-extra/clang-doc/JSONGenerator.cpp | 3 +-
clang-tools-extra/clang-doc/MDGenerator.cpp | 42 ++--------------
.../clang-doc/assets/enum-template.mustache | 6 +--
clang-tools-extra/test/clang-doc/enum.cpp | 48 +++++++++----------
4 files changed, 31 insertions(+), 68 deletions(-)
diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 62fe4f821e349..561306d5af353 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -1,5 +1,6 @@
#include "Generators.h"
#include "clang/Basic/Specifiers.h"
+#include "llvm/ADT/StringRef.h"
#include "llvm/Support/JSON.h"
using namespace llvm;
@@ -574,7 +575,7 @@ static void serializeInfo(const EnumValueInfo &I, Object &Obj) {
Object TempObj;
for (const auto &Child : I.Description) {
for (const auto &CI : Child.Children)
- if(Object ChildJson = serializeComment(*CI, TempObj); !ChildJson.empty())
+ if (Object ChildJson = serializeComment(*CI, TempObj); !ChildJson.empty())
CommentsArrayRef.push_back(std::move(ChildJson));
}
if (!CommentsArrayRef.empty())
diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp
index a5e387b15d9f6..851b4e084ef23 100644
--- a/clang-tools-extra/clang-doc/MDGenerator.cpp
+++ b/clang-tools-extra/clang-doc/MDGenerator.cpp
@@ -67,24 +67,6 @@ static void writeSourceFileRef(const ClangDocContext &CDCtx, const Location &L,
OS << "\n\n";
}
-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);
- const CommentInfo *Comment;
- while (Q.size()) {
- Comment = Q.front();
- Q.pop();
- if (!Comment->Text.empty())
- OS << 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) {
@@ -185,27 +167,9 @@ static void genMarkdown(const ClangDocContext &CDCtx, const EnumInfo &I,
std::string Buffer;
llvm::raw_string_ostream Members(Buffer);
- if (!I.Members.empty()) {
- bool HasComments = false;
- for (const auto &Member : I.Members) {
- if (!Member.Description.empty()) {
- HasComments = true;
- break;
- }
- }
- for (const auto &N : I.Members) {
- Members << "| " << N.Name << " ";
- if (!N.Value.empty())
- Members << "| " << N.Value << " ";
- 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";
- }
- }
+ if (!I.Members.empty())
+ for (const auto &N : I.Members)
+ Members << "| " << N.Name << " |\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 f39d176bed4f8..da7f6e67510ef 100644
--- a/clang-tools-extra/clang-doc/assets/enum-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache
@@ -14,10 +14,8 @@
<tbody>
<tr>
<th>Name</th>
- <th>Value</th>
- {{#HasComments}}
- <th>Comments</th>
- {{/HasComments}}
+ <th>Value</th>{{#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 1a5086078cbec..4624f6cc8daa7 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -33,9 +33,9 @@ enum Color {
// MD-INDEX: ## Enums
// MD-INDEX: | enum Color |
// MD-INDEX: --
-// MD-INDEX: | Red | 0 | Comment 1 |
-// MD-INDEX: | Green | 1 | Comment 2 |
-// MD-INDEX: | Blue | 2 | Comment 3 |
+// MD-INDEX: | Red |
+// MD-INDEX: | Green |
+// MD-INDEX: | Blue |
// MD-INDEX: **brief** For specifying RGB colors
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
@@ -93,9 +93,9 @@ enum class Shapes {
};
// MD-INDEX: | enum class Shapes |
// MD-INDEX: --
-// MD-INDEX: | Circle | 0 | Comment 1 |
-// MD-INDEX: | Rectangle | 1 | Comment 2 |
-// MD-INDEX: | Triangle | 2 | Comment 3 |
+// MD-INDEX: | Circle |
+// MD-INDEX: | Rectangle |
+// MD-INDEX: | Triangle |
// MD-INDEX: **brief** Shape Types
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
@@ -151,9 +151,9 @@ enum Size : uint8_t {
// MD-INDEX: | enum Size : uint8_t |
// MD-INDEX: --
-// MD-INDEX: | Small | 0 | A pearl |
-// MD-INDEX: | Medium | 1 | A tennis ball |
-// MD-INDEX: | Large | 2 | A football |
+// MD-INDEX: | Small |
+// MD-INDEX: | Medium |
+// MD-INDEX: | Large |
// MD-INDEX: **brief** Specify the size
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
@@ -206,7 +206,7 @@ enum : long long {
// MD-INDEX: | enum (unnamed) : long long |
// MD-INDEX: --
-// MD-INDEX: | BigVal | 999999999999 | A very large value |
+// MD-INDEX: | BigVal |
// MD-INDEX: **brief** Very long number
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
@@ -254,9 +254,9 @@ class FilePermissions {
// MD-PERM: | enum (unnamed) |
// MD-PERM: --
-// 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: | Read |
+// MD-PERM: | Write |
+// MD-PERM: | Execute |
// MD-PERM: **brief** File permission flags
// HTML-PERM-LABEL: <section id="Enums" class="section-container">
@@ -364,9 +364,9 @@ class Animals {
// MD-ANIMAL: ## Enums
// MD-ANIMAL: | enum AnimalType |
// MD-ANIMAL: --
-// 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: | Dog |
+// MD-ANIMAL: | Cat |
+// MD-ANIMAL: | Iguana |
// MD-ANIMAL: **brief** specify what animal the class is
namespace Vehicles {
@@ -388,10 +388,10 @@ enum Car {
// MD-VEHICLES: ## Enums
// MD-VEHICLES: | enum Car |
// MD-VEHICLES: --
-// 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: | Sedan |
+// MD-VEHICLES: | SUV |
+// MD-VEHICLES: | Pickup |
+// MD-VEHICLES: | Hatchback |
// MD-VEHICLES: **brief** specify type of car
// HTML-VEHICLES-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
@@ -447,9 +447,9 @@ enum ColorUserSpecified {
// MD-INDEX: | enum ColorUserSpecified |
// MD-INDEX: --
-// MD-INDEX: | RedUserSpecified | 65 |
-// MD-INDEX: | GreenUserSpecified | 2 |
-// MD-INDEX: | BlueUserSpecified | 67 |
+// MD-INDEX: | RedUserSpecified |
+// MD-INDEX: | GreenUserSpecified |
+// MD-INDEX: | BlueUserSpecified |
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -460,7 +460,7 @@ enum ColorUserSpecified {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <th>Name</th>
// HTML-INDEX-NEXT: <th>Value</th>
-// HTML-INDEX: </tr>
+// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>RedUserSpecified</td>
// HTML-INDEX-NEXT: <td>'A'</td>
>From 1872456591e6a8f44894baa772f033b60c813ec2 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Fri, 27 Feb 2026 19:01:16 +0530
Subject: [PATCH 07/17] fix unittests
---
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 b6d02974020a1..b44b09b28e90f 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 | 0 |
+| X |
*Defined at test.cpp#10*
>From 8085ea1f77fbc8b0bfb69c3f692ca079cda36db4 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Mon, 2 Mar 2026 13:09:52 +0530
Subject: [PATCH 08/17] Handle richer processing of comments, update the tests
and template
---
clang-tools-extra/clang-doc/JSONGenerator.cpp | 24 ++--
.../clang-doc/assets/enum-template.mustache | 6 +-
clang-tools-extra/test/clang-doc/enum.cpp | 117 +++++++++++++-----
3 files changed, 105 insertions(+), 42 deletions(-)
diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 561306d5af353..85e4a47e1e127 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -570,16 +570,20 @@ static void serializeInfo(const EnumValueInfo &I, Object &Obj) {
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;
+ Object Description = Object();
+ auto &Comments = I.Description.at(0).Children;
+ for (const auto &CommentInfo : Comments) {
+ json::Value Comment = serializeComment(*CommentInfo, Description);
+ if (auto *ParagraphComment = Comment.getAsObject();
+ ParagraphComment->get("ParagraphComment")) {
+ auto TextCommentsArray = extractTextComments(ParagraphComment);
+ if (TextCommentsArray.kind() == json::Value::Null ||
+ TextCommentsArray.getAsArray()->empty())
+ continue;
+ insertComment(Description, TextCommentsArray, "ParagraphComments");
+ }
+ }
+ Obj["Description"] = std::move(Description);
}
static void serializeInfo(const EnumInfo &I, json::Object &Obj,
diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache
index da7f6e67510ef..f39d176bed4f8 100644
--- a/clang-tools-extra/clang-doc/assets/enum-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache
@@ -14,8 +14,10 @@
<tbody>
<tr>
<th>Name</th>
- <th>Value</th>{{#HasComments}}
- <th>Comments</th>{{/HasComments}}
+ <th>Value</th>
+ {{#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 4624f6cc8daa7..6489667b5d1bd 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -1,8 +1,10 @@
// RUN: rm -rf %t && mkdir -p %t
// RUN: clang-doc --format=html --doxygen --output=%t --executor=standalone %s
// RUN: clang-doc --format=md --doxygen --output=%t --executor=standalone %s
+// RUN: clang-doc --format=json --doxygen --output=%t --executor=standalone %s
// RUN: FileCheck %s < %t/html/GlobalNamespace/index.html --check-prefix=HTML-INDEX-LINE
// RUN: FileCheck %s < %t/html/GlobalNamespace/index.html --check-prefix=HTML-INDEX
+// RUN: FileCheck %s < %t/json/GlobalNamespace/index.json --check-prefix=JSON-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
@@ -52,19 +54,25 @@ enum Color {
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> Comment 1</p>
+// HTML-INDEX-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> Comment 2</p>
+// HTML-INDEX-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> Comment 3</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -74,9 +82,11 @@ 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-52]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-58]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
+// JSON-INDEX: "TextComment": " Comment 1"
+
/**
* @brief Shape Types
*/
@@ -112,19 +122,25 @@ enum class Shapes {
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> Comment 1</p>
+// HTML-INDEX-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> Comment 2</p>
+// HTML-INDEX-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> Comment 3</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -134,7 +150,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-54]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-60]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
typedef unsigned char uint8_t;
@@ -144,9 +160,18 @@ typedef unsigned char uint8_t;
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
+
+ /// A pearl.
+ /// Pearls are quite small.
+ ///
+ /// Pearls are used in jewelry.
+ Small,
+
+ /// @brief A tennis ball.
+ Medium,
+
+ /// A football.
+ Large
};
// MD-INDEX: | enum Size : uint8_t |
@@ -170,19 +195,29 @@ enum Size : uint8_t {
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> A pearl.</p>
+// HTML-INDEX-NEXT: <p> Pearls are quite small.</p>
+// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> Pearls are used in jewelry.</p>
+// HTML-INDEX-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> A tennis ball.</p>
+// HTML-INDEX-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> A football.</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -192,7 +227,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-51]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-70]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
/**
@@ -223,7 +258,9 @@ enum : long long {
// 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><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p> A very large value</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -233,7 +270,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-35]] 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>
class FilePermissions {
@@ -275,19 +312,25 @@ class FilePermissions {
// 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><div class="nested-delimiter-container">
+// HTML-PERM-NEXT: <p> Permission to READ r</p>
+// HTML-PERM-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-PERM-NEXT: <p> Permission to WRITE w</p>
+// HTML-PERM-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-PERM-NEXT: <p> Permission to EXECUTE x</p>
+// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </td>
// HTML-PERM-NEXT: </tr>
// HTML-PERM-NEXT: </tbody>
@@ -297,7 +340,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-54]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-PERM-NEXT: <p>Defined at line [[@LINE-60]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </section>
@@ -334,19 +377,25 @@ class Animals {
// 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><div class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: <p> Man's best friend</p>
+// HTML-ANIMAL-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: <p> Man's other best friend</p>
+// HTML-ANIMAL-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: <p> A lizard</p>
+// HTML-ANIMAL-NEXT: </div>
// HTML-ANIMAL-NEXT: </td>
// HTML-ANIMAL-NEXT: </tr>
// HTML-ANIMAL-NEXT: </tbody>
@@ -356,7 +405,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-47]] of file {{.*}}enum.cpp</p>
+// HTML-ANIMAL-NEXT: <p>Defined at line [[@LINE-53]] of file {{.*}}enum.cpp</p>
// HTML-ANIMAL-NEXT: </div>
// HTML-ANIMAL-NEXT: </section>
@@ -408,25 +457,33 @@ enum Car {
// 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><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p> Comment 1</p>
+// HTML-VEHICLES-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p> Comment 2</p>
+// HTML-VEHICLES-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p> Comment 3</p>
+// HTML-VEHICLES-NEXT: </div>
// 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><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p> Comment 4</p>
+// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
// HTML-VEHICLES-NEXT: </tbody>
@@ -436,7 +493,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-63]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-VEHICLES-NEXT: <p>Defined at line [[@LINE-71]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-VEHICLES-NEXT: </div>
enum ColorUserSpecified {
>From b7ef4af55a7fdcacb8c0d7af623350eed5d00bf4 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Mon, 2 Mar 2026 13:40:22 +0530
Subject: [PATCH 09/17] remove unused header file
---
clang-tools-extra/clang-doc/JSONGenerator.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 85e4a47e1e127..96b7df0d15775 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -1,6 +1,5 @@
#include "Generators.h"
#include "clang/Basic/Specifiers.h"
-#include "llvm/ADT/StringRef.h"
#include "llvm/Support/JSON.h"
using namespace llvm;
>From 4284881ddd646cdbcd04129ae363d94c9eb65436 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Mon, 2 Mar 2026 13:47:52 +0530
Subject: [PATCH 10/17] use -NEXT in
clang-tools-extra/test/clang-doc/mustache-index.cpp
---
clang-tools-extra/test/clang-doc/mustache-index.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang-tools-extra/test/clang-doc/mustache-index.cpp b/clang-tools-extra/test/clang-doc/mustache-index.cpp
index 7c4c65894fc6e..6e308ada51a45 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: </tr>
+// CHECK-NEXT: </tr>
// CHECK-NEXT: <tr>
// CHECK-NEXT: <td>RED</td>
// CHECK-NEXT: <td>0</td>
>From 3eb4e6322732989aa4423ec9b30588e683b50e7d Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Mon, 2 Mar 2026 22:54:00 +0530
Subject: [PATCH 11/17] revert usage of lambda for setting HasComments
---
clang-tools-extra/clang-doc/JSONGenerator.cpp | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 96b7df0d15775..d6b333bd67a21 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -600,16 +600,15 @@ static void serializeInfo(const EnumInfo &I, json::Object &Obj,
Obj["BaseType"] = BaseTypeVal;
}
- if (!I.Members.empty())
- serializeArray(I.Members, Obj, "Members", SerializeInfoLambda, "End",
- [&I](Object &JsonObj) {
- for (const auto &Member : I.Members) {
- if (!Member.Description.empty()) {
- JsonObj["HasComments"] = true;
- break;
- }
- }
- });
+ if (!I.Members.empty()) {
+ for (const auto &Member : I.Members) {
+ if (!Member.Description.empty()) {
+ Obj["HasComments"] = true;
+ break;
+ }
+ }
+ serializeArray(I.Members, Obj, "Members", SerializeInfoLambda);
+ }
}
static void
>From eaf02b3d334be01295c1ff27b83462c188d7c91a Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Mon, 2 Mar 2026 23:15:36 +0530
Subject: [PATCH 12/17] remove the leading whitespace
---
clang-tools-extra/clang-doc/Serialize.cpp | 6 +-
clang-tools-extra/test/clang-doc/enum.cpp | 74 +++++++++++------------
2 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp
index f07187132cc07..c0a3c08a9855a 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -249,14 +249,14 @@ void ClangDocCommentVisitor::parseComment(const comments::Comment *C) {
void ClangDocCommentVisitor::visitTextComment(const TextComment *C) {
if (!isWhitespaceOnly(C->getText()))
- CurrentCI.Text = C->getText();
+ CurrentCI.Text = C->getText().trim().str();
}
void ClangDocCommentVisitor::visitInlineCommandComment(
const InlineCommandComment *C) {
CurrentCI.Name = getCommandName(C->getCommandID());
for (unsigned I = 0, E = C->getNumArgs(); I != E; ++I)
- CurrentCI.Args.push_back(C->getArgText(I));
+ CurrentCI.Args.push_back(C->getArgText(I).trim());
}
void ClangDocCommentVisitor::visitHTMLStartTagComment(
@@ -280,7 +280,7 @@ void ClangDocCommentVisitor::visitBlockCommandComment(
const BlockCommandComment *C) {
CurrentCI.Name = getCommandName(C->getCommandID());
for (unsigned I = 0, E = C->getNumArgs(); I < E; ++I)
- CurrentCI.Args.push_back(C->getArgText(I));
+ CurrentCI.Args.push_back(C->getArgText(I).trim());
}
void ClangDocCommentVisitor::visitParamCommandComment(
diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp
index 6489667b5d1bd..2367cb8e2c2f1 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -38,7 +38,7 @@ enum Color {
// MD-INDEX: | Red |
// MD-INDEX: | Green |
// MD-INDEX: | Blue |
-// MD-INDEX: **brief** For specifying RGB colors
+// MD-INDEX: **brief**For specifying RGB colors
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -55,7 +55,7 @@ enum Color {
// HTML-INDEX-NEXT: <td>Red</td>
// HTML-INDEX-NEXT: <td>0</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> Comment 1</p>
+// HTML-INDEX-NEXT: <p>Comment 1</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -63,7 +63,7 @@ enum Color {
// HTML-INDEX-NEXT: <td>Green</td>
// HTML-INDEX-NEXT: <td>1</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> Comment 2</p>
+// HTML-INDEX-NEXT: <p>Comment 2</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -71,7 +71,7 @@ enum Color {
// HTML-INDEX-NEXT: <td>Blue</td>
// HTML-INDEX-NEXT: <td>2</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> Comment 3</p>
+// HTML-INDEX-NEXT: <p>Comment 3</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -79,13 +79,13 @@ enum Color {
// 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: <p>For specifying RGB colors</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-58]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
-// JSON-INDEX: "TextComment": " Comment 1"
+// JSON-INDEX: "TextComment": "Comment 1"
/**
* @brief Shape Types
@@ -106,7 +106,7 @@ enum class Shapes {
// MD-INDEX: | Circle |
// MD-INDEX: | Rectangle |
// MD-INDEX: | Triangle |
-// MD-INDEX: **brief** Shape Types
+// MD-INDEX: **brief**Shape Types
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -123,7 +123,7 @@ enum class Shapes {
// HTML-INDEX-NEXT: <td>Circle</td>
// HTML-INDEX-NEXT: <td>0</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> Comment 1</p>
+// HTML-INDEX-NEXT: <p>Comment 1</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -131,7 +131,7 @@ enum class Shapes {
// HTML-INDEX-NEXT: <td>Rectangle</td>
// HTML-INDEX-NEXT: <td>1</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> Comment 2</p>
+// HTML-INDEX-NEXT: <p>Comment 2</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -139,7 +139,7 @@ enum class Shapes {
// HTML-INDEX-NEXT: <td>Triangle</td>
// HTML-INDEX-NEXT: <td>2</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> Comment 3</p>
+// HTML-INDEX-NEXT: <p>Comment 3</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -147,7 +147,7 @@ enum class Shapes {
// 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: <p>Shape Types</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-60]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
@@ -179,7 +179,7 @@ enum Size : uint8_t {
// MD-INDEX: | Small |
// MD-INDEX: | Medium |
// MD-INDEX: | Large |
-// MD-INDEX: **brief** Specify the size
+// MD-INDEX: **brief**Specify the size
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -196,11 +196,11 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <td>Small</td>
// HTML-INDEX-NEXT: <td>0</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> A pearl.</p>
-// HTML-INDEX-NEXT: <p> Pearls are quite small.</p>
+// HTML-INDEX-NEXT: <p>A pearl.</p>
+// HTML-INDEX-NEXT: <p>Pearls are quite small.</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: <div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> Pearls are used in jewelry.</p>
+// HTML-INDEX-NEXT: <p>Pearls are used in jewelry.</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -208,7 +208,7 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <td>Medium</td>
// HTML-INDEX-NEXT: <td>1</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> A tennis ball.</p>
+// HTML-INDEX-NEXT: <p>A tennis ball.</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -216,7 +216,7 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <td>Large</td>
// HTML-INDEX-NEXT: <td>2</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> A football.</p>
+// HTML-INDEX-NEXT: <p>A football.</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -224,7 +224,7 @@ enum Size : uint8_t {
// 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: <p>Specify the size</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-70]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
@@ -242,7 +242,7 @@ enum : long long {
// MD-INDEX: | enum (unnamed) : long long |
// MD-INDEX: --
// MD-INDEX: | BigVal |
-// MD-INDEX: **brief** Very long number
+// MD-INDEX: **brief**Very long number
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -259,7 +259,7 @@ enum : long long {
// HTML-INDEX-NEXT: <td>BigVal</td>
// HTML-INDEX-NEXT: <td>999999999999</td>
// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p> A very large value</p>
+// HTML-INDEX-NEXT: <p>A very large value</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
@@ -267,7 +267,7 @@ enum : long long {
// 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: <p>Very long number</p>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-37]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
@@ -294,7 +294,7 @@ class FilePermissions {
// MD-PERM: | Read |
// MD-PERM: | Write |
// MD-PERM: | Execute |
-// MD-PERM: **brief** File permission flags
+// MD-PERM: **brief**File permission flags
// HTML-PERM-LABEL: <section id="Enums" class="section-container">
// HTML-PERM-NEXT: <h2>Enumerations</h2>
@@ -313,7 +313,7 @@ class FilePermissions {
// HTML-PERM-NEXT: <td>Read</td>
// HTML-PERM-NEXT: <td>1</td>
// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p> Permission to READ r</p>
+// HTML-PERM-NEXT: <p>Permission to READ r</p>
// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </td>
// HTML-PERM-NEXT: </tr>
@@ -321,7 +321,7 @@ class FilePermissions {
// HTML-PERM-NEXT: <td>Write</td>
// HTML-PERM-NEXT: <td>2</td>
// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p> Permission to WRITE w</p>
+// HTML-PERM-NEXT: <p>Permission to WRITE w</p>
// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </td>
// HTML-PERM-NEXT: </tr>
@@ -329,7 +329,7 @@ class FilePermissions {
// HTML-PERM-NEXT: <td>Execute</td>
// HTML-PERM-NEXT: <td>4</td>
// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p> Permission to EXECUTE x</p>
+// HTML-PERM-NEXT: <p>Permission to EXECUTE x</p>
// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </td>
// HTML-PERM-NEXT: </tr>
@@ -337,7 +337,7 @@ class FilePermissions {
// 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: <p>File permission flags</p>
// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: <p>Defined at line [[@LINE-60]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
@@ -378,7 +378,7 @@ class Animals {
// HTML-ANIMAL-NEXT: <td>Dog</td>
// HTML-ANIMAL-NEXT: <td>0</td>
// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p> Man's best friend</p>
+// HTML-ANIMAL-NEXT: <p>Man's best friend</p>
// HTML-ANIMAL-NEXT: </div>
// HTML-ANIMAL-NEXT: </td>
// HTML-ANIMAL-NEXT: </tr>
@@ -386,7 +386,7 @@ class Animals {
// HTML-ANIMAL-NEXT: <td>Cat</td>
// HTML-ANIMAL-NEXT: <td>1</td>
// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p> Man's other best friend</p>
+// HTML-ANIMAL-NEXT: <p>Man's other best friend</p>
// HTML-ANIMAL-NEXT: </div>
// HTML-ANIMAL-NEXT: </td>
// HTML-ANIMAL-NEXT: </tr>
@@ -394,7 +394,7 @@ class Animals {
// HTML-ANIMAL-NEXT: <td>Iguana</td>
// HTML-ANIMAL-NEXT: <td>2</td>
// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p> A lizard</p>
+// HTML-ANIMAL-NEXT: <p>A lizard</p>
// HTML-ANIMAL-NEXT: </div>
// HTML-ANIMAL-NEXT: </td>
// HTML-ANIMAL-NEXT: </tr>
@@ -402,7 +402,7 @@ class Animals {
// HTML-ANIMAL-NEXT: </table>
// HTML-ANIMAL-NEXT: <div class="doc-card">
// HTML-ANIMAL-NEXT: <div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p> specify what animal the class is</p>
+// 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-53]] of file {{.*}}enum.cpp</p>
@@ -416,7 +416,7 @@ class Animals {
// MD-ANIMAL: | Dog |
// MD-ANIMAL: | Cat |
// MD-ANIMAL: | Iguana |
-// MD-ANIMAL: **brief** specify what animal the class is
+// MD-ANIMAL: **brief**specify what animal the class is
namespace Vehicles {
/**
@@ -441,7 +441,7 @@ enum Car {
// MD-VEHICLES: | SUV |
// MD-VEHICLES: | Pickup |
// MD-VEHICLES: | Hatchback |
-// MD-VEHICLES: **brief** specify type of car
+// MD-VEHICLES: **brief**specify type of car
// HTML-VEHICLES-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-VEHICLES-NEXT: <div>
@@ -458,7 +458,7 @@ enum Car {
// HTML-VEHICLES-NEXT: <td>Sedan</td>
// HTML-VEHICLES-NEXT: <td>0</td>
// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p> Comment 1</p>
+// HTML-VEHICLES-NEXT: <p>Comment 1</p>
// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
@@ -466,7 +466,7 @@ enum Car {
// HTML-VEHICLES-NEXT: <td>SUV</td>
// HTML-VEHICLES-NEXT: <td>1</td>
// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p> Comment 2</p>
+// HTML-VEHICLES-NEXT: <p>Comment 2</p>
// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
@@ -474,7 +474,7 @@ enum Car {
// HTML-VEHICLES-NEXT: <td>Pickup</td>
// HTML-VEHICLES-NEXT: <td>2</td>
// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p> Comment 3</p>
+// HTML-VEHICLES-NEXT: <p>Comment 3</p>
// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
@@ -482,7 +482,7 @@ enum Car {
// HTML-VEHICLES-NEXT: <td>Hatchback</td>
// HTML-VEHICLES-NEXT: <td>3</td>
// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p> Comment 4</p>
+// HTML-VEHICLES-NEXT: <p>Comment 4</p>
// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
@@ -490,7 +490,7 @@ enum Car {
// 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: <p>specify type of car</p>
// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: <p>Defined at line [[@LINE-71]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
>From ed1ca334c0dd28c54b2da601badc29c809c84dae Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Tue, 3 Mar 2026 00:45:58 +0530
Subject: [PATCH 13/17] fix the tests
---
clang-tools-extra/clang-doc/MDGenerator.cpp | 4 +-
clang-tools-extra/clang-doc/Serialize.cpp | 2 +-
.../clang-doc/basic-project.mustache.test | 66 +++++++++----------
.../test/clang-doc/basic-project.test | 2 +-
.../test/clang-doc/comments-in-macros.cpp | 2 +-
clang-tools-extra/test/clang-doc/enum.cpp | 14 ++--
.../test/clang-doc/json/class.cpp | 10 +--
.../clang-doc/json/compound-constraints.cpp | 8 +--
.../test/clang-doc/json/concept.cpp | 2 +-
.../test/clang-doc/namespace.cpp | 6 +-
.../test/clang-doc/templates.cpp | 10 +--
.../test/clang-doc/typedef-alias.cpp | 6 +-
.../unittests/clang-doc/MDGeneratorTest.cpp | 6 +-
13 files changed, 69 insertions(+), 69 deletions(-)
diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp
index 851b4e084ef23..99401e741ea9b 100644
--- a/clang-tools-extra/clang-doc/MDGenerator.cpp
+++ b/clang-tools-extra/clang-doc/MDGenerator.cpp
@@ -88,7 +88,7 @@ static void writeDescription(const CommentInfo &I, raw_ostream &OS) {
break;
case CommentKind::CK_BlockCommandComment:
- OS << genEmphasis(I.Name);
+ OS << genEmphasis(I.Name) << " ";
for (const auto &Child : I.Children)
writeDescription(*Child, OS);
break;
@@ -100,7 +100,7 @@ static void writeDescription(const CommentInfo &I, raw_ostream &OS) {
case CommentKind::CK_ParamCommandComment:
case CommentKind::CK_TParamCommandComment: {
std::string Direction = I.Explicit ? (" " + I.Direction).str() : "";
- OS << genEmphasis(I.ParamName) << I.Text << Direction;
+ OS << genEmphasis(I.ParamName) << I.Text << Direction << " ";
for (const auto &Child : I.Children)
writeDescription(*Child, OS);
break;
diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp
index c0a3c08a9855a..4d825f85cb0cb 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -249,7 +249,7 @@ void ClangDocCommentVisitor::parseComment(const comments::Comment *C) {
void ClangDocCommentVisitor::visitTextComment(const TextComment *C) {
if (!isWhitespaceOnly(C->getText()))
- CurrentCI.Text = C->getText().trim().str();
+ CurrentCI.Text = C->getText().trim();
}
void ClangDocCommentVisitor::visitInlineCommandComment(
diff --git a/clang-tools-extra/test/clang-doc/basic-project.mustache.test b/clang-tools-extra/test/clang-doc/basic-project.mustache.test
index d29bdaf8a05fd..ddee7275e1089 100644
--- a/clang-tools-extra/test/clang-doc/basic-project.mustache.test
+++ b/clang-tools-extra/test/clang-doc/basic-project.mustache.test
@@ -54,10 +54,10 @@ HTML-SHAPE-NEXT: <h1 class="hero__title-large">class Shape</
HTML-SHAPE-NEXT: <p>Defined at line {{[0-9]+}} of file {{.*}}include{{[\/]}}Shape.h</p>
HTML-SHAPE-NEXT: <div class="doc-card">
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
-HTML-SHAPE-NEXT: <p> Abstract base class for shapes.</p>
+HTML-SHAPE-NEXT: <p>Abstract base class for shapes.</p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
-HTML-SHAPE-NEXT: <p> Provides a common interface for different types of shapes.</p>
+HTML-SHAPE-NEXT: <p>Provides a common interface for different types of shapes.</p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
@@ -68,11 +68,11 @@ HTML-SHAPE-LABEL: <div id="{{([0-9A-F]{40})}}" class="deli
HTML-SHAPE-NEXT: <pre><code class="language-cpp code-clang-doc">double area ()</code></pre>
HTML-SHAPE-NEXT: <div class="doc-card">
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
-HTML-SHAPE-NEXT: <p> Calculates the area of the shape.</p>
+HTML-SHAPE-NEXT: <p>Calculates the area of the shape.</p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
HTML-SHAPE-NEXT: <h3>Returns</h3>
-HTML-SHAPE-NEXT: <p> double The area of the shape.</p>
+HTML-SHAPE-NEXT: <p>double The area of the shape.</p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
@@ -80,11 +80,11 @@ HTML-SHAPE-LABEL: <div id="{{([0-9A-F]{40})}}" class="del
HTML-SHAPE-NEXT: <pre><code class="language-cpp code-clang-doc">double perimeter ()</code></pre>
HTML-SHAPE-NEXT: <div class="doc-card">
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
-HTML-SHAPE-NEXT: <p> Calculates the perimeter of the shape.</p>
+HTML-SHAPE-NEXT: <p>Calculates the perimeter of the shape.</p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
HTML-SHAPE-NEXT: <h3>Returns</h3>
-HTML-SHAPE-NEXT: <p> double The perimeter of the shape.</p>
+HTML-SHAPE-NEXT: <p>double The perimeter of the shape.</p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
@@ -92,7 +92,7 @@ HTML-SHAPE-LABEL: <div id="{{([0-9A-F]{40})}}" class="del
HTML-SHAPE-NEXT: <pre><code class="language-cpp code-clang-doc">void ~Shape ()</code></pre>
HTML-SHAPE-NEXT: <div class="doc-card">
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
-HTML-SHAPE-NEXT: <p> Virtual destructor.</p>
+HTML-SHAPE-NEXT: <p>Virtual destructor.</p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: <p>Defined at line {{[0-9]+}} of file {{.*}}include{{[/\\]}}Shape.h</p>
@@ -173,10 +173,10 @@ HTML-CALC-NEXT: <h1 class="hero__title-large">class Calculat
HTML-CALC-NEXT: <p>Defined at line {{[0-9]+}} of file {{.*}}include{{[/\\]}}Calculator.h</p>
HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p> A simple calculator class.</p>
+HTML-CALC-NEXT: <p>A simple calculator class.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p> Provides basic arithmetic operations.</p>
+HTML-CALC-NEXT: <p>Provides basic arithmetic operations.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
@@ -198,7 +198,7 @@ HTML-CALC-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-co
HTML-CALC-NEXT: <pre><code class="language-cpp code-clang-doc">int add (int a, int b)</code></pre>
HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p> Adds two integers.</p>
+HTML-CALC-NEXT: <p>Adds two integers.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Parameters</h3>
@@ -211,14 +211,14 @@ HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Returns</h3>
-HTML-CALC-NEXT: <p> int The sum of a and b.</p>
+HTML-CALC-NEXT: <p>int The sum of a and b.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
HTML-CALC-NEXT: <pre><code class="language-cpp code-clang-doc">int subtract (int a, int b)</code></pre>
HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p> Subtracts the second integer from the first.</p>
+HTML-CALC-NEXT: <p>Subtracts the second integer from the first.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Parameters</h3>
@@ -231,14 +231,14 @@ HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Returns</h3>
-HTML-CALC-NEXT: <p> int The result of a - b.</p>
+HTML-CALC-NEXT: <p>int The result of a - b.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
HTML-CALC-NEXT: <pre><code class="language-cpp code-clang-doc">int multiply (int a, int b)</code></pre>
HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p> Multiplies two integers.</p>
+HTML-CALC-NEXT: <p>Multiplies two integers.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Parameters</h3>
@@ -251,14 +251,14 @@ HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Returns</h3>
-HTML-CALC-NEXT: <p> int The product of a and b.</p>
+HTML-CALC-NEXT: <p>int The product of a and b.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
HTML-CALC-NEXT: <pre><code class="language-cpp code-clang-doc">double divide (int a, int b)</code></pre>
HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p> Divides the first integer by the second.</p>
+HTML-CALC-NEXT: <p>Divides the first integer by the second.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Parameters</h3>
@@ -271,7 +271,7 @@ HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Returns</h3>
-HTML-CALC-NEXT: <p> double The result of a / b.</p>
+HTML-CALC-NEXT: <p>double The result of a / b.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Throws</h3>
@@ -284,7 +284,7 @@ HTML-CALC-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-co
HTML-CALC-NEXT: <pre><code class="language-cpp code-clang-doc">int mod (int a, int b)</code></pre>
HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p> Performs the mod operation on integers.</p>
+HTML-CALC-NEXT: <p>Performs the mod operation on integers.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Parameters</h3>
@@ -297,7 +297,7 @@ HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <h3>Returns</h3>
-HTML-CALC-NEXT: <p> The result of a % b.</p>
+HTML-CALC-NEXT: <p>The result of a % b.</p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: <p>Defined at line {{[0-9]+}} of file {{.*}}include{{[/\\]}}Calculator.h</p>
@@ -357,10 +357,10 @@ HTML-RECTANGLE-NEXT: <h1 class="hero__title-large">class Rec
HTML-RECTANGLE-NEXT: <p>Defined at line {{[0-9]+}} of file {{.*}}include{{[/\\]}}Rectangle.h</p>
HTML-RECTANGLE-NEXT: <div class="doc-card">
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
-HTML-RECTANGLE-NEXT: <p> Rectangle class derived from Shape.</p>
+HTML-RECTANGLE-NEXT: <p>Rectangle class derived from Shape.</p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
-HTML-RECTANGLE-NEXT: <p> Represents a rectangle with a given width and height.</p>
+HTML-RECTANGLE-NEXT: <p>Represents a rectangle with a given width and height.</p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </div>
@@ -371,7 +371,7 @@ HTML-RECTANGLE-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimit
HTML-RECTANGLE-NEXT: <pre><code class="language-cpp code-clang-doc">void Rectangle (double width, double height)</code></pre>
HTML-RECTANGLE-NEXT: <div class="doc-card">
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
-HTML-RECTANGLE-NEXT: <p> Constructs a new Rectangle object.</p>
+HTML-RECTANGLE-NEXT: <p>Constructs a new Rectangle object.</p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
HTML-RECTANGLE-NEXT: <h3>Parameters</h3>
@@ -387,22 +387,22 @@ HTML-RECTANGLE-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimit
HTML-RECTANGLE-NEXT: <pre><code class="language-cpp code-clang-doc">double area ()</code></pre>
HTML-RECTANGLE-NEXT: <div class="doc-card">
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
-HTML-RECTANGLE-NEXT: <p> Calculates the area of the rectangle.</p>
+HTML-RECTANGLE-NEXT: <p>Calculates the area of the rectangle.</p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
HTML-RECTANGLE-NEXT: <h3>Returns</h3>
-HTML-RECTANGLE-NEXT: <p> double The area of the rectangle.</p>
+HTML-RECTANGLE-NEXT: <p>double The area of the rectangle.</p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
HTML-RECTANGLE-NEXT: <pre><code class="language-cpp code-clang-doc">double perimeter ()</code></pre>
HTML-RECTANGLE-NEXT: <div class="doc-card">
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
-HTML-RECTANGLE-NEXT: <p> Calculates the perimeter of the rectangle.</p>
+HTML-RECTANGLE-NEXT: <p>Calculates the perimeter of the rectangle.</p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
HTML-RECTANGLE-NEXT: <h3>Returns</h3>
-HTML-RECTANGLE-NEXT: <p> double The perimeter of the rectangle.</p>
+HTML-RECTANGLE-NEXT: <p>double The perimeter of the rectangle.</p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: <p>Defined at line {{[0-9]+}} of file {{.*}}src{{[/\\]}}Rectangle.cpp</p>
@@ -462,10 +462,10 @@ HTML-CIRCLE-NEXT: <h1 class="hero__title-large">class Circle
HTML-CIRCLE-NEXT: <p>Defined at line {{[0-9]+}} of file {{.*}}include{{[/\\]}}Circle.h</p>
HTML-CIRCLE-NEXT: <div class="doc-card">
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
-HTML-CIRCLE-NEXT: <p> Circle class derived from Shape.</p>
+HTML-CIRCLE-NEXT: <p>Circle class derived from Shape.</p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
-HTML-CIRCLE-NEXT: <p> Represents a circle with a given radius.</p>
+HTML-CIRCLE-NEXT: <p>Represents a circle with a given radius.</p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </div>
@@ -476,7 +476,7 @@ HTML-CIRCLE-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-
HTML-CIRCLE-NEXT: <pre><code class="language-cpp code-clang-doc">void Circle (double radius)</code></pre>
HTML-CIRCLE-NEXT: <div class="doc-card">
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
-HTML-CIRCLE-NEXT: <p> Constructs a new Circle object.</p>
+HTML-CIRCLE-NEXT: <p>Constructs a new Circle object.</p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
HTML-CIRCLE-NEXT: <h3>Parameters</h3>
@@ -489,22 +489,22 @@ HTML-CIRCLE-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-
HTML-CIRCLE-NEXT: <pre><code class="language-cpp code-clang-doc">double area ()</code></pre>
HTML-CIRCLE-NEXT: <div class="doc-card">
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
-HTML-CIRCLE-NEXT: <p> Calculates the area of the circle.</p>
+HTML-CIRCLE-NEXT: <p>Calculates the area of the circle.</p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
HTML-CIRCLE-NEXT: <h3>Returns</h3>
-HTML-CIRCLE-NEXT: <p> double The area of the circle.</p>
+HTML-CIRCLE-NEXT: <p>double The area of the circle.</p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
HTML-CIRCLE-NEXT: <pre><code class="language-cpp code-clang-doc">double perimeter ()</code></pre>
HTML-CIRCLE-NEXT: <div class="doc-card">
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
-HTML-CIRCLE-NEXT: <p> Calculates the perimeter of the circle.</p>
+HTML-CIRCLE-NEXT: <p>Calculates the perimeter of the circle.</p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
HTML-CIRCLE-NEXT: <h3>Returns</h3>
-HTML-CIRCLE-NEXT: <p> double The perimeter of the circle.</p>
+HTML-CIRCLE-NEXT: <p>double The perimeter of the circle.</p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: <h3>Code</h3>
HTML-CIRCLE-NEXT: <div>
diff --git a/clang-tools-extra/test/clang-doc/basic-project.test b/clang-tools-extra/test/clang-doc/basic-project.test
index 9220dc6974508..057091102f122 100644
--- a/clang-tools-extra/test/clang-doc/basic-project.test
+++ b/clang-tools-extra/test/clang-doc/basic-project.test
@@ -92,7 +92,7 @@
// MD-CALC: **a** First integer.
// MD-CALC: **b** Second integer.
// MD-CALC: **return** double The result of a / b.
-// MD-CALC: **throw**if b is zero.
+// MD-CALC: **throw** if b is zero.
// MD-CALC: ### mod
// MD-CALC: *public static int mod(int a, int b)*
// MD-CALC: *Defined at ./include{{[\/]}}Calculator.h#54*
diff --git a/clang-tools-extra/test/clang-doc/comments-in-macros.cpp b/clang-tools-extra/test/clang-doc/comments-in-macros.cpp
index 9e022314edaeb..0e23ad576ad46 100644
--- a/clang-tools-extra/test/clang-doc/comments-in-macros.cpp
+++ b/clang-tools-extra/test/clang-doc/comments-in-macros.cpp
@@ -25,7 +25,7 @@
// HTML-MYCLASS: <pre><code class="language-cpp code-clang-doc">int Add (int a, int b)</code></pre>
// HTML-MYCLASS: <div class="doc-card">
// HTML-MYCLASS: <div class="nested-delimiter-container">
-// HTML-MYCLASS: <p> Declare a method to calculate the sum of two numbers</p>
+// HTML-MYCLASS: <p>Declare a method to calculate the sum of two numbers</p>
// HTML-MYCLASS: </div>
diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp
index 2367cb8e2c2f1..d033c62dc7428 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -38,7 +38,7 @@ enum Color {
// MD-INDEX: | Red |
// MD-INDEX: | Green |
// MD-INDEX: | Blue |
-// MD-INDEX: **brief**For specifying RGB colors
+// MD-INDEX: **brief** For specifying RGB colors
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -106,7 +106,7 @@ enum class Shapes {
// MD-INDEX: | Circle |
// MD-INDEX: | Rectangle |
// MD-INDEX: | Triangle |
-// MD-INDEX: **brief**Shape Types
+// MD-INDEX: **brief** Shape Types
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -179,7 +179,7 @@ enum Size : uint8_t {
// MD-INDEX: | Small |
// MD-INDEX: | Medium |
// MD-INDEX: | Large |
-// MD-INDEX: **brief**Specify the size
+// MD-INDEX: **brief** Specify the size
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -242,7 +242,7 @@ enum : long long {
// MD-INDEX: | enum (unnamed) : long long |
// MD-INDEX: --
// MD-INDEX: | BigVal |
-// MD-INDEX: **brief**Very long number
+// MD-INDEX: **brief** Very long number
// HTML-INDEX-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-INDEX-NEXT: <div>
@@ -294,7 +294,7 @@ class FilePermissions {
// MD-PERM: | Read |
// MD-PERM: | Write |
// MD-PERM: | Execute |
-// MD-PERM: **brief**File permission flags
+// MD-PERM: **brief** File permission flags
// HTML-PERM-LABEL: <section id="Enums" class="section-container">
// HTML-PERM-NEXT: <h2>Enumerations</h2>
@@ -416,7 +416,7 @@ class Animals {
// MD-ANIMAL: | Dog |
// MD-ANIMAL: | Cat |
// MD-ANIMAL: | Iguana |
-// MD-ANIMAL: **brief**specify what animal the class is
+// MD-ANIMAL: **brief** specify what animal the class is
namespace Vehicles {
/**
@@ -441,7 +441,7 @@ enum Car {
// MD-VEHICLES: | SUV |
// MD-VEHICLES: | Pickup |
// MD-VEHICLES: | Hatchback |
-// MD-VEHICLES: **brief**specify type of car
+// MD-VEHICLES: **brief** specify type of car
// HTML-VEHICLES-LABEL: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-VEHICLES-NEXT: <div>
diff --git a/clang-tools-extra/test/clang-doc/json/class.cpp b/clang-tools-extra/test/clang-doc/json/class.cpp
index 6783e71a201db..7ca5db5be8d61 100644
--- a/clang-tools-extra/test/clang-doc/json/class.cpp
+++ b/clang-tools-extra/test/clang-doc/json/class.cpp
@@ -52,16 +52,16 @@ struct MyClass {
// CHECK-NEXT: "BriefComments": [
// CHECK-NEXT: [
// CHECK-NEXT: {
-// CHECK-NEXT: "TextComment": " This is a brief description."
+// CHECK-NEXT: "TextComment": "This is a brief description."
// CHECK: "HasBriefComments": true,
// CHECK-NEXT: "HasParagraphComments": true,
// CHECK-NEXT: "ParagraphComments": [
// CHECK-NEXT: [
// CHECK-NEXT: {
-// CHECK-NEXT: "TextComment": " This is a nice class."
+// CHECK-NEXT: "TextComment": "This is a nice class."
// CHECK-NEXT: },
// CHECK-NEXT: {
-// CHECK-NEXT: "TextComment": " It has some nice methods and fields."
+// CHECK-NEXT: "TextComment": "It has some nice methods and fields."
// CHECK-NEXT: }
// CHECK: "DocumentationFileName": "_ZTV7MyClass",
// CHECK: "Enums": [
@@ -103,7 +103,7 @@ struct MyClass {
// CHECK-NEXT: "ParagraphComments": [
// CHECK-NEXT: [
// CHECK-NEXT: {
-// CHECK-NEXT: "TextComment": " This is a function template friend."
+// CHECK-NEXT: "TextComment": "This is a function template friend."
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: ]
@@ -150,7 +150,7 @@ struct MyClass {
// CHECK-NEXT: "ParagraphComments": [
// CHECK-NEXT: [
// CHECK-NEXT: {
-// CHECK-NEXT: "TextComment": " This is a struct friend."
+// CHECK-NEXT: "TextComment": "This is a struct friend."
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: ]
diff --git a/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp b/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp
index a34be9753f80e..97fe50b719792 100644
--- a/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp
+++ b/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp
@@ -149,7 +149,7 @@ template<typename T> requires (Incrementable<T> && Decrementable<T>) || PreIncre
// CHECK-HTML-NEXT: <pre><code class="language-cpp code-clang-doc">template <typename T> Incrementable requires (T a) { a++; }</code></pre>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
-// CHECK-HTML-NEXT: <p> Concept for an incrementable value</p>
+// CHECK-HTML-NEXT: <p>Concept for an incrementable value</p>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <h3>Template Parameters</h3>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
@@ -164,7 +164,7 @@ template<typename T> requires (Incrementable<T> && Decrementable<T>) || PreIncre
// CHECK-HTML-NEXT: <pre><code class="language-cpp code-clang-doc">template <typename T> Decrementable requires (T a) { a--; }</code></pre>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
-// CHECK-HTML-NEXT: <p> Concept for a decrementable value</p>
+// CHECK-HTML-NEXT: <p>Concept for a decrementable value</p>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <h3>Template Parameters</h3>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
@@ -179,7 +179,7 @@ template<typename T> requires (Incrementable<T> && Decrementable<T>) || PreIncre
// CHECK-HTML-NEXT: <pre><code class="language-cpp code-clang-doc">template <typename T> PreIncrementable requires (T a) { ++a; }</code></pre>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
-// CHECK-HTML-NEXT: <p> Concept for a pre-incrementable value</p>
+// CHECK-HTML-NEXT: <p>Concept for a pre-incrementable value</p>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <h3>Template Parameters</h3>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
@@ -194,7 +194,7 @@ template<typename T> requires (Incrementable<T> && Decrementable<T>) || PreIncre
// CHECK-HTML-NEXT: <pre><code class="language-cpp code-clang-doc">template <typename T> PreDecrementable requires (T a) { --a; }</code></pre>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
-// CHECK-HTML-NEXT: <p> Concept for a -pre-decrementable value</p>
+// CHECK-HTML-NEXT: <p>Concept for a -pre-decrementable value</p>
// CHECK-HTML-NEXT: </div>
// CHECK-HTML-NEXT: <h3>Template Parameters</h3>
// CHECK-HTML-NEXT: <div class="nested-delimiter-container">
diff --git a/clang-tools-extra/test/clang-doc/json/concept.cpp b/clang-tools-extra/test/clang-doc/json/concept.cpp
index 70d20be1096e8..764f173bb03bc 100644
--- a/clang-tools-extra/test/clang-doc/json/concept.cpp
+++ b/clang-tools-extra/test/clang-doc/json/concept.cpp
@@ -18,7 +18,7 @@ concept Incrementable = requires(T x) {
// CHECK-NEXT: "ParagraphComments": [
// CHECK-NEXT: [
// CHECK-NEXT: {
-// CHECK-NEXT: "TextComment": " Requires that T suports post and pre-incrementing."
+// CHECK-NEXT: "TextComment": "Requires that T suports post and pre-incrementing."
// CHECK: "End": true,
// CHECK-NEXT: "InfoType": "concept",
// CHECK-NEXT: "IsType": true,
diff --git a/clang-tools-extra/test/clang-doc/namespace.cpp b/clang-tools-extra/test/clang-doc/namespace.cpp
index 49e61dc61872e..cbc92a3175210 100644
--- a/clang-tools-extra/test/clang-doc/namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/namespace.cpp
@@ -147,7 +147,7 @@ class ClassInNestedNamespace {};
// HTML-NESTED-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInNestedNamespace ()</code></pre>
// HTML-NESTED-INDEX: <div class="doc-card">
// HTML-NESTED-INDEX: <div class="nested-delimiter-container">
-// HTML-NESTED-INDEX: <p> Function in NestedNamespace</p>
+// HTML-NESTED-INDEX: <p>Function in NestedNamespace</p>
// HTML-NESTED-INDEX: </div>
// HTML-NESTED-INDEX: </div>
// HTML-NESTED-INDEX: <p>Defined at line 105 of file {{.*}}namespace.cpp</p>
@@ -182,7 +182,7 @@ class ClassInNestedNamespace {};
// HTML-PRIMARY-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInPrimaryNamespace ()</code></pre>
// HTML-PRIMARY-INDEX: <div class="doc-card">
// HTML-PRIMARY-INDEX: <div class="nested-delimiter-container">
-// HTML-PRIMARY-INDEX: <p> Function in PrimaryNamespace</p>
+// HTML-PRIMARY-INDEX: <p>Function in PrimaryNamespace</p>
// HTML-PRIMARY-INDEX: </div>
// HTML-PRIMARY-INDEX: </div>
// HTML-PRIMARY-INDEX: <p>Defined at line 84 of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}namespace.cpp</p>
@@ -234,7 +234,7 @@ class ClassInAnotherNamespace {};
// HTML-ANOTHER-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInAnotherNamespace ()</code></pre>
// HTML-ANOTHER-INDEX: <div class="doc-card">
// HTML-ANOTHER-INDEX: <div class="nested-delimiter-container">
-// HTML-ANOTHER-INDEX: <p> Function in AnotherNamespace</p>
+// HTML-ANOTHER-INDEX: <p>Function in AnotherNamespace</p>
// HTML-ANOTHER-INDEX: </div>
// HTML-ANOTHER-INDEX: </div>
// HTML-ANOTHER-INDEX: <p>Defined at line 193 of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}namespace.cpp</p>
diff --git a/clang-tools-extra/test/clang-doc/templates.cpp b/clang-tools-extra/test/clang-doc/templates.cpp
index 870841e110dde..8bd27cb8f637a 100644
--- a/clang-tools-extra/test/clang-doc/templates.cpp
+++ b/clang-tools-extra/test/clang-doc/templates.cpp
@@ -371,10 +371,10 @@ struct tuple {};
// HTML-STRUCT-NEXT: <p>Defined at line [[# @LINE - 6]] of file {{.*}}templates.cpp</p>
// HTML-STRUCT-NEXT: <div class="doc-card">
// HTML-STRUCT-NEXT: <div class="nested-delimiter-container">
-// HTML-STRUCT-NEXT: <p> A Tuple type</p>
+// HTML-STRUCT-NEXT: <p>A Tuple type</p>
// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: <div class="nested-delimiter-container">
-// HTML-STRUCT-NEXT: <p> Does Tuple things.</p>
+// HTML-STRUCT-NEXT: <p>Does Tuple things.</p>
// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: </div>
@@ -393,7 +393,7 @@ tuple<int, int, bool> func_with_tuple_param(tuple<int, int, bool> t) { return t;
// YAML-NEXT: - Kind: ParagraphComment
// YAML-NEXT: Children:
// YAML-NEXT: - Kind: TextComment
-// YAML-NEXT: Text: ' A function with a tuple parameter'
+// YAML-NEXT: Text: 'A function with a tuple parameter'
// YAML-NEXT: - Kind: ParagraphComment
// YAML-NEXT: Children:
// YAML-NEXT: - Kind: TextComment
@@ -404,7 +404,7 @@ tuple<int, int, bool> func_with_tuple_param(tuple<int, int, bool> t) { return t;
// YAML-NEXT: - Kind: ParagraphComment
// YAML-NEXT: Children:
// YAML-NEXT: - Kind: TextComment
-// YAML-NEXT: Text: ' The input to func_with_tuple_param'
+// YAML-NEXT: Text: 'The input to func_with_tuple_param'
// YAML-NEXT: DefLocation:
// YAML-NEXT: LineNumber: [[# @LINE - 23]]
// YAML-NEXT: Filename:
@@ -455,7 +455,7 @@ tuple<int, int, bool> func_with_tuple_param(tuple<int, int, bool> t) { return t;
// HTML: <pre><code class="language-cpp code-clang-doc">tuple<int, int, bool> func_with_tuple_param (tuple<int, int, bool> t)</code></pre>
// HTML-NEXT: <div class="doc-card">
// HTML-NEXT: <div class="nested-delimiter-container">
-// HTML-NEXT: <p> A function with a tuple parameter</p>
+// HTML-NEXT: <p>A function with a tuple parameter</p>
// HTML-NEXT: </div>
// HTML-NEXT: <div class="nested-delimiter-container">
// HTML-NEXT: <h3>Parameters</h3>
diff --git a/clang-tools-extra/test/clang-doc/typedef-alias.cpp b/clang-tools-extra/test/clang-doc/typedef-alias.cpp
index f5b4afd7ff6a8..c4dad4c25f2e0 100644
--- a/clang-tools-extra/test/clang-doc/typedef-alias.cpp
+++ b/clang-tools-extra/test/clang-doc/typedef-alias.cpp
@@ -41,14 +41,14 @@ using IntVec = Vector<int>;
// HTML-GLOBAL-NEXT: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-GLOBAL-NEXT: <pre><code class="language-cpp code-clang-doc">using u_long = unsigned long</code></pre>
// HTML-GLOBAL-NEXT: <div class="nested-delimiter-container">
-// HTML-GLOBAL-NEXT: <p> This is u_long</p>
+// HTML-GLOBAL-NEXT: <p>This is u_long</p>
// HTML-GLOBAL-NEXT: </div>
// HTML-GLOBAL-NEXT: <p>Defined at line 8 of file {{.*}}typedef-alias.cpp</p>
// HTML-GLOBAL-NEXT: </div>
// HTML-GLOBAL-NEXT: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-GLOBAL-NEXT: <pre><code class="language-cpp code-clang-doc">typedef IntPtr int *</code></pre>
// HTML-GLOBAL-NEXT: <div class="nested-delimiter-container">
-// HTML-GLOBAL-NEXT: <p> This is IntPtr</p>
+// HTML-GLOBAL-NEXT: <p>This is IntPtr</p>
// HTML-GLOBAL-NEXT: </div>
// HTML-GLOBAL-NEXT: <p>Defined at line 11 of file {{.*}}typedef-alias.cpp</p>
// HTML-GLOBAL-NEXT: </div>
@@ -75,7 +75,7 @@ using IntVec = Vector<int>;
// HTML-VECTOR-NEXT: <div id="{{([0-9A-F]{40})}}" class="delimiter-container">
// HTML-VECTOR-NEXT: <pre><code class="language-cpp code-clang-doc">using Ptr = IntPtr</code></pre>
// HTML-VECTOR-NEXT: <div class="nested-delimiter-container">
-// HTML-VECTOR-NEXT: <p> This is a Ptr</p>
+// HTML-VECTOR-NEXT: <p>This is a Ptr</p>
// HTML-VECTOR-NEXT: </div>
// HTML-VECTOR-NEXT: <p>Defined at line 16 of file {{.*}}typedef-alias.cpp</p>
// HTML-VECTOR-NEXT: </div>
diff --git a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp
index b44b09b28e90f..86ed8f58de5db 100644
--- a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp
+++ b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp
@@ -292,7 +292,7 @@ TEST_F(MDGeneratorTest, emitCommentMD) {
std::make_unique<CommentInfo>());
ParamOut->Children.back()->Children.back()->Kind =
CommentKind::CK_TextComment;
- ParamOut->Children.back()->Children.back()->Text = " is a parameter.";
+ ParamOut->Children.back()->Children.back()->Text = "is a parameter.";
Top.Children.emplace_back(std::make_unique<CommentInfo>());
CommentInfo *ParamIn = Top.Children.back().get();
@@ -304,7 +304,7 @@ TEST_F(MDGeneratorTest, emitCommentMD) {
ParamIn->Children.back()->Children.emplace_back(
std::make_unique<CommentInfo>());
ParamIn->Children.back()->Children.back()->Kind = CommentKind::CK_TextComment;
- ParamIn->Children.back()->Children.back()->Text = " is a parameter.";
+ ParamIn->Children.back()->Children.back()->Text = "is a parameter.";
ParamIn->Children.back()->Children.emplace_back(
std::make_unique<CommentInfo>());
ParamIn->Children.back()->Children.back()->Kind = CommentKind::CK_TextComment;
@@ -356,7 +356,7 @@ TEST_F(MDGeneratorTest, emitCommentMD) {
**J** is a parameter.
-**return**void
+**return** void
)raw";
>From ca953e6827bbbe35efdf361f1db572c322a72ac3 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Tue, 3 Mar 2026 00:59:56 +0530
Subject: [PATCH 14/17] add a TODO, cleanup json test
---
clang-tools-extra/clang-doc/Serialize.cpp | 3 ++-
clang-tools-extra/test/clang-doc/enum.cpp | 4 ----
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/clang-tools-extra/clang-doc/Serialize.cpp b/clang-tools-extra/clang-doc/Serialize.cpp
index 4d825f85cb0cb..f4ad1c2933f85 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -249,7 +249,8 @@ void ClangDocCommentVisitor::parseComment(const comments::Comment *C) {
void ClangDocCommentVisitor::visitTextComment(const TextComment *C) {
if (!isWhitespaceOnly(C->getText()))
- CurrentCI.Text = C->getText().trim();
+ CurrentCI.Text = C->getText().trim(); // TODO: Trim the comments before
+ // parsing them into the AST.
}
void ClangDocCommentVisitor::visitInlineCommandComment(
diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp
index d033c62dc7428..0a86d8272f292 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -1,10 +1,8 @@
// RUN: rm -rf %t && mkdir -p %t
// RUN: clang-doc --format=html --doxygen --output=%t --executor=standalone %s
// RUN: clang-doc --format=md --doxygen --output=%t --executor=standalone %s
-// RUN: clang-doc --format=json --doxygen --output=%t --executor=standalone %s
// RUN: FileCheck %s < %t/html/GlobalNamespace/index.html --check-prefix=HTML-INDEX-LINE
// RUN: FileCheck %s < %t/html/GlobalNamespace/index.html --check-prefix=HTML-INDEX
-// RUN: FileCheck %s < %t/json/GlobalNamespace/index.json --check-prefix=JSON-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
@@ -85,8 +83,6 @@ enum Color {
// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-58]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
-// JSON-INDEX: "TextComment": "Comment 1"
-
/**
* @brief Shape Types
*/
>From 059c2bf21bbd6a1e865040be823390284aae23b0 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Tue, 3 Mar 2026 12:12:19 +0530
Subject: [PATCH 15/17] use <p> instead of <div> for paragraph comments
---
.../assets/comment-template.mustache | 6 +-
.../clang-doc/basic-project.mustache.test | 24 ++--
clang-tools-extra/test/clang-doc/enum.cpp | 122 +++++++++---------
.../test/clang-doc/namespace.cpp | 18 +--
.../test/clang-doc/templates.cpp | 18 +--
5 files changed, 94 insertions(+), 94 deletions(-)
diff --git a/clang-tools-extra/clang-doc/assets/comment-template.mustache b/clang-tools-extra/clang-doc/assets/comment-template.mustache
index 8a23279470da0..6f27a6f5a5d09 100644
--- a/clang-tools-extra/clang-doc/assets/comment-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/comment-template.mustache
@@ -13,11 +13,11 @@
</div>
{{/BriefComments}}
{{#ParagraphComments}}
-<div class="nested-delimiter-container">
+<p class="nested-delimiter-container">
{{#.}}
- <p>{{TextComment}}</p>
+ {{TextComment}}<br>
{{/.}}
-</div>
+</p>
{{/ParagraphComments}}
{{#ParagraphComment}}
{{#Children}}
diff --git a/clang-tools-extra/test/clang-doc/basic-project.mustache.test b/clang-tools-extra/test/clang-doc/basic-project.mustache.test
index ddee7275e1089..99d9dd6cc7499 100644
--- a/clang-tools-extra/test/clang-doc/basic-project.mustache.test
+++ b/clang-tools-extra/test/clang-doc/basic-project.mustache.test
@@ -56,9 +56,9 @@ HTML-SHAPE-NEXT: <div class="doc-card">
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
HTML-SHAPE-NEXT: <p>Abstract base class for shapes.</p>
HTML-SHAPE-NEXT: </div>
-HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
-HTML-SHAPE-NEXT: <p>Provides a common interface for different types of shapes.</p>
-HTML-SHAPE-NEXT: </div>
+HTML-SHAPE-NEXT: <p class="nested-delimiter-container">
+HTML-SHAPE-NEXT: Provides a common interface for different types of shapes.<br>
+HTML-SHAPE-NEXT: </p>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </section>
@@ -175,9 +175,9 @@ HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <p>A simple calculator class.</p>
HTML-CALC-NEXT: </div>
-HTML-CALC-NEXT: <div class="nested-delimiter-container">
-HTML-CALC-NEXT: <p>Provides basic arithmetic operations.</p>
-HTML-CALC-NEXT: </div>
+HTML-CALC-NEXT: <p class="nested-delimiter-container">
+HTML-CALC-NEXT: Provides basic arithmetic operations.<br>
+HTML-CALC-NEXT: </p>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </section>
@@ -359,9 +359,9 @@ HTML-RECTANGLE-NEXT: <div class="doc-card">
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
HTML-RECTANGLE-NEXT: <p>Rectangle class derived from Shape.</p>
HTML-RECTANGLE-NEXT: </div>
-HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
-HTML-RECTANGLE-NEXT: <p>Represents a rectangle with a given width and height.</p>
-HTML-RECTANGLE-NEXT: </div>
+HTML-RECTANGLE-NEXT: <p class="nested-delimiter-container">
+HTML-RECTANGLE-NEXT: Represents a rectangle with a given width and height.<br>
+HTML-RECTANGLE-NEXT: </p>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </section>
@@ -464,9 +464,9 @@ HTML-CIRCLE-NEXT: <div class="doc-card">
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
HTML-CIRCLE-NEXT: <p>Circle class derived from Shape.</p>
HTML-CIRCLE-NEXT: </div>
-HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
-HTML-CIRCLE-NEXT: <p>Represents a circle with a given radius.</p>
-HTML-CIRCLE-NEXT: </div>
+HTML-CIRCLE-NEXT: <p class="nested-delimiter-container">
+HTML-CIRCLE-NEXT: Represents a circle with a given radius.<br>
+HTML-CIRCLE-NEXT: </p>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </section>
diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp
index 0a86d8272f292..a512e0058cdb6 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -52,25 +52,25 @@ enum Color {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Red</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 1</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: Comment 1<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 2</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: Comment 2<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 3</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: Comment 3<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -118,25 +118,25 @@ enum class Shapes {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Circle</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 1</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: Comment 1<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 2</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: Comment 2<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 3</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: Comment 3<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -191,13 +191,13 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Small</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>A pearl.</p>
-// HTML-INDEX-NEXT: <p>Pearls are quite small.</p>
-// HTML-INDEX-NEXT: </div>
-// HTML-INDEX-NEXT: <div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Pearls are used in jewelry.</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: A pearl.<br>
+// HTML-INDEX-NEXT: Pearls are quite small.<br>
+// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: Pearls are used in jewelry.<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: <tr>
@@ -211,9 +211,9 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Large</td>
// HTML-INDEX-NEXT: <td>2</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>A football.</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: A football.<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -254,9 +254,9 @@ enum : long long {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>BigVal</td>
// HTML-INDEX-NEXT: <td>999999999999</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>A very large value</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
+// HTML-INDEX-NEXT: A very large value<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -308,25 +308,25 @@ class FilePermissions {
// HTML-PERM-NEXT: <tr>
// HTML-PERM-NEXT: <td>Read</td>
// HTML-PERM-NEXT: <td>1</td>
-// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p>Permission to READ r</p>
-// HTML-PERM-NEXT: </div>
+// HTML-PERM-NEXT: <td><p class="nested-delimiter-container">
+// HTML-PERM-NEXT: Permission to READ r<br>
+// HTML-PERM-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p>Permission to WRITE w</p>
-// HTML-PERM-NEXT: </div>
+// HTML-PERM-NEXT: <td><p class="nested-delimiter-container">
+// HTML-PERM-NEXT: Permission to WRITE w<br>
+// HTML-PERM-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p>Permission to EXECUTE x</p>
-// HTML-PERM-NEXT: </div>
+// HTML-PERM-NEXT: <td><p class="nested-delimiter-container">
+// HTML-PERM-NEXT: Permission to EXECUTE x<br>
+// HTML-PERM-NEXT: </p>
// HTML-PERM-NEXT: </td>
// HTML-PERM-NEXT: </tr>
// HTML-PERM-NEXT: </tbody>
@@ -373,25 +373,25 @@ class Animals {
// HTML-ANIMAL-NEXT: <tr>
// HTML-ANIMAL-NEXT: <td>Dog</td>
// HTML-ANIMAL-NEXT: <td>0</td>
-// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p>Man's best friend</p>
-// HTML-ANIMAL-NEXT: </div>
+// HTML-ANIMAL-NEXT: <td><p class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: Man's best friend<br>
+// HTML-ANIMAL-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p>Man's other best friend</p>
-// HTML-ANIMAL-NEXT: </div>
+// HTML-ANIMAL-NEXT: <td><p class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: Man's other best friend<br>
+// HTML-ANIMAL-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p>A lizard</p>
-// HTML-ANIMAL-NEXT: </div>
+// HTML-ANIMAL-NEXT: <td><p class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: A lizard<br>
+// HTML-ANIMAL-NEXT: </p>
// HTML-ANIMAL-NEXT: </td>
// HTML-ANIMAL-NEXT: </tr>
// HTML-ANIMAL-NEXT: </tbody>
@@ -453,33 +453,33 @@ enum Car {
// HTML-VEHICLES-NEXT: <tr>
// HTML-VEHICLES-NEXT: <td>Sedan</td>
// HTML-VEHICLES-NEXT: <td>0</td>
-// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 1</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td><p class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: Comment 1<br>
+// HTML-VEHICLES-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 2</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td><p class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: Comment 2<br>
+// HTML-VEHICLES-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 3</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td><p class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: Comment 3<br>
+// HTML-VEHICLES-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 4</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td><p class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: Comment 4<br>
+// HTML-VEHICLES-NEXT: </p>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
// HTML-VEHICLES-NEXT: </tbody>
diff --git a/clang-tools-extra/test/clang-doc/namespace.cpp b/clang-tools-extra/test/clang-doc/namespace.cpp
index cbc92a3175210..9d5ffe49c987e 100644
--- a/clang-tools-extra/test/clang-doc/namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/namespace.cpp
@@ -146,9 +146,9 @@ class ClassInNestedNamespace {};
// HTML-NESTED-INDEX: </ul>
// HTML-NESTED-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInNestedNamespace ()</code></pre>
// HTML-NESTED-INDEX: <div class="doc-card">
-// HTML-NESTED-INDEX: <div class="nested-delimiter-container">
-// HTML-NESTED-INDEX: <p>Function in NestedNamespace</p>
-// HTML-NESTED-INDEX: </div>
+// HTML-NESTED-INDEX: <p class="nested-delimiter-container">
+// HTML-NESTED-INDEX: Function in NestedNamespace<br>
+// HTML-NESTED-INDEX: </p>
// HTML-NESTED-INDEX: </div>
// HTML-NESTED-INDEX: <p>Defined at line 105 of file {{.*}}namespace.cpp</p>
// HTML-NESTED-INDEX: </div>
@@ -181,9 +181,9 @@ class ClassInNestedNamespace {};
// HTML-PRIMARY-INDEX: </ul>
// HTML-PRIMARY-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInPrimaryNamespace ()</code></pre>
// HTML-PRIMARY-INDEX: <div class="doc-card">
-// HTML-PRIMARY-INDEX: <div class="nested-delimiter-container">
-// HTML-PRIMARY-INDEX: <p>Function in PrimaryNamespace</p>
-// HTML-PRIMARY-INDEX: </div>
+// HTML-PRIMARY-INDEX: <p class="nested-delimiter-container">
+// HTML-PRIMARY-INDEX: Function in PrimaryNamespace<br>
+// HTML-PRIMARY-INDEX: </p>
// HTML-PRIMARY-INDEX: </div>
// HTML-PRIMARY-INDEX: <p>Defined at line 84 of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}namespace.cpp</p>
// HTML-PRIMARY-INDEX: </div>
@@ -233,9 +233,9 @@ class ClassInAnotherNamespace {};
// HTML-ANOTHER-INDEX: </ul>
// HTML-ANOTHER-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInAnotherNamespace ()</code></pre>
// HTML-ANOTHER-INDEX: <div class="doc-card">
-// HTML-ANOTHER-INDEX: <div class="nested-delimiter-container">
-// HTML-ANOTHER-INDEX: <p>Function in AnotherNamespace</p>
-// HTML-ANOTHER-INDEX: </div>
+// HTML-ANOTHER-INDEX: <p class="nested-delimiter-container">
+// HTML-ANOTHER-INDEX: Function in AnotherNamespace<br>
+// HTML-ANOTHER-INDEX: </p>
// HTML-ANOTHER-INDEX: </div>
// HTML-ANOTHER-INDEX: <p>Defined at line 193 of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}namespace.cpp</p>
// HTML-ANOTHER-INDEX: </div>
diff --git a/clang-tools-extra/test/clang-doc/templates.cpp b/clang-tools-extra/test/clang-doc/templates.cpp
index 8bd27cb8f637a..9bec70a37063b 100644
--- a/clang-tools-extra/test/clang-doc/templates.cpp
+++ b/clang-tools-extra/test/clang-doc/templates.cpp
@@ -370,12 +370,12 @@ struct tuple {};
// HTML-STRUCT-NEXT: <h1 class="hero__title-large">struct tuple</h1>
// HTML-STRUCT-NEXT: <p>Defined at line [[# @LINE - 6]] of file {{.*}}templates.cpp</p>
// HTML-STRUCT-NEXT: <div class="doc-card">
-// HTML-STRUCT-NEXT: <div class="nested-delimiter-container">
-// HTML-STRUCT-NEXT: <p>A Tuple type</p>
-// HTML-STRUCT-NEXT: </div>
-// HTML-STRUCT-NEXT: <div class="nested-delimiter-container">
-// HTML-STRUCT-NEXT: <p>Does Tuple things.</p>
-// HTML-STRUCT-NEXT: </div>
+// HTML-STRUCT-NEXT: <p class="nested-delimiter-container">
+// HTML-STRUCT-NEXT: A Tuple type<br>
+// HTML-STRUCT-NEXT: </p>
+// HTML-STRUCT-NEXT: <p class="nested-delimiter-container">
+// HTML-STRUCT-NEXT: Does Tuple things.<br>
+// HTML-STRUCT-NEXT: </p>
// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: </section>
@@ -454,9 +454,9 @@ tuple<int, int, bool> func_with_tuple_param(tuple<int, int, bool> t) { return t;
// HTML: <pre><code class="language-cpp code-clang-doc">tuple<int, int, bool> func_with_tuple_param (tuple<int, int, bool> t)</code></pre>
// HTML-NEXT: <div class="doc-card">
-// HTML-NEXT: <div class="nested-delimiter-container">
-// HTML-NEXT: <p>A function with a tuple parameter</p>
-// HTML-NEXT: </div>
+// HTML-NEXT: <p class="nested-delimiter-container">
+// HTML-NEXT: A function with a tuple parameter<br>
+// HTML-NEXT: </p>
// HTML-NEXT: <div class="nested-delimiter-container">
// HTML-NEXT: <h3>Parameters</h3>
// HTML-NEXT: <div>
>From 3519b07c1efc6f45e493e4121e1031552bcdc9dd Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Fri, 6 Mar 2026 22:34:45 +0530
Subject: [PATCH 16/17] Revert "use <p> instead of <div> for paragraph
comments"
This reverts commit 059c2bf21bbd6a1e865040be823390284aae23b0.
---
.../assets/comment-template.mustache | 6 +-
.../clang-doc/basic-project.mustache.test | 24 ++--
clang-tools-extra/test/clang-doc/enum.cpp | 122 +++++++++---------
.../test/clang-doc/namespace.cpp | 18 +--
.../test/clang-doc/templates.cpp | 18 +--
5 files changed, 94 insertions(+), 94 deletions(-)
diff --git a/clang-tools-extra/clang-doc/assets/comment-template.mustache b/clang-tools-extra/clang-doc/assets/comment-template.mustache
index 6f27a6f5a5d09..8a23279470da0 100644
--- a/clang-tools-extra/clang-doc/assets/comment-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/comment-template.mustache
@@ -13,11 +13,11 @@
</div>
{{/BriefComments}}
{{#ParagraphComments}}
-<p class="nested-delimiter-container">
+<div class="nested-delimiter-container">
{{#.}}
- {{TextComment}}<br>
+ <p>{{TextComment}}</p>
{{/.}}
-</p>
+</div>
{{/ParagraphComments}}
{{#ParagraphComment}}
{{#Children}}
diff --git a/clang-tools-extra/test/clang-doc/basic-project.mustache.test b/clang-tools-extra/test/clang-doc/basic-project.mustache.test
index 99d9dd6cc7499..ddee7275e1089 100644
--- a/clang-tools-extra/test/clang-doc/basic-project.mustache.test
+++ b/clang-tools-extra/test/clang-doc/basic-project.mustache.test
@@ -56,9 +56,9 @@ HTML-SHAPE-NEXT: <div class="doc-card">
HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
HTML-SHAPE-NEXT: <p>Abstract base class for shapes.</p>
HTML-SHAPE-NEXT: </div>
-HTML-SHAPE-NEXT: <p class="nested-delimiter-container">
-HTML-SHAPE-NEXT: Provides a common interface for different types of shapes.<br>
-HTML-SHAPE-NEXT: </p>
+HTML-SHAPE-NEXT: <div class="nested-delimiter-container">
+HTML-SHAPE-NEXT: <p>Provides a common interface for different types of shapes.</p>
+HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </div>
HTML-SHAPE-NEXT: </section>
@@ -175,9 +175,9 @@ HTML-CALC-NEXT: <div class="doc-card">
HTML-CALC-NEXT: <div class="nested-delimiter-container">
HTML-CALC-NEXT: <p>A simple calculator class.</p>
HTML-CALC-NEXT: </div>
-HTML-CALC-NEXT: <p class="nested-delimiter-container">
-HTML-CALC-NEXT: Provides basic arithmetic operations.<br>
-HTML-CALC-NEXT: </p>
+HTML-CALC-NEXT: <div class="nested-delimiter-container">
+HTML-CALC-NEXT: <p>Provides basic arithmetic operations.</p>
+HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </div>
HTML-CALC-NEXT: </section>
@@ -359,9 +359,9 @@ HTML-RECTANGLE-NEXT: <div class="doc-card">
HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
HTML-RECTANGLE-NEXT: <p>Rectangle class derived from Shape.</p>
HTML-RECTANGLE-NEXT: </div>
-HTML-RECTANGLE-NEXT: <p class="nested-delimiter-container">
-HTML-RECTANGLE-NEXT: Represents a rectangle with a given width and height.<br>
-HTML-RECTANGLE-NEXT: </p>
+HTML-RECTANGLE-NEXT: <div class="nested-delimiter-container">
+HTML-RECTANGLE-NEXT: <p>Represents a rectangle with a given width and height.</p>
+HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </div>
HTML-RECTANGLE-NEXT: </section>
@@ -464,9 +464,9 @@ HTML-CIRCLE-NEXT: <div class="doc-card">
HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
HTML-CIRCLE-NEXT: <p>Circle class derived from Shape.</p>
HTML-CIRCLE-NEXT: </div>
-HTML-CIRCLE-NEXT: <p class="nested-delimiter-container">
-HTML-CIRCLE-NEXT: Represents a circle with a given radius.<br>
-HTML-CIRCLE-NEXT: </p>
+HTML-CIRCLE-NEXT: <div class="nested-delimiter-container">
+HTML-CIRCLE-NEXT: <p>Represents a circle with a given radius.</p>
+HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </div>
HTML-CIRCLE-NEXT: </section>
diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp
index a512e0058cdb6..0a86d8272f292 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -52,25 +52,25 @@ enum Color {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Red</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: Comment 1<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>Comment 1</p>
+// HTML-INDEX-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: Comment 2<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>Comment 2</p>
+// HTML-INDEX-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: Comment 3<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>Comment 3</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -118,25 +118,25 @@ enum class Shapes {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Circle</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: Comment 1<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>Comment 1</p>
+// HTML-INDEX-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: Comment 2<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>Comment 2</p>
+// HTML-INDEX-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: Comment 3<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>Comment 3</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -191,13 +191,13 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Small</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: A pearl.<br>
-// HTML-INDEX-NEXT: Pearls are quite small.<br>
-// HTML-INDEX-NEXT: </p>
-// HTML-INDEX-NEXT: <p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: Pearls are used in jewelry.<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>A pearl.</p>
+// HTML-INDEX-NEXT: <p>Pearls are quite small.</p>
+// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>Pearls are used in jewelry.</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: <tr>
@@ -211,9 +211,9 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Large</td>
// HTML-INDEX-NEXT: <td>2</td>
-// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: A football.<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>A football.</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -254,9 +254,9 @@ enum : long long {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>BigVal</td>
// HTML-INDEX-NEXT: <td>999999999999</td>
-// HTML-INDEX-NEXT: <td><p class="nested-delimiter-container">
-// HTML-INDEX-NEXT: A very large value<br>
-// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
+// HTML-INDEX-NEXT: <p>A very large value</p>
+// HTML-INDEX-NEXT: </div>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -308,25 +308,25 @@ class FilePermissions {
// HTML-PERM-NEXT: <tr>
// HTML-PERM-NEXT: <td>Read</td>
// HTML-PERM-NEXT: <td>1</td>
-// HTML-PERM-NEXT: <td><p class="nested-delimiter-container">
-// HTML-PERM-NEXT: Permission to READ r<br>
-// HTML-PERM-NEXT: </p>
+// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
+// HTML-PERM-NEXT: <p>Permission to READ r</p>
+// HTML-PERM-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-PERM-NEXT: Permission to WRITE w<br>
-// HTML-PERM-NEXT: </p>
+// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
+// HTML-PERM-NEXT: <p>Permission to WRITE w</p>
+// HTML-PERM-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-PERM-NEXT: Permission to EXECUTE x<br>
-// HTML-PERM-NEXT: </p>
+// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
+// HTML-PERM-NEXT: <p>Permission to EXECUTE x</p>
+// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </td>
// HTML-PERM-NEXT: </tr>
// HTML-PERM-NEXT: </tbody>
@@ -373,25 +373,25 @@ class Animals {
// HTML-ANIMAL-NEXT: <tr>
// HTML-ANIMAL-NEXT: <td>Dog</td>
// HTML-ANIMAL-NEXT: <td>0</td>
-// HTML-ANIMAL-NEXT: <td><p class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: Man's best friend<br>
-// HTML-ANIMAL-NEXT: </p>
+// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: <p>Man's best friend</p>
+// HTML-ANIMAL-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: Man's other best friend<br>
-// HTML-ANIMAL-NEXT: </p>
+// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: <p>Man's other best friend</p>
+// HTML-ANIMAL-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: A lizard<br>
-// HTML-ANIMAL-NEXT: </p>
+// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
+// HTML-ANIMAL-NEXT: <p>A lizard</p>
+// HTML-ANIMAL-NEXT: </div>
// HTML-ANIMAL-NEXT: </td>
// HTML-ANIMAL-NEXT: </tr>
// HTML-ANIMAL-NEXT: </tbody>
@@ -453,33 +453,33 @@ enum Car {
// HTML-VEHICLES-NEXT: <tr>
// HTML-VEHICLES-NEXT: <td>Sedan</td>
// HTML-VEHICLES-NEXT: <td>0</td>
-// HTML-VEHICLES-NEXT: <td><p class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: Comment 1<br>
-// HTML-VEHICLES-NEXT: </p>
+// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p>Comment 1</p>
+// HTML-VEHICLES-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: Comment 2<br>
-// HTML-VEHICLES-NEXT: </p>
+// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p>Comment 2</p>
+// HTML-VEHICLES-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: Comment 3<br>
-// HTML-VEHICLES-NEXT: </p>
+// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p>Comment 3</p>
+// HTML-VEHICLES-NEXT: </div>
// 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><p class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: Comment 4<br>
-// HTML-VEHICLES-NEXT: </p>
+// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
+// HTML-VEHICLES-NEXT: <p>Comment 4</p>
+// HTML-VEHICLES-NEXT: </div>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
// HTML-VEHICLES-NEXT: </tbody>
diff --git a/clang-tools-extra/test/clang-doc/namespace.cpp b/clang-tools-extra/test/clang-doc/namespace.cpp
index 9d5ffe49c987e..cbc92a3175210 100644
--- a/clang-tools-extra/test/clang-doc/namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/namespace.cpp
@@ -146,9 +146,9 @@ class ClassInNestedNamespace {};
// HTML-NESTED-INDEX: </ul>
// HTML-NESTED-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInNestedNamespace ()</code></pre>
// HTML-NESTED-INDEX: <div class="doc-card">
-// HTML-NESTED-INDEX: <p class="nested-delimiter-container">
-// HTML-NESTED-INDEX: Function in NestedNamespace<br>
-// HTML-NESTED-INDEX: </p>
+// HTML-NESTED-INDEX: <div class="nested-delimiter-container">
+// HTML-NESTED-INDEX: <p>Function in NestedNamespace</p>
+// HTML-NESTED-INDEX: </div>
// HTML-NESTED-INDEX: </div>
// HTML-NESTED-INDEX: <p>Defined at line 105 of file {{.*}}namespace.cpp</p>
// HTML-NESTED-INDEX: </div>
@@ -181,9 +181,9 @@ class ClassInNestedNamespace {};
// HTML-PRIMARY-INDEX: </ul>
// HTML-PRIMARY-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInPrimaryNamespace ()</code></pre>
// HTML-PRIMARY-INDEX: <div class="doc-card">
-// HTML-PRIMARY-INDEX: <p class="nested-delimiter-container">
-// HTML-PRIMARY-INDEX: Function in PrimaryNamespace<br>
-// HTML-PRIMARY-INDEX: </p>
+// HTML-PRIMARY-INDEX: <div class="nested-delimiter-container">
+// HTML-PRIMARY-INDEX: <p>Function in PrimaryNamespace</p>
+// HTML-PRIMARY-INDEX: </div>
// HTML-PRIMARY-INDEX: </div>
// HTML-PRIMARY-INDEX: <p>Defined at line 84 of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}namespace.cpp</p>
// HTML-PRIMARY-INDEX: </div>
@@ -233,9 +233,9 @@ class ClassInAnotherNamespace {};
// HTML-ANOTHER-INDEX: </ul>
// HTML-ANOTHER-INDEX: <pre><code class="language-cpp code-clang-doc">void functionInAnotherNamespace ()</code></pre>
// HTML-ANOTHER-INDEX: <div class="doc-card">
-// HTML-ANOTHER-INDEX: <p class="nested-delimiter-container">
-// HTML-ANOTHER-INDEX: Function in AnotherNamespace<br>
-// HTML-ANOTHER-INDEX: </p>
+// HTML-ANOTHER-INDEX: <div class="nested-delimiter-container">
+// HTML-ANOTHER-INDEX: <p>Function in AnotherNamespace</p>
+// HTML-ANOTHER-INDEX: </div>
// HTML-ANOTHER-INDEX: </div>
// HTML-ANOTHER-INDEX: <p>Defined at line 193 of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}namespace.cpp</p>
// HTML-ANOTHER-INDEX: </div>
diff --git a/clang-tools-extra/test/clang-doc/templates.cpp b/clang-tools-extra/test/clang-doc/templates.cpp
index 9bec70a37063b..8bd27cb8f637a 100644
--- a/clang-tools-extra/test/clang-doc/templates.cpp
+++ b/clang-tools-extra/test/clang-doc/templates.cpp
@@ -370,12 +370,12 @@ struct tuple {};
// HTML-STRUCT-NEXT: <h1 class="hero__title-large">struct tuple</h1>
// HTML-STRUCT-NEXT: <p>Defined at line [[# @LINE - 6]] of file {{.*}}templates.cpp</p>
// HTML-STRUCT-NEXT: <div class="doc-card">
-// HTML-STRUCT-NEXT: <p class="nested-delimiter-container">
-// HTML-STRUCT-NEXT: A Tuple type<br>
-// HTML-STRUCT-NEXT: </p>
-// HTML-STRUCT-NEXT: <p class="nested-delimiter-container">
-// HTML-STRUCT-NEXT: Does Tuple things.<br>
-// HTML-STRUCT-NEXT: </p>
+// HTML-STRUCT-NEXT: <div class="nested-delimiter-container">
+// HTML-STRUCT-NEXT: <p>A Tuple type</p>
+// HTML-STRUCT-NEXT: </div>
+// HTML-STRUCT-NEXT: <div class="nested-delimiter-container">
+// HTML-STRUCT-NEXT: <p>Does Tuple things.</p>
+// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: </div>
// HTML-STRUCT-NEXT: </section>
@@ -454,9 +454,9 @@ tuple<int, int, bool> func_with_tuple_param(tuple<int, int, bool> t) { return t;
// HTML: <pre><code class="language-cpp code-clang-doc">tuple<int, int, bool> func_with_tuple_param (tuple<int, int, bool> t)</code></pre>
// HTML-NEXT: <div class="doc-card">
-// HTML-NEXT: <p class="nested-delimiter-container">
-// HTML-NEXT: A function with a tuple parameter<br>
-// HTML-NEXT: </p>
+// HTML-NEXT: <div class="nested-delimiter-container">
+// HTML-NEXT: <p>A function with a tuple parameter</p>
+// HTML-NEXT: </div>
// HTML-NEXT: <div class="nested-delimiter-container">
// HTML-NEXT: <h3>Parameters</h3>
// HTML-NEXT: <div>
>From 4f80602b5b5ecfc7ec9326ad5ee076b39e4d8d55 Mon Sep 17 00:00:00 2001
From: Samrudh Nelli <samrudhnelli at gmail.com>
Date: Fri, 6 Mar 2026 23:38:31 +0530
Subject: [PATCH 17/17] handle comments in enum-template.mustache rather than
editing comment-template.mustache
---
.../clang-doc/assets/clang-doc-mustache.css | 10 +-
.../clang-doc/assets/enum-template.mustache | 22 ++-
clang-tools-extra/test/clang-doc/enum.cpp | 160 ++++++++++--------
3 files changed, 119 insertions(+), 73 deletions(-)
diff --git a/clang-tools-extra/clang-doc/assets/clang-doc-mustache.css b/clang-tools-extra/clang-doc/assets/clang-doc-mustache.css
index 3727981efddc5..fcdf2df013f59 100644
--- a/clang-tools-extra/clang-doc/assets/clang-doc-mustache.css
+++ b/clang-tools-extra/clang-doc/assets/clang-doc-mustache.css
@@ -528,4 +528,12 @@ a, a:visited, a:hover, a:active {
.param-container {
display: block;
-}
\ No newline at end of file
+}
+
+.paragraph-container {
+ margin-bottom: 1rem;
+}
+
+.paragraph-container:last-of-type {
+ margin-bottom: 0rem;
+}
diff --git a/clang-tools-extra/clang-doc/assets/enum-template.mustache b/clang-tools-extra/clang-doc/assets/enum-template.mustache
index f39d176bed4f8..00ec31d9c7807 100644
--- a/clang-tools-extra/clang-doc/assets/enum-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/enum-template.mustache
@@ -30,7 +30,27 @@
<td>{{ValueExpr}}</td>
{{/Value}}
{{#HasComments}}
- <td>{{#Description}}{{>Comments}}{{/Description}}{{^Description}} -- {{/Description}}</td>
+ <td>{{#Description}}
+ {{#BriefComments}}
+ {{#.}}
+ <p class="paragraph-container">{{TextComment}}</p>
+ {{/.}}
+ {{/BriefComments}}
+ {{#ParagraphComments}}
+ <p class="paragraph-container">
+ {{#.}}
+ {{TextComment}}<br>
+ {{/.}}
+ </p>
+ {{/ParagraphComments}}
+ {{#ParagraphComment}}
+ <p>
+ {{#Children}}
+ {{TextComment}}
+ {{/Children}}
+ </p>
+ {{/ParagraphComment}}
+ {{/Description}}{{^Description}} -- {{/Description}}</td>
{{/HasComments}}
</tr>
{{/Members}}
diff --git a/clang-tools-extra/test/clang-doc/enum.cpp b/clang-tools-extra/test/clang-doc/enum.cpp
index 0a86d8272f292..46a26205dfca6 100644
--- a/clang-tools-extra/test/clang-doc/enum.cpp
+++ b/clang-tools-extra/test/clang-doc/enum.cpp
@@ -52,25 +52,28 @@ enum Color {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Red</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 1</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: Comment 1<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 2</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: Comment 2<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 3</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: Comment 3<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -80,7 +83,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-58]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-61]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
/**
@@ -118,25 +121,28 @@ enum class Shapes {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Circle</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 1</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: Comment 1<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 2</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: Comment 2<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Comment 3</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: Comment 3<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -146,7 +152,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-60]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-63]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
typedef unsigned char uint8_t;
@@ -191,29 +197,30 @@ enum Size : uint8_t {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>Small</td>
// HTML-INDEX-NEXT: <td>0</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>A pearl.</p>
-// HTML-INDEX-NEXT: <p>Pearls are quite small.</p>
-// HTML-INDEX-NEXT: </div>
-// HTML-INDEX-NEXT: <div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>Pearls are used in jewelry.</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: A pearl.<br>
+// HTML-INDEX-NEXT: Pearls are quite small.<br>
+// HTML-INDEX-NEXT: </p>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: Pearls are used in jewelry.<br>
+// HTML-INDEX-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>A tennis ball.</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">A tennis ball.</p>
// 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><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>A football.</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: A football.<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -223,7 +230,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-70]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-71]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
/**
@@ -254,9 +261,10 @@ enum : long long {
// HTML-INDEX-NEXT: <tr>
// HTML-INDEX-NEXT: <td>BigVal</td>
// HTML-INDEX-NEXT: <td>999999999999</td>
-// HTML-INDEX-NEXT: <td><div class="nested-delimiter-container">
-// HTML-INDEX-NEXT: <p>A very large value</p>
-// HTML-INDEX-NEXT: </div>
+// HTML-INDEX-NEXT: <td>
+// HTML-INDEX-NEXT: <p class="paragraph-container">
+// HTML-INDEX-NEXT: A very large value<br>
+// HTML-INDEX-NEXT: </p>
// HTML-INDEX-NEXT: </td>
// HTML-INDEX-NEXT: </tr>
// HTML-INDEX-NEXT: </tbody>
@@ -266,7 +274,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-37]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-INDEX-NEXT: <p>Defined at line [[@LINE-38]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-INDEX-NEXT: </div>
class FilePermissions {
@@ -308,25 +316,28 @@ class FilePermissions {
// HTML-PERM-NEXT: <tr>
// HTML-PERM-NEXT: <td>Read</td>
// HTML-PERM-NEXT: <td>1</td>
-// HTML-PERM-NEXT: <td><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p>Permission to READ r</p>
-// HTML-PERM-NEXT: </div>
+// HTML-PERM-NEXT: <td>
+// HTML-PERM-NEXT: <p class="paragraph-container">
+// HTML-PERM-NEXT: Permission to READ r<br>
+// HTML-PERM-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p>Permission to WRITE w</p>
-// HTML-PERM-NEXT: </div>
+// HTML-PERM-NEXT: <td>
+// HTML-PERM-NEXT: <p class="paragraph-container">
+// HTML-PERM-NEXT: Permission to WRITE w<br>
+// HTML-PERM-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-PERM-NEXT: <p>Permission to EXECUTE x</p>
-// HTML-PERM-NEXT: </div>
+// HTML-PERM-NEXT: <td>
+// HTML-PERM-NEXT: <p class="paragraph-container">
+// HTML-PERM-NEXT: Permission to EXECUTE x<br>
+// HTML-PERM-NEXT: </p>
// HTML-PERM-NEXT: </td>
// HTML-PERM-NEXT: </tr>
// HTML-PERM-NEXT: </tbody>
@@ -336,7 +347,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-60]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-PERM-NEXT: <p>Defined at line [[@LINE-63]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-PERM-NEXT: </div>
// HTML-PERM-NEXT: </section>
@@ -373,25 +384,28 @@ class Animals {
// HTML-ANIMAL-NEXT: <tr>
// HTML-ANIMAL-NEXT: <td>Dog</td>
// HTML-ANIMAL-NEXT: <td>0</td>
-// HTML-ANIMAL-NEXT: <td><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p>Man's best friend</p>
-// HTML-ANIMAL-NEXT: </div>
+// HTML-ANIMAL-NEXT: <td>
+// HTML-ANIMAL-NEXT: <p class="paragraph-container">
+// HTML-ANIMAL-NEXT: Man's best friend<br>
+// HTML-ANIMAL-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p>Man's other best friend</p>
-// HTML-ANIMAL-NEXT: </div>
+// HTML-ANIMAL-NEXT: <td>
+// HTML-ANIMAL-NEXT: <p class="paragraph-container">
+// HTML-ANIMAL-NEXT: Man's other best friend<br>
+// HTML-ANIMAL-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-ANIMAL-NEXT: <p>A lizard</p>
-// HTML-ANIMAL-NEXT: </div>
+// HTML-ANIMAL-NEXT: <td>
+// HTML-ANIMAL-NEXT: <p class="paragraph-container">
+// HTML-ANIMAL-NEXT: A lizard<br>
+// HTML-ANIMAL-NEXT: </p>
// HTML-ANIMAL-NEXT: </td>
// HTML-ANIMAL-NEXT: </tr>
// HTML-ANIMAL-NEXT: </tbody>
@@ -401,7 +415,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-53]] of file {{.*}}enum.cpp</p>
+// HTML-ANIMAL-NEXT: <p>Defined at line [[@LINE-56]] of file {{.*}}enum.cpp</p>
// HTML-ANIMAL-NEXT: </div>
// HTML-ANIMAL-NEXT: </section>
@@ -453,33 +467,37 @@ enum Car {
// HTML-VEHICLES-NEXT: <tr>
// HTML-VEHICLES-NEXT: <td>Sedan</td>
// HTML-VEHICLES-NEXT: <td>0</td>
-// HTML-VEHICLES-NEXT: <td><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 1</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td>
+// HTML-VEHICLES-NEXT: <p class="paragraph-container">
+// HTML-VEHICLES-NEXT: Comment 1<br>
+// HTML-VEHICLES-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 2</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td>
+// HTML-VEHICLES-NEXT: <p class="paragraph-container">
+// HTML-VEHICLES-NEXT: Comment 2<br>
+// HTML-VEHICLES-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 3</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td>
+// HTML-VEHICLES-NEXT: <p class="paragraph-container">
+// HTML-VEHICLES-NEXT: Comment 3<br>
+// HTML-VEHICLES-NEXT: </p>
// 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><div class="nested-delimiter-container">
-// HTML-VEHICLES-NEXT: <p>Comment 4</p>
-// HTML-VEHICLES-NEXT: </div>
+// HTML-VEHICLES-NEXT: <td>
+// HTML-VEHICLES-NEXT: <p class="paragraph-container">
+// HTML-VEHICLES-NEXT: Comment 4<br>
+// HTML-VEHICLES-NEXT: </p>
// HTML-VEHICLES-NEXT: </td>
// HTML-VEHICLES-NEXT: </tr>
// HTML-VEHICLES-NEXT: </tbody>
@@ -489,7 +507,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-71]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
+// HTML-VEHICLES-NEXT: <p>Defined at line [[@LINE-75]] of file {{.*}}clang-tools-extra{{[\/]}}test{{[\/]}}clang-doc{{[\/]}}enum.cpp</p>
// HTML-VEHICLES-NEXT: </div>
enum ColorUserSpecified {
More information about the cfe-commits
mailing list