Skip to content

Commit d051080

Browse files
authored
Fix issues (#40)
* #38: Add eval_print feature * #38: Make 'print' return errors and exceptions as well * #38: Substitute 'AcidInsertEval' for 'AcidSendEval' So multiple handlers could be used for the same code+ns parameter combination * #38: Add 'cqp' mapping for printing eval response * Fix bug with finding path * #38: fix ns not found
1 parent 1aabe6f commit d051080

File tree

5 files changed

+36
-6
lines changed

5 files changed

+36
-6
lines changed

API.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ code **(string)**: Clojure s-expression to be evaluated on the nrepl
6868
Defaults to current file's ns.
6969

7070

71+
## `acid.features.eval_print(code[, ns])`
72+
Evaluate the given code and print the result.
73+
74+
code **(string)**: Clojure s-expression to be evaluated on the nrepl
75+
76+
*ns* **(string)**: Namespace to be used when evaluating the code.
77+
Defaults to current file's ns.
78+
79+
7180
## `acid.features.eval_expr([mode[, ns]])`
7281
Evaluate the current form or the given motion.
7382

lua/acid/features.lua

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ features.eval_cmdline = function(code, ns)
3030
))
3131
end
3232

33+
--- Evaluate the given code and print the result.
34+
-- @tparam string code Clojure s-expression to be evaluated on the nrepl
35+
-- @tparam[opt] string ns Namespace to be used when evaluating the code.
36+
-- Defaults to current file's ns.
37+
features.eval_print = function(code, ns)
38+
acid.run(ops.eval{code = code, ns = ns}:with_handler(middlewares
39+
.print{}
40+
))
41+
end
42+
3343
--- Evaluate the current form or the given motion.
3444
-- The result will be shown on a virtualtext next to the current form
3545
-- and also stored on the clipboard.

lua/acid/middlewares/print.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ do_print.middleware = function(config)
1010
if data.value ~= nil then
1111
vim.api.nvim_out_write(data.value .. "\n")
1212
end
13+
if data.ex ~= nil then
14+
vim.api.nvim_err_writeln(data.ex)
15+
end
16+
if data.err ~= nil then
17+
vim.api.nvim_err_writeln(data.err)
18+
end
1319

1420
return middleware(data)
1521
end

plugin/acid.vim

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,19 @@ function! AcidMotion(mode)
3232
exec 'lua require("acid.features").eval_expr("'.a:mode.'")'
3333
endfunction
3434

35-
function! AcidInsertEval(...)
36-
let ns = a:0 >= 1 ? a:1 : "user"
35+
function! AcidSendEval(handler)
36+
let ns = AcidGetNs()
37+
if ns == ""
38+
let ns = "user"
39+
endif
3740
call inputsave()
3841
let code = input(ns."=> ")
3942
call inputrestore()
40-
call luaeval("require('acid.features').eval_cmdline(_A[1], _A[2])", [code, ns])
43+
call luaeval("require('acid.features')." . a:handler ."(_A[1], _A[2])", [code, ns])
4144
endfunction
4245

4346

47+
4448
augroup acid
4549
autocmd BufWritePost *.clj call s:require()
4650

@@ -54,10 +58,11 @@ augroup acid
5458

5559
au FileType clojure nmap <buffer> <silent> <C-]> <Cmd>lua require("acid.features").go_to()<CR>
5660
au FileType clojure nmap <buffer> <silent> K <Cmd>lua require("acid.features").docs()<CR>
57-
au FileType clojure nmap <buffer> <silent> <C-c>x <Cmd>call AcidInsertEval()<CR>
58-
au FileType clojure imap <buffer> <silent> <C-c>x <Cmd>call AcidInsertEval()<CR>
61+
au FileType clojure nmap <buffer> <silent> <C-c>x <Cmd>call AcidSendEval("eval_cmdline")<CR>
62+
au FileType clojure imap <buffer> <silent> <C-c>x <Cmd>call AcidSendEval("eval_cmdline")<CR>
5963
au FileType clojure map <buffer> <silent> cp <Cmd>set opfunc=AcidMotion<CR>g@
6064
au FileType clojure map <buffer> <silent> cpp <Cmd>lua require("acid.features").eval_expr()<CR>
65+
au FileType clojure map <buffer> <silent> cqp <Cmd>call AcidSendEval("eval_print")<CR>
6166
6267
au FileType clojure map <buffer> <silent> <C-c>ll <Cmd>call luaeval("require('acid.middlewares.virtualtext').clear(_A)", line('.'))<Cr>
6368
au FileType clojure map <buffer> <silent> <C-c>ln <Cmd>call luaeval("require('acid.middlewares.virtualtext').toggle()", v:null)<Cr>

rplugin/python3/acid/pure/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def path_to_ns(path, stop_paths=None, base_files=None):
4141
path[-1] = path[-1].split('.')[0]
4242
for ix, _ in enumerate(path):
4343
for bf in base_files:
44-
if os.path.exists(os.path.join(*["/", *path[:ix], bp])):
44+
if os.path.exists(os.path.join(*["/", *path[:ix], bf])):
4545
raw_path_list = path[ix+1:]
4646
break
4747

0 commit comments

Comments
 (0)