[Lldb-commits] [lldb] [lldb-dap] Migrating DAP 'initialize' to new typed RequestHandler. (PR #133007)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Wed Mar 26 16:16:24 PDT 2025


================
@@ -44,4 +44,223 @@ bool fromJSON(const json::Value &Params, Source &S, json::Path P) {
          O.mapOptional("sourceReference", S.sourceReference);
 }
 
+json::Value toJSON(const ExceptionBreakpointsFilter &EBF) {
+  json::Object result{{"filter", EBF.filter}, {"label", EBF.label}};
+
+  if (EBF.description)
+    result.insert({"description", *EBF.description});
+  if (EBF.defaultState)
+    result.insert({"default", *EBF.defaultState});
+  if (EBF.supportsCondition)
+    result.insert({"supportsCondition", *EBF.supportsCondition});
+  if (EBF.conditionDescription)
+    result.insert({"conditionDescription", *EBF.conditionDescription});
+
+  return result;
+}
+
+json::Value toJSON(const ColumnDescriptor::Type &T) {
+  switch (T) {
+  case ColumnDescriptor::Type::String:
+    return "string";
+  case ColumnDescriptor::Type::Number:
+    return "number";
+  case ColumnDescriptor::Type::Boolean:
+    return "boolean";
+  case ColumnDescriptor::Type::Timestamp:
+    return "unixTimestampUTC";
+  }
+}
+
+json::Value toJSON(const ColumnDescriptor &CD) {
+  json::Object result{{"attributeName", CD.attributeName}, {"label", CD.label}};
+
+  if (CD.format)
+    result.insert({"format", *CD.format});
+  if (CD.type)
+    result.insert({"type", *CD.type});
+  if (CD.width)
+    result.insert({"width", *CD.width});
+
+  return result;
+}
+
+json::Value toJSON(const ChecksumAlgorithm &CA) {
+  switch (CA) {
+  case ChecksumAlgorithm::md5:
+    return "MD5";
+  case ChecksumAlgorithm::sha1:
+    return "SHA1";
+  case ChecksumAlgorithm::sha256:
+    return "SHA256";
+  case ChecksumAlgorithm::timestamp:
+    return "timestamp";
+  }
+}
+
+json::Value toJSON(const BreakpointModeApplicability &BMA) {
+  switch (BMA) {
+  case BreakpointModeApplicability::source:
+    return "source";
+  case BreakpointModeApplicability::exception:
+    return "exception";
+  case BreakpointModeApplicability::data:
+    return "data";
+  case BreakpointModeApplicability::instruction:
+    return "instruction";
+  }
+}
+
+json::Value toJSON(const BreakpointMode &BM) {
+  json::Object result{
+      {"mode", BM.mode},
+      {"label", BM.label},
+      {"appliesTo", BM.appliesTo},
+  };
+
+  if (BM.description)
+    result.insert({"description", *BM.description});
+
+  return result;
+}
+
+json::Value toJSON(const Capabilities &C) {
+  json::Object result;
+
+  for (const auto &feature : C.supportedFeatures)
+    switch (feature) {
+    case Capabilities::Feature::supportsANSIStyling:
+      result.insert({"supportsANSIStyling", true});
+      break;
----------------
JDevlieghere wrote:

I would create a (static) helper that converts the enum values to strings and then do 
```result.insert({GetFeatureAsString(feature), true})';```

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


More information about the lldb-commits mailing list