https://github.com/SamrudhNelli created https://github.com/llvm/llvm-project/pull/183085
Currently comments of enum variables are not displayed in both HTML and MD. Add support to display the comments. Also support displaying the value of an enum member in MD. >From 7e5abbeac7c100a07854af63402fcdaae740fa1e Mon Sep 17 00:00:00 2001 From: Samrudh Nelli <[email protected]> Date: Tue, 24 Feb 2026 21:10:19 +0530 Subject: [PATCH] [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> _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
