[clang-tools-extra] [clang-doc] Add specialization info to record references (PR #191252)

Paul Kirth via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 9 14:29:59 PDT 2026


================
@@ -433,6 +437,45 @@ void JSONGenerator::serializeCommonAttributes(const Info &I,
     generateContext(I, Obj);
 }
 
+static auto SerializeTemplateParam = [](const TemplateParamInfo &Param,
+                                        Object &JsonObj) {
+  JsonObj["Param"] = Param.Contents;
+};
+
+static void serializeTemplateSpecialization(TemplateInfo Template,
+                                            Object &TemplateObj) {
+  json::Value TemplateSpecializationVal = Object();
+  auto &TemplateSpecializationObj = *TemplateSpecializationVal.getAsObject();
+  TemplateSpecializationObj["SpecializationOf"] =
+      toHex(toStringRef(Template.Specialization->SpecializationOf));
+  if (!Template.Specialization->Params.empty()) {
+    bool VerticalDisplay =
+        Template.Specialization->Params.size() > getMaxParamWrapLimit();
+    serializeArray(Template.Specialization->Params, TemplateSpecializationObj,
+                   "Parameters", SerializeTemplateParam, "SpecParamEnd",
+                   [VerticalDisplay](Object &JsonObj) {
+                     JsonObj["VerticalDisplay"] = VerticalDisplay;
+                   });
+  }
+  TemplateObj["Specialization"] = TemplateSpecializationVal;
+}
+
+void JSONGenerator::serializeClassSpecializations(SymbolID ClassUSR,
+                                                  Object &ReferenceObj) {
+  if (!Infos)
+    return;
+  auto ClassIt = Infos->find(toStringRef(toHex(ClassUSR)));
----------------
ilovepi wrote:

Do you need `toStringRef()`? IIRC `toHex()` retruns `std::string`, and I'd have thought the parameter would be implicitly converted to `StringRef`...


https://github.com/llvm/llvm-project/pull/191252


More information about the cfe-commits mailing list