From 05a43b617f27d54bc73c4c8cdcb820482449540d Mon Sep 17 00:00:00 2001 From: Dmitry Vasilev Date: Sat, 10 Jun 2023 23:03:17 +0300 Subject: [PATCH] fix display console.log args when navigating logs view --- src/calltree.js | 10 ++++++++-- src/cmd.js | 39 ++++++++++++++++++++++++++++----------- src/effects.js | 8 -------- test/test.js | 24 ++++++++++++------------ 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/calltree.js b/src/calltree.js index 54c8e09..88f628a 100644 --- a/src/calltree.js +++ b/src/calltree.js @@ -713,8 +713,11 @@ const select_return_value = state => { selection_state: { node, initial_is_expand: true, + }, + value_explorer: { + index: node.index + node.length, result: result_node.result, - } + }, }, effects: {type: 'set_focus'} } @@ -755,8 +758,11 @@ const select_arguments = (state, with_focus = true) => { selection_state: { node, initial_is_expand: true, + }, + value_explorer: { + index: node.index + node.length, result, - } + }, }, effects: with_focus ? {type: 'set_focus'} diff --git a/src/cmd.js b/src/cmd.js index 9ced303..1eb9846 100644 --- a/src/cmd.js +++ b/src/cmd.js @@ -453,16 +453,18 @@ const get_next_selection_state = (selection_state, frame, is_expand, index) => { export const selection = (selection_state, frame, is_expand, index) => { const leaf = find_leaf(frame, index) if(leaf == null) { - return { - ok: false, - message: 'out of scope', + return { + selection_state: { + ok: false, + message: 'out of scope', + } } } const next_selection_state = get_next_selection_state(selection_state, frame, is_expand, index) if(!next_selection_state.ok) { - return next_selection_state + return {selection_state: next_selection_state} } const {ok, message} = can_evaluate_node(frame, next_selection_state.node) @@ -470,9 +472,11 @@ export const selection = (selection_state, frame, is_expand, index) => { const node = find_node(frame, n => is_eq(n, next_selection_state.node)) if(node.result == null) { return { - ...next_selection_state, - ok: false, - message: 'expression was not reached during program execution', + selection_state: { + ...next_selection_state, + ok: false, + message: 'expression was not reached during program execution', + } } } else { let result @@ -482,10 +486,15 @@ export const selection = (selection_state, frame, is_expand, index) => { const error_node = find_error_origin_node(node) result = error_node.result } - return {...next_selection_state, ok: true, result} + return { + selection_state: {...next_selection_state, ok: true}, + result + } } } else { - return {...next_selection_state, ok: false, message} + return { + selection_state: {...next_selection_state, ok: false, message} + } } } @@ -495,14 +504,22 @@ const eval_selection = (state, index, is_expand) => { return validate_result } - const selection_state = selection( + const {selection_state, result} = selection( state.selection_state, active_frame(state), is_expand, index ) - const nextstate = {...state, selection_state} + const nextstate = {...state, + selection_state, + value_explorer: selection_state.ok + ? { + index: selection_state.node.index + selection_state.node.length, + result, + } + : null + } if(!selection_state.ok) { return {state: nextstate, effects: {type: 'set_status', args: [selection_state.message]}} diff --git a/src/effects.js b/src/effects.js index 6b1c9f5..57373bf 100644 --- a/src/effects.js +++ b/src/effects.js @@ -278,14 +278,6 @@ export const render_common_side_effects = (prev, next, command, ui) => { } } - const selresult = next.selection_state?.result - if(selresult != null && prev.selection_state?.result != selresult) { - const node = next.selection_state.node - ui.editor.embed_value_explorer({ - index: node.index + node.length, - result: next.selection_state.result, - }) - } // Value explorer if(prev.value_explorer != next.value_explorer) { diff --git a/test/test.js b/test/test.js index cd6efc7..e108ad9 100644 --- a/test/test.js +++ b/test/test.js @@ -1952,15 +1952,15 @@ const y = x()` ` const s0 = test_initial_state(code) const s1 = COMMANDS.eval_selection(s0, code.indexOf('2'), true).state - assert_equal(s1.selection_state.result.value, 2) + assert_equal(s1.value_explorer.result.value, 2) // Expand selection const s2 = COMMANDS.eval_selection(s1, code.indexOf('2'), true).state - assert_equal(s2.selection_state.result.value, 4) + assert_equal(s2.value_explorer.result.value, 4) const s3 = COMMANDS.eval_selection(s2, code.indexOf('2'), true).state // Selection is not expanded beyond expression to statement - assert_equal(s3.selection_state.result.value, 4) + assert_equal(s3.value_explorer.result.value, 4) assert_equal(s3.selection_state.node.index, code.indexOf('2')) assert_equal(s3.selection_state.node.length, 3) @@ -2101,7 +2101,7 @@ const y = x()` const s1 = test_initial_state(code) const s2 = COMMANDS.calltree.arrow_right(s1) const {state: s3, effects} = COMMANDS.calltree.select_return_value(s2) - assert_equal(s3.selection_state.result.value, 1) + assert_equal(s3.value_explorer.result.value, 1) assert_equal(s3.selection_state.node.index, code.indexOf('x()')) assert_equal(current_cursor_position(s3), code.indexOf('x()')) assert_equal(effects, {type: 'set_focus'}) @@ -2117,7 +2117,7 @@ const y = x()` // Expand const s2 = COMMANDS.calltree.arrow_right(s2_0) const {state: s3, effects} = COMMANDS.calltree.select_return_value(s2) - assert_equal(s3.selection_state.result.value, 1) + assert_equal(s3.value_explorer.result.value, 1) assert_equal(s3.selection_state.node.index, code.indexOf('1')) assert_equal(current_cursor_position(s3), code.indexOf('1')) assert_equal(effects, {type: 'set_focus'}) @@ -2133,7 +2133,7 @@ const y = x()` // Expand const s2 = COMMANDS.calltree.arrow_right(s2_0) const {state: s3, effects} = COMMANDS.calltree.select_return_value(s2) - assert_equal(s3.selection_state.result.value, 1) + assert_equal(s3.value_explorer.result.value, 1) assert_equal(s3.selection_state.node.index, code.indexOf('1')) assert_equal(current_cursor_position(s3), code.indexOf('1')) assert_equal(effects, {type: 'set_focus'}) @@ -2162,7 +2162,7 @@ const y = x()` // Select map const s2 = COMMANDS.calltree.arrow_right(s1) const {state: s3, effects} = COMMANDS.calltree.select_return_value(s2) - assert_equal(s3.selection_state.result.value, [1, 1, 1]) + assert_equal(s3.value_explorer.result.value, [1, 1, 1]) }), test('select_return_value new call', () => { @@ -2170,7 +2170,7 @@ const y = x()` const s1 = test_initial_state(code) const s2 = COMMANDS.calltree.arrow_right(s1) const {state: s3, effects} = COMMANDS.calltree.select_return_value(s2) - assert_equal(s3.selection_state.result.value, '1') + assert_equal(s3.value_explorer.result.value, '1') }), test('select_arguments not_expanded', () => { @@ -2182,7 +2182,7 @@ const y = x()` // focus call const s2 = COMMANDS.calltree.arrow_right(s1) const s3 = COMMANDS.calltree.select_arguments(s2) - assert_equal(s3.state.selection_state.result, {ok: true, value: [1]}) + assert_equal(s3.state.value_explorer.result, {ok: true, value: [1]}) assert_equal(current_cursor_position(s3.state), code.indexOf('(1)')) assert_equal(s3.effects, {type: 'set_focus'}) }), @@ -2198,7 +2198,7 @@ const y = x()` // expand call const s2 = COMMANDS.calltree.arrow_right(s2_0) const s3 = COMMANDS.calltree.select_arguments(s2) - assert_equal(s3.state.selection_state.result, {ok: true, value: {a: 1}}) + assert_equal(s3.state.value_explorer.result, {ok: true, value: {a: 1}}) assert_equal(current_cursor_position(s3.state), code.indexOf('(a)')) assert_equal(s3.effects, {type: 'set_focus'}) }), @@ -2208,7 +2208,7 @@ const y = x()` const s1 = test_initial_state(code) const s2 = COMMANDS.calltree.arrow_right(s1) const s3 = COMMANDS.calltree.select_arguments(s2).state - assert_equal(s3.selection_state.result, {ok: true, value: ["1"]}) + assert_equal(s3.value_explorer.result, {ok: true, value: ["1"]}) }), test('move_cursor arguments', () => { @@ -2567,7 +2567,7 @@ const y = x()` assert_equal(i.logs.logs[0].args, [10]) const state = COMMANDS.calltree.navigate_logs_position(i, 0) assert_equal(state.logs.log_position, 0) - assert_equal(state.selection_state.result.value, [10]) + assert_equal(state.value_explorer.result.value, [10]) assert_equal(current_cursor_position(state), code.indexOf('(x)')) }),