Skip to content

Commit

Permalink
Don't show None when evaluating in repl. Fixes microsoft#678
Browse files Browse the repository at this point in the history
  • Loading branch information
fabioz committed Dec 16, 2021
1 parent 83b18ef commit 986cc00
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 31 deletions.
29 changes: 18 additions & 11 deletions src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py
Original file line number Diff line number Diff line change
Expand Up @@ -1234,8 +1234,6 @@ def __create_frame():
_evaluate_response(py_db, request, result='', error_message='Thread id: %s is not current thread id.' % (thread_id,))
return

variable = frame_tracker.obtain_as_variable(expression, eval_result, frame=frame)

safe_repr_custom_attrs = {}
if context == 'clipboard':
safe_repr_custom_attrs = dict(
Expand All @@ -1245,16 +1243,25 @@ def __create_frame():
maxother_inner=2 ** 64,
)

var_data = variable.get_var_data(fmt=fmt, **safe_repr_custom_attrs)
if context == 'repl' and eval_result is None:
# We don't want "None" to appear when typing in the repl.
body = pydevd_schema.EvaluateResponseBody(
result=None,
variablesReference=0,
)

body = pydevd_schema.EvaluateResponseBody(
result=var_data['value'],
variablesReference=var_data.get('variablesReference', 0),
type=var_data.get('type'),
presentationHint=var_data.get('presentationHint'),
namedVariables=var_data.get('namedVariables'),
indexedVariables=var_data.get('indexedVariables'),
)
else:
variable = frame_tracker.obtain_as_variable(expression, eval_result, frame=frame)
var_data = variable.get_var_data(fmt=fmt, **safe_repr_custom_attrs)

body = pydevd_schema.EvaluateResponseBody(
result=var_data['value'],
variablesReference=var_data.get('variablesReference', 0),
type=var_data.get('type'),
presentationHint=var_data.get('presentationHint'),
namedVariables=var_data.get('namedVariables'),
indexedVariables=var_data.get('indexedVariables'),
)
variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body})
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))

Expand Down
41 changes: 21 additions & 20 deletions src/debugpy/_vendored/pydevd/tests_python/test_debugger_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,8 @@ def evaluate(self, expression, frameId=None, context=None, fmt=None, success=Tru
'''
:param wait_for_response:
If True returns the response, otherwise returns the request.
:returns EvaluateResponse
'''
eval_request = self.write_request(
pydevd_schema.EvaluateRequest(pydevd_schema.EvaluateArguments(
Expand Down Expand Up @@ -1926,26 +1928,25 @@ def test_evaluate_no_name_mangling(case_setup):
json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id)

# Check eval with a properly indented block
json_facade.evaluate(
'x = "_"',
frameId=json_hit.frame_id,
context="repl",
)
json_facade.evaluate(
'x',
frameId=json_hit.frame_id,
context="repl",
)
json_facade.evaluate(
'y = "__"',
frameId=json_hit.frame_id,
context="repl",
)
json_facade.evaluate(
'y',
frameId=json_hit.frame_id,
context="repl",
)
evaluate_response = json_facade.evaluate(
'x = "_"', frameId=json_hit.frame_id, context="repl")
assert not evaluate_response.body.result

evaluate_response = json_facade.evaluate(
'x', frameId=json_hit.frame_id, context="repl")
assert evaluate_response.body.result == "'_'"

evaluate_response = json_facade.evaluate(
'y = "__"', frameId=json_hit.frame_id, context="repl")
assert not evaluate_response.body.result

evaluate_response = json_facade.evaluate(
'y', frameId=json_hit.frame_id, context="repl")
assert evaluate_response.body.result == "'__'"

evaluate_response = json_facade.evaluate(
'None', json_hit.frame_id, context='repl')
assert not evaluate_response.body.result

json_facade.write_continue()
writer.finished_ok = True
Expand Down

0 comments on commit 986cc00

Please sign in to comment.