[clang-tools-extra] [Clang-doc] Display enum comments in HTML (PR #183085)

Samrudh Nelli via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 2 22:45:56 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/15] [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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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>



More information about the cfe-commits mailing list