Repository: microsoft/ptvsd

Issue:
Update pydevd_schema with latest debugProtocol.json



Discussion:

Resolving patch:
diff --git a/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py b/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py
--- a/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py
+++ b/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py
@@ -542,6 +542,7 @@ class %(name)s(BaseSchema):
 '''
 
     contents = []
+    contents.append('# coding: utf-8')
     contents.append('# Automatically generated code.')
     contents.append('# Do not edit manually.')
     contents.append('# Generated by running: %s' % os.path.basename(__file__))
diff --git a/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py b/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py
--- a/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py
+++ b/src/ptvsd/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py
@@ -1,3 +1,4 @@
+# coding: utf-8
 # Automatically generated code.
 # Do not edit manually.
 # Generated by running: __main__pydevd_gen_debug_adapter_protocol.py
@@ -515,7 +516,9 @@ class StoppedEvent(BaseSchema):
                         "exception",
                         "pause",
                         "entry",
-                        "goto"
+                        "goto",
+                        "function breakpoint",
+                        "data breakpoint"
                     ]
                 },
                 "description": {
@@ -3485,11 +3488,11 @@ def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be un
 @register
 class SetFunctionBreakpointsRequest(BaseSchema):
     """
-    Sets multiple function breakpoints and clears all previous function breakpoints.
+    Replaces all existing function breakpoints with new function breakpoints.
     
-    To clear all function breakpoint, specify an empty array.
+    To clear all function breakpoints, specify an empty array.
     
-    When a function breakpoint is hit, a 'stopped' event (event type 'function breakpoint') is
+    When a function breakpoint is hit, a 'stopped' event (with reason 'function breakpoint') is
     generated.
 
     Note: automatically generated code. Do not edit manually.
@@ -3913,6 +3916,464 @@ def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be un
         return dct
 
 
+@register_request('dataBreakpointInfo')
+@register
+class DataBreakpointInfoRequest(BaseSchema):
+    """
+    Obtains information on a possible data breakpoint that could be set on an expression or variable.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "seq": {
+            "type": "integer",
+            "description": "Sequence number."
+        },
+        "type": {
+            "type": "string",
+            "enum": [
+                "request"
+            ]
+        },
+        "command": {
+            "type": "string",
+            "enum": [
+                "dataBreakpointInfo"
+            ]
+        },
+        "arguments": {
+            "type": "DataBreakpointInfoArguments"
+        }
+    }
+    __refs__ = set(['arguments'])
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param string type: 
+        :param string command: 
+        :param DataBreakpointInfoArguments arguments: 
+        :param integer seq: Sequence number.
+        """
+        self.type = 'request'
+        self.command = 'dataBreakpointInfo'
+        if arguments is None:
+            self.arguments = DataBreakpointInfoArguments()
+        else:
+            self.arguments = DataBreakpointInfoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ !=  DataBreakpointInfoArguments else arguments
+        self.seq = seq
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        type = self.type  # noqa (assign to builtin)
+        command = self.command
+        arguments = self.arguments
+        seq = self.seq
+        dct = {
+            'type': type,
+            'command': command,
+            'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap),
+            'seq': seq,
+        }
+        dct.update(self.kwargs)
+        return dct
+
+
+@register
+class DataBreakpointInfoArguments(BaseSchema):
+    """
+    Arguments for 'dataBreakpointInfo' request.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "variablesReference": {
+            "type": "integer",
+            "description": "Reference to the Variable container if the data breakpoint is requested for a child of the container."
+        },
+        "name": {
+            "type": "string",
+            "description": "The name of the Variable's child to obtain data breakpoint information for. If variableReference isn\u2019t provided, this can be an expression."
+        }
+    }
+    __refs__ = set()
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, name, variablesReference=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param string name: The name of the Variable's child to obtain data breakpoint information for. If variableReference isn’t provided, this can be an expression.
+        :param integer variablesReference: Reference to the Variable container if the data breakpoint is requested for a child of the container.
+        """
+        self.name = name
+        self.variablesReference = variablesReference
+        if update_ids_from_dap:
+            self.variablesReference = self._translate_id_from_dap(self.variablesReference)
+        self.kwargs = kwargs
+    
+    
+    @classmethod
+    def update_dict_ids_from_dap(cls, dct):
+        if 'variablesReference' in dct:
+            dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference'])
+        return dct
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        name = self.name
+        variablesReference = self.variablesReference
+        if update_ids_to_dap:
+            if variablesReference is not None:
+                variablesReference = self._translate_id_to_dap(variablesReference)
+        dct = {
+            'name': name,
+        }
+        if variablesReference is not None:
+            dct['variablesReference'] = variablesReference
+        dct.update(self.kwargs)
+        return dct    
+    
+    @classmethod
+    def update_dict_ids_to_dap(cls, dct):
+        if 'variablesReference' in dct:
+            dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference'])
+        return dct
+
+
+@register_response('dataBreakpointInfo')
+@register
+class DataBreakpointInfoResponse(BaseSchema):
+    """
+    Response to 'dataBreakpointInfo' request.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "seq": {
+            "type": "integer",
+            "description": "Sequence number."
+        },
+        "type": {
+            "type": "string",
+            "enum": [
+                "response"
+            ]
+        },
+        "request_seq": {
+            "type": "integer",
+            "description": "Sequence number of the corresponding request."
+        },
+        "success": {
+            "type": "boolean",
+            "description": "Outcome of the request."
+        },
+        "command": {
+            "type": "string",
+            "description": "The command requested."
+        },
+        "message": {
+            "type": "string",
+            "description": "Contains error message if success == false."
+        },
+        "body": {
+            "type": "object",
+            "properties": {
+                "dataId": {
+                    "type": [
+                        "string",
+                        "null"
+                    ],
+                    "description": "An identifier for the data on which a data breakpoint can be registered with the setDataBreakpoints request or null if no data breakpoint is available."
+                },
+                "description": {
+                    "type": "string",
+                    "description": "UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available."
+                },
+                "accessTypes": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/DataBreakpointAccessType"
+                    },
+                    "description": "Optional attribute listing the available access types for a potential data breakpoint. A UI frontend could surface this information."
+                },
+                "canPersist": {
+                    "type": "boolean",
+                    "description": "Optional attribute indicating that a potential data breakpoint could be persisted across sessions."
+                }
+            },
+            "required": [
+                "dataId",
+                "description"
+            ]
+        }
+    }
+    __refs__ = set(['body'])
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param string type: 
+        :param integer request_seq: Sequence number of the corresponding request.
+        :param boolean success: Outcome of the request.
+        :param string command: The command requested.
+        :param DataBreakpointInfoResponseBody body: 
+        :param integer seq: Sequence number.
+        :param string message: Contains error message if success == false.
+        """
+        self.type = 'response'
+        self.request_seq = request_seq
+        self.success = success
+        self.command = command
+        if body is None:
+            self.body = DataBreakpointInfoResponseBody()
+        else:
+            self.body = DataBreakpointInfoResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ !=  DataBreakpointInfoResponseBody else body
+        self.seq = seq
+        self.message = message
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        type = self.type  # noqa (assign to builtin)
+        request_seq = self.request_seq
+        success = self.success
+        command = self.command
+        body = self.body
+        seq = self.seq
+        message = self.message
+        dct = {
+            'type': type,
+            'request_seq': request_seq,
+            'success': success,
+            'command': command,
+            'body': body.to_dict(update_ids_to_dap=update_ids_to_dap),
+            'seq': seq,
+        }
+        if message is not None:
+            dct['message'] = message
+        dct.update(self.kwargs)
+        return dct
+
+
+@register_request('setDataBreakpoints')
+@register
+class SetDataBreakpointsRequest(BaseSchema):
+    """
+    Replaces all existing data breakpoints with new data breakpoints.
+    
+    To clear all data breakpoints, specify an empty array.
+    
+    When a data breakpoint is hit, a 'stopped' event (with reason 'data breakpoint') is generated.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "seq": {
+            "type": "integer",
+            "description": "Sequence number."
+        },
+        "type": {
+            "type": "string",
+            "enum": [
+                "request"
+            ]
+        },
+        "command": {
+            "type": "string",
+            "enum": [
+                "setDataBreakpoints"
+            ]
+        },
+        "arguments": {
+            "type": "SetDataBreakpointsArguments"
+        }
+    }
+    __refs__ = set(['arguments'])
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param string type: 
+        :param string command: 
+        :param SetDataBreakpointsArguments arguments: 
+        :param integer seq: Sequence number.
+        """
+        self.type = 'request'
+        self.command = 'setDataBreakpoints'
+        if arguments is None:
+            self.arguments = SetDataBreakpointsArguments()
+        else:
+            self.arguments = SetDataBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ !=  SetDataBreakpointsArguments else arguments
+        self.seq = seq
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        type = self.type  # noqa (assign to builtin)
+        command = self.command
+        arguments = self.arguments
+        seq = self.seq
+        dct = {
+            'type': type,
+            'command': command,
+            'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap),
+            'seq': seq,
+        }
+        dct.update(self.kwargs)
+        return dct
+
+
+@register
+class SetDataBreakpointsArguments(BaseSchema):
+    """
+    Arguments for 'setDataBreakpoints' request.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "breakpoints": {
+            "type": "array",
+            "items": {
+                "$ref": "#/definitions/DataBreakpoint"
+            },
+            "description": "The contents of this array replaces all existing data breakpoints. An empty array clears all data breakpoints."
+        }
+    }
+    __refs__ = set()
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param array breakpoints: The contents of this array replaces all existing data breakpoints. An empty array clears all data breakpoints.
+        """
+        self.breakpoints = breakpoints
+        if update_ids_from_dap and self.breakpoints:
+            for o in self.breakpoints:
+                DataBreakpoint.update_dict_ids_from_dap(o)
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        breakpoints = self.breakpoints
+        dct = {
+            'breakpoints': [DataBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints,
+        }
+        dct.update(self.kwargs)
+        return dct
+
+
+@register_response('setDataBreakpoints')
+@register
+class SetDataBreakpointsResponse(BaseSchema):
+    """
+    Response to 'setDataBreakpoints' request.
+    
+    Returned is information about each breakpoint created by this request.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "seq": {
+            "type": "integer",
+            "description": "Sequence number."
+        },
+        "type": {
+            "type": "string",
+            "enum": [
+                "response"
+            ]
+        },
+        "request_seq": {
+            "type": "integer",
+            "description": "Sequence number of the corresponding request."
+        },
+        "success": {
+            "type": "boolean",
+            "description": "Outcome of the request."
+        },
+        "command": {
+            "type": "string",
+            "description": "The command requested."
+        },
+        "message": {
+            "type": "string",
+            "description": "Contains error message if success == false."
+        },
+        "body": {
+            "type": "object",
+            "properties": {
+                "breakpoints": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Breakpoint"
+                    },
+                    "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument 'breakpoints' array."
+                }
+            },
+            "required": [
+                "breakpoints"
+            ]
+        }
+    }
+    __refs__ = set(['body'])
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param string type: 
+        :param integer request_seq: Sequence number of the corresponding request.
+        :param boolean success: Outcome of the request.
+        :param string command: The command requested.
+        :param SetDataBreakpointsResponseBody body: 
+        :param integer seq: Sequence number.
+        :param string message: Contains error message if success == false.
+        """
+        self.type = 'response'
+        self.request_seq = request_seq
+        self.success = success
+        self.command = command
+        if body is None:
+            self.body = SetDataBreakpointsResponseBody()
+        else:
+            self.body = SetDataBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ !=  SetDataBreakpointsResponseBody else body
+        self.seq = seq
+        self.message = message
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        type = self.type  # noqa (assign to builtin)
+        request_seq = self.request_seq
+        success = self.success
+        command = self.command
+        body = self.body
+        seq = self.seq
+        message = self.message
+        dct = {
+            'type': type,
+            'request_seq': request_seq,
+            'success': success,
+            'command': command,
+            'body': body.to_dict(update_ids_to_dap=update_ids_to_dap),
+            'seq': seq,
+        }
+        if message is not None:
+            dct['message'] = message
+        dct.update(self.kwargs)
+        return dct
+
+
 @register_request('continue')
 @register
 class ContinueRequest(BaseSchema):
@@ -6708,7 +7169,7 @@ class SetVariableArguments(BaseSchema):
         },
         "name": {
             "type": "string",
-            "description": "The name of the variable."
+            "description": "The name of the variable in the container."
         },
         "value": {
             "type": "string",
@@ -6726,7 +7187,7 @@ class SetVariableArguments(BaseSchema):
     def __init__(self, variablesReference, name, value, format=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
         """
         :param integer variablesReference: The reference of the variable container.
-        :param string name: The name of the variable.
+        :param string name: The name of the variable in the container.
         :param string value: The value of the variable.
         :param ValueFormat format: Specifies details on how to format the response value.
         """
@@ -9487,13 +9948,17 @@ class Capabilities(BaseSchema):
         "supportsTerminateRequest": {
             "type": "boolean",
             "description": "The debug adapter supports the 'terminate' request."
+        },
+        "supportsDataBreakpoints": {
+            "type": "boolean",
+            "description": "The debug adapter supports data breakpoints."
         }
     }
     __refs__ = set()
 
     __slots__ = list(__props__.keys()) + ['kwargs']
 
-    def __init__(self, supportsConfigurationDoneRequest=None, supportsFunctionBreakpoints=None, supportsConditionalBreakpoints=None, supportsHitConditionalBreakpoints=None, supportsEvaluateForHovers=None, exceptionBreakpointFilters=None, supportsStepBack=None, supportsSetVariable=None, supportsRestartFrame=None, supportsGotoTargetsRequest=None, supportsStepInTargetsRequest=None, supportsCompletionsRequest=None, supportsModulesRequest=None, additionalModuleColumns=None, supportedChecksumAlgorithms=None, supportsRestartRequest=None, supportsExceptionOptions=None, supportsValueFormattingOptions=None, supportsExceptionInfoRequest=None, supportTerminateDebuggee=None, supportsDelayedStackTraceLoading=None, supportsLoadedSourcesRequest=None, supportsLogPoints=None, supportsTerminateThreadsRequest=None, supportsSetExpression=None, supportsTerminateRequest=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+    def __init__(self, supportsConfigurationDoneRequest=None, supportsFunctionBreakpoints=None, supportsConditionalBreakpoints=None, supportsHitConditionalBreakpoints=None, supportsEvaluateForHovers=None, exceptionBreakpointFilters=None, supportsStepBack=None, supportsSetVariable=None, supportsRestartFrame=None, supportsGotoTargetsRequest=None, supportsStepInTargetsRequest=None, supportsCompletionsRequest=None, supportsModulesRequest=None, additionalModuleColumns=None, supportedChecksumAlgorithms=None, supportsRestartRequest=None, supportsExceptionOptions=None, supportsValueFormattingOptions=None, supportsExceptionInfoRequest=None, supportTerminateDebuggee=None, supportsDelayedStackTraceLoading=None, supportsLoadedSourcesRequest=None, supportsLogPoints=None, supportsTerminateThreadsRequest=None, supportsSetExpression=None, supportsTerminateRequest=None, supportsDataBreakpoints=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
         """
         :param boolean supportsConfigurationDoneRequest: The debug adapter supports the 'configurationDone' request.
         :param boolean supportsFunctionBreakpoints: The debug adapter supports function breakpoints.
@@ -9521,6 +9986,7 @@ def __init__(self, supportsConfigurationDoneRequest=None, supportsFunctionBreakp
         :param boolean supportsTerminateThreadsRequest: The debug adapter supports the 'terminateThreads' request.
         :param boolean supportsSetExpression: The debug adapter supports the 'setExpression' request.
         :param boolean supportsTerminateRequest: The debug adapter supports the 'terminate' request.
+        :param boolean supportsDataBreakpoints: The debug adapter supports data breakpoints.
         """
         self.supportsConfigurationDoneRequest = supportsConfigurationDoneRequest
         self.supportsFunctionBreakpoints = supportsFunctionBreakpoints
@@ -9557,6 +10023,7 @@ def __init__(self, supportsConfigurationDoneRequest=None, supportsFunctionBreakp
         self.supportsTerminateThreadsRequest = supportsTerminateThreadsRequest
         self.supportsSetExpression = supportsSetExpression
         self.supportsTerminateRequest = supportsTerminateRequest
+        self.supportsDataBreakpoints = supportsDataBreakpoints
         self.kwargs = kwargs
 
 
@@ -9587,6 +10054,7 @@ def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be un
         supportsTerminateThreadsRequest = self.supportsTerminateThreadsRequest
         supportsSetExpression = self.supportsSetExpression
         supportsTerminateRequest = self.supportsTerminateRequest
+        supportsDataBreakpoints = self.supportsDataBreakpoints
         dct = {
         }
         if supportsConfigurationDoneRequest is not None:
@@ -9641,6 +10109,8 @@ def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be un
             dct['supportsSetExpression'] = supportsSetExpression
         if supportsTerminateRequest is not None:
             dct['supportsTerminateRequest'] = supportsTerminateRequest
+        if supportsDataBreakpoints is not None:
+            dct['supportsDataBreakpoints'] = supportsDataBreakpoints
         dct.update(self.kwargs)
         return dct
 
@@ -10663,7 +11133,8 @@ class VariablePresentationHint(BaseSchema):
                 "innerClass",
                 "interface",
                 "mostDerivedClass",
-                "virtual"
+                "virtual",
+                "dataBreakpoint"
             ],
             "enumDescriptions": [
                 "Indicates that the object is a property.",
@@ -10675,7 +11146,8 @@ class VariablePresentationHint(BaseSchema):
                 "Indicates that the object is an inner class.",
                 "Indicates that the object is an interface.",
                 "Indicates that the object is the most derived class.",
-                "Indicates that the object is virtual, that means it is a synthetic object introduced by the adapter for rendering purposes, e.g. an index range for large arrays."
+                "Indicates that the object is virtual, that means it is a synthetic object introduced by the adapter for rendering purposes, e.g. an index range for large arrays.",
+                "Indicates that a data breakpoint is registered for the object."
             ]
         },
         "attributes": {
@@ -10871,6 +11343,103 @@ def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be un
         return dct
 
 
+@register
+class DataBreakpointAccessType(BaseSchema):
+    """
+    This enumeration defines all possible access types for data breakpoints.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    READ = 'read'
+    WRITE = 'write'
+    READWRITE = 'readWrite'
+
+    VALID_VALUES = set(['read', 'write', 'readWrite'])
+
+    __props__ = {}
+    __refs__ = set()
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+    
+        """
+    
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        dct = {
+        }
+        dct.update(self.kwargs)
+        return dct
+
+
+@register
+class DataBreakpoint(BaseSchema):
+    """
+    Properties of a data breakpoint passed to the setDataBreakpoints request.
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "dataId": {
+            "type": "string",
+            "description": "An id representing the data. This id is returned from the dataBreakpointInfo request."
+        },
+        "accessType": {
+            "description": "The access type of the data.",
+            "type": "DataBreakpointAccessType"
+        },
+        "condition": {
+            "type": "string",
+            "description": "An optional expression for conditional breakpoints."
+        },
+        "hitCondition": {
+            "type": "string",
+            "description": "An optional expression that controls how many hits of the breakpoint are ignored. The backend is expected to interpret the expression as needed."
+        }
+    }
+    __refs__ = set(['accessType'])
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, dataId, accessType=None, condition=None, hitCondition=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param string dataId: An id representing the data. This id is returned from the dataBreakpointInfo request.
+        :param DataBreakpointAccessType accessType: The access type of the data.
+        :param string condition: An optional expression for conditional breakpoints.
+        :param string hitCondition: An optional expression that controls how many hits of the breakpoint are ignored. The backend is expected to interpret the expression as needed.
+        """
+        self.dataId = dataId
+        assert accessType in DataBreakpointAccessType.VALID_VALUES
+        self.accessType = accessType
+        self.condition = condition
+        self.hitCondition = hitCondition
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        dataId = self.dataId
+        accessType = self.accessType
+        condition = self.condition
+        hitCondition = self.hitCondition
+        dct = {
+            'dataId': dataId,
+        }
+        if accessType is not None:
+            dct['accessType'] = accessType
+        if condition is not None:
+            dct['condition'] = condition
+        if hitCondition is not None:
+            dct['hitCondition'] = hitCondition
+        dct.update(self.kwargs)
+        return dct
+
+
 @register
 class Breakpoint(BaseSchema):
     """
@@ -11978,7 +12547,9 @@ class StoppedEventBody(BaseSchema):
                 "exception",
                 "pause",
                 "entry",
-                "goto"
+                "goto",
+                "function breakpoint",
+                "data breakpoint"
             ]
         },
         "description": {
@@ -12814,6 +13385,117 @@ def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be un
         return dct
 
 
+@register
+class DataBreakpointInfoResponseBody(BaseSchema):
+    """
+    "body" of DataBreakpointInfoResponse
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "dataId": {
+            "type": [
+                "string",
+                "null"
+            ],
+            "description": "An identifier for the data on which a data breakpoint can be registered with the setDataBreakpoints request or null if no data breakpoint is available."
+        },
+        "description": {
+            "type": "string",
+            "description": "UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available."
+        },
+        "accessTypes": {
+            "type": "array",
+            "items": {
+                "$ref": "#/definitions/DataBreakpointAccessType"
+            },
+            "description": "Optional attribute listing the available access types for a potential data breakpoint. A UI frontend could surface this information."
+        },
+        "canPersist": {
+            "type": "boolean",
+            "description": "Optional attribute indicating that a potential data breakpoint could be persisted across sessions."
+        }
+    }
+    __refs__ = set()
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, dataId, description, accessTypes=None, canPersist=None, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param ['string', 'null'] dataId: An identifier for the data on which a data breakpoint can be registered with the setDataBreakpoints request or null if no data breakpoint is available.
+        :param string description: UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available.
+        :param array accessTypes: Optional attribute listing the available access types for a potential data breakpoint. A UI frontend could surface this information.
+        :param boolean canPersist: Optional attribute indicating that a potential data breakpoint could be persisted across sessions.
+        """
+        self.dataId = dataId
+        self.description = description
+        self.accessTypes = accessTypes
+        if update_ids_from_dap and self.accessTypes:
+            for o in self.accessTypes:
+                DataBreakpointAccessType.update_dict_ids_from_dap(o)
+        self.canPersist = canPersist
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        dataId = self.dataId
+        description = self.description
+        accessTypes = self.accessTypes
+        canPersist = self.canPersist
+        dct = {
+            'dataId': dataId,
+            'description': description,
+        }
+        if accessTypes is not None:
+            dct['accessTypes'] = [DataBreakpointAccessType.update_dict_ids_to_dap(o) for o in accessTypes] if (update_ids_to_dap and accessTypes) else accessTypes
+        if canPersist is not None:
+            dct['canPersist'] = canPersist
+        dct.update(self.kwargs)
+        return dct
+
+
+@register
+class SetDataBreakpointsResponseBody(BaseSchema):
+    """
+    "body" of SetDataBreakpointsResponse
+
+    Note: automatically generated code. Do not edit manually.
+    """
+
+    __props__ = {
+        "breakpoints": {
+            "type": "array",
+            "items": {
+                "$ref": "#/definitions/Breakpoint"
+            },
+            "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument 'breakpoints' array."
+        }
+    }
+    __refs__ = set()
+
+    __slots__ = list(__props__.keys()) + ['kwargs']
+
+    def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs):  # noqa (update_ids_from_dap may be unused)
+        """
+        :param array breakpoints: Information about the data breakpoints. The array elements correspond to the elements of the input argument 'breakpoints' array.
+        """
+        self.breakpoints = breakpoints
+        if update_ids_from_dap and self.breakpoints:
+            for o in self.breakpoints:
+                Breakpoint.update_dict_ids_from_dap(o)
+        self.kwargs = kwargs
+
+
+    def to_dict(self, update_ids_to_dap=False):  # noqa (update_ids_to_dap may be unused)
+        breakpoints = self.breakpoints
+        dct = {
+            'breakpoints': [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints,
+        }
+        dct.update(self.kwargs)
+        return dct
+
+
 @register
 class ContinueResponseBody(BaseSchema):
     """


Test patch: