mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 13:04:30 -08:00
Fix selection selects unevaluatable node
This commit is contained in:
11
src/cmd.js
11
src/cmd.js
@@ -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
|
||||
|
||||
11
test/test.js
11
test/test.js
@@ -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 = `
|
||||
|
||||
Reference in New Issue
Block a user