Fix glp backward cycle and gl<Space> current-list scope
CI / cargo fmt --check (push) Successful in 16s
CI / cargo clippy (push) Successful in 21s
CI / cargo test (push) Successful in 37s
CI / cargo fmt --check (pull_request) Successful in 34s
CI / cargo clippy (pull_request) Successful in 36s
CI / cargo test (pull_request) Successful in 38s
CI / editor keymaps (push) Successful in 1m23s
CI / editor keymaps (pull_request) Successful in 1m31s

Two documented checkbox-list mappings did not match their spec:

- `glp` dispatched the same forward-only cycleCheckbox as `gln`, so it
  could never "cycle the checkbox state backward". Add `ops::cycle_state_back`
  and thread a `reverse` flag through the dispatcher and both clients.

- `gl<Space>` and `gL<Space>` both swept the whole buffer, making them
  identical. `gl<Space>` now passes the cursor position and the server
  scopes deletion to the contiguous list block under the cursor (current
  list, cascading into sublists); `gL<Space>` stays whole-buffer.

Adds Rust unit tests, plus behavioral and full-registration coverage for
the documented mapping surface in the Neovim and Vim keymap harnesses, and
a command-coverage suite mirroring the doc's command groups.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-30 13:56:28 -03:00
parent 93725501dc
commit 21ac9deb23
12 changed files with 1016 additions and 25 deletions
+16
View File
@@ -478,6 +478,13 @@ endfunction
function! nuwiki#commands#cycle_list_item() abort
call s:exec_pos('nuwiki.list.cycleCheckbox')
endfunction
" `glp` cycles backward — same command, `reverse` flag in the payload.
function! nuwiki#commands#cycle_list_item_back() abort
let l:p = s:cursor_position()
let l:args = [{ 'uri': l:p['textDocument']['uri'],
\ 'position': l:p['position'], 'reverse': v:true }]
call s:exec('nuwiki.list.cycleCheckbox', l:args)
endfunction
function! nuwiki#commands#reject_list_item() abort
call s:exec_pos('nuwiki.list.rejectCheckbox')
endfunction
@@ -631,7 +638,16 @@ endfunction
" §13.1 Cluster A — list rewriters.
" `gl<Space>` — remove done items from the current list only. Passing the
" cursor position scopes the server to the contiguous list block under it.
function! nuwiki#commands#list_remove_done() abort
let l:p = s:cursor_position()
let l:args = [{ 'uri': l:p['textDocument']['uri'], 'position': l:p['position'] }]
call s:exec('nuwiki.list.removeDone', l:args)
endfunction
" `gL<Space>` — remove done items across the whole buffer (no position).
function! nuwiki#commands#list_remove_done_all() abort
let l:args = [{ 'uri': s:buf_uri() }]
call s:exec('nuwiki.list.removeDone', l:args)
endfunction