From 97ee17f13261bb78e33873291e2ba5939344d5fd Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Mon, 19 Mar 2018 20:49:29 -0700 Subject: [PATCH] Implement setExpression handler --- ptvsd/wrapper.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/ptvsd/wrapper.py b/ptvsd/wrapper.py index 9e2f148f..3ca01b9d 100644 --- a/ptvsd/wrapper.py +++ b/ptvsd/wrapper.py @@ -1015,6 +1015,36 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): safe_repr_provider.convert_to_hex = False self.send_response(request, **response) + @async_handler + def on_setExpression(self, request, args): + # TODO: docstring + + vsc_fid = int(args['frameId']) + pyd_tid, pyd_fid = self.frame_map.to_pydevd(vsc_fid) + + safe_repr_provider.set_format( + self._extract_format(args)) + + lhs_expr = args.get('expression') + rhs_expr = args.get('value') + expr = '%s = %s' % (lhs_expr, rhs_expr) + + # pydevd message format doesn't permit tabs in expressions + expr = expr.replace('\t', ' ') + + cmd_args = (pyd_tid, pyd_fid, 'LOCAL', expr, '1') + msg = '\t'.join(str(s) for s in cmd_args) + _, _, _ = yield self.pydevd_request( + pydevd_comm.CMD_EXEC_EXPRESSION, + msg) + + # Reset hex format since this is per request. + safe_repr_provider.convert_to_hex = False + # Return 'None' here, VS will call getVariables to retrieve + # updated values anyway. Doing eval on the left-hand-side + # expression may have side-effects + self.send_response(request, value=None) + @async_handler def on_pause(self, request, args): # TODO: docstring