Resolve #16: Setting variable values

This commit is contained in:
Pavel Minaev 2018-01-24 09:41:46 -08:00
parent 56b4a8e68c
commit 359f7f8f96

View file

@ -307,6 +307,7 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel):
request,
supportsExceptionInfoRequest=True,
supportsConfigurationDoneRequest=True,
supportsSetVariable=True,
exceptionBreakpointFilters=[
{'filter': 'raised', 'label': 'Raised Exceptions'},
{'filter': 'uncaught', 'label': 'Uncaught Exceptions'},
@ -456,6 +457,29 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel):
self.send_response(request, variables=variables)
@async_handler
def on_setVariable(self, request, args):
vsc_var = int(args['variablesReference'])
pyd_var = self.var_map.to_pydevd(vsc_var)
# VSC gives us variablesReference to the parent of the variable being set, and
# variable name; but pydevd wants the ID (or rather path) of the variable itself.
pyd_var += (args['name'],)
vsc_var = self.var_map.to_vscode(pyd_var)
cmd_args = [str(s) for s in pyd_var] + [args['value']]
_, _, resp_args = yield self.pydevd_request(pydevd_comm.CMD_CHANGE_VARIABLE, '\t'.join(cmd_args))
xml = untangle.parse(resp_args).xml
xvar = xml.var
response = {
'type': unquote(xvar['type']),
'value': unquote(xvar['value']),
}
if bool(xvar['isContainer']):
response['variablesReference'] = vsc_var
self.send_response(request, **response)
@async_handler
def on_pause(self, request, args):
# TODO: docstring