Skip to content

Commit dd24085

Browse files
authored
Top form eval (#58)
* Allow top extracting top form * Add 'cpt' mapping for evaluating current top form
1 parent ff6b4b4 commit dd24085

File tree

4 files changed

+25
-11
lines changed

4 files changed

+25
-11
lines changed

API.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,11 @@ Refactor the current file so the `(:require ...)` form is sorted.
167167
# acid.forms
168168
Forms extraction
169169

170-
## `acid.forms.get_form_boundaries()`
170+
## `acid.forms.get_form_boundaries([top])`
171171
Returns the coordinates for the boundaries of the current form
172172

173+
*top* **(boolean)**: if true, recursively searches for top level.
174+
173175

174176
**(table)** coordinates {from = {row,col}, to = {row,col}}
175177

lua/acid/features.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ features.eval_expr = function(mode, ns)
6262
payload.code = table.concat(form, "\n")
6363
elseif mode == "symbol" then
6464
payload.code = forms.symbol_under_cursor()
65+
elseif mode == "top" then
66+
local form = forms.form_under_cursor(true)
67+
payload.code = table.concat(form, "\n")
6568
else
6669
local lines = forms.form_from_motion(mode)
6770
payload.code = table.concat(lines, "\n")

lua/acid/forms.lua

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@
55
local forms = {}
66

77
--- Returns the coordinates for the boundaries of the current form
8+
-- @tparam[opt] boolean top if true, recursively searches for top level.
89
-- @treturn table coordinates {from = {row,col}, to = {row,col}}
9-
forms.get_form_boundaries = function()
10+
forms.get_form_boundaries = function(top)
11+
-- TODO Update once tree-sitter
1012
local to_filter, from_filter
1113
local curpos = vim.api.nvim_call_function("getcurpos", {})
1214
local last_parens = vim.api.nvim_call_function("strcharpart", {
1315
vim.api.nvim_call_function("getline", {curpos[2]}),
1416
curpos[3] - 1, 1
15-
})
17+
})
1618

1719
if last_parens == ")" then
1820
to_filter = "nc"
@@ -22,6 +24,11 @@ forms.get_form_boundaries = function()
2224
from_filter = "nbc"
2325
end
2426

27+
if top then
28+
to_filter = to_filter .. "r"
29+
from_filter = from_filter .. "r"
30+
end
31+
2532
local to = vim.api.nvim_call_function("searchpairpos", {"(", "", ")", to_filter})
2633
local from = vim.api.nvim_call_function("searchpairpos", {"(", "", ")", from_filter})
2734

plugin/acid.vim

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,15 @@ function! AcidJobHandler(id, data, stream)
7373
call luaeval('require("acid.nrepl").handle[_A[1]](_A[2], _A[3])', [a:stream, a:data, a:id])
7474
endfunction
7575

76-
map <Plug>(acid-go-to) <Cmd>lua require("acid.features").go_to()<CR>
77-
map <Plug>(acid-docs) <Cmd>lua require("acid.features").docs()<CR>
78-
map <Plug>(acid-eval-cmdline) <Cmd>call AcidSendEval("eval_cmdline")<CR>
79-
map <Plug>(acid-motion-op) <Cmd>set opfunc=AcidMotion<CR>g@
80-
map <Plug>(acid-eval-symbol) <Cmd>call AcidMotion("symbol")<CR>
81-
map <Plug>(acid-eval-visual) <Cmd>call AcidMotion("visual")<CR>
82-
map <Plug>(acid-eval-expr) <Cmd>lua require("acid.features").eval_expr()<CR>
83-
map <Plug>(acid-eval-print) <Cmd>call AcidSendEval("eval_print")<CR>
76+
map <Plug>(acid-go-to) <Cmd>lua require("acid.features").go_to()<CR>
77+
map <Plug>(acid-docs) <Cmd>lua require("acid.features").docs()<CR>
78+
map <Plug>(acid-eval-cmdline) <Cmd>call AcidSendEval("eval_cmdline")<CR>
79+
map <Plug>(acid-motion-op) <Cmd>set opfunc=AcidMotion<CR>g@
80+
map <Plug>(acid-eval-symbol) <Cmd>call AcidMotion("symbol")<CR>
81+
map <Plug>(acid-eval-visual) <Cmd>call AcidMotion("visual")<CR>
82+
map <Plug>(acid-eval-top-expr) <Cmd>lua require("acid.features").eval_expr("top")<CR>
83+
map <Plug>(acid-eval-expr) <Cmd>lua require("acid.features").eval_expr()<CR>
84+
map <Plug>(acid-eval-print) <Cmd>call AcidSendEval("eval_print")<CR>
8485
8586
map <Plug>(acid-virtualtext-clear-line) <Cmd>call luaeval("require('acid.middlewares.virtualtext').clear(_A)", line('.'))<CR>
8687
map <Plug>(acid-virtualtext-toggle) <Cmd>call luaeval("require('acid.middlewares.virtualtext').toggle()", v:null)<CR>
@@ -110,6 +111,7 @@ if !g:acid_no_default_keymappings
110111
autocmd FileType clojure nmap <buffer> <silent> cp <Plug>(acid-motion-op)
111112
autocmd FileType clojure vmap <buffer> <silent> cp <Plug>(acid-eval-visual)
112113
autocmd FileType clojure nmap <buffer> <silent> cps <Plug>(acid-eval-symbol)
114+
autocmd FileType clojure nmap <buffer> <silent> cpt <Plug>(acid-eval-top-expr)
113115
autocmd FileType clojure nmap <buffer> <silent> cpp <Plug>(acid-eval-expr)
114116
autocmd FileType clojure nmap <buffer> <silent> cqp <Plug>(acid-eval-print)
115117

0 commit comments

Comments
 (0)