Fix selection selects unevaluatable node

This commit is contained in:
Dmitry Vasilev
2023-10-13 11:49:14 +03:00
parent 6740490aa5
commit 794b9c70c9
2 changed files with 14 additions and 8 deletions

View File

@@ -374,16 +374,11 @@ const get_next_selection_state = (selection_state, frame, is_expand, index) => {
}
}
} else {
// TODO when collapsing, also check that node is evaluatable
// collapse
if(selection_state.node.children != null){
next_node =
selection_state.node.children.find(n =>
n.index <= index && n.index + n.length > index
)
??
// cursor not inside child but in whitespace
selection_state.node
const leaf = find_leaf(selection_state.node, index)
next_node = ancestry_inc(leaf, selection_state.node)
.findLast(n => !n.not_evaluatable && n != selection_state.node)
} else {
// no children, cannot collapse
next_node = selection_state.node

View File

@@ -2130,6 +2130,17 @@ const y = x()`
}
)
}),
test('eval_selection bug', () => {
const code = `{foo: 1}`
const i = test_initial_state(code)
const index = code.indexOf('1')
const moved = COMMANDS.move_cursor(i, index)
const selection = COMMANDS.eval_selection(moved, index, true).state
const selection2 = COMMANDS.eval_selection(selection, index, true).state
const selection3 = COMMANDS.eval_selection(selection2, index, false).state
assert_equal(selection3.selection_state.node.value, '1')
}),
test('find_call', () => {
const code = `