From 2cbad7209abcb142a8bc015a1fb95551d349ea1a Mon Sep 17 00:00:00 2001 From: Jeff Rose <rosejn@gmail.com> Date: Thu, 1 Jul 2021 15:03:15 -0600 Subject: [PATCH 1/3] Updating repl cmdline to current recommended form and making it interactive by default. --- autoload/jack_in.vim | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/autoload/jack_in.vim b/autoload/jack_in.vim index c122c48..abb813b 100644 --- a/autoload/jack_in.vim +++ b/autoload/jack_in.vim @@ -66,18 +66,23 @@ endfunction function! jack_in#clj_cmd(...) let l:clj_string = 'clj' - let l:deps_map = '{:deps {nrepl/nrepl {:mvn/version "0.7.0"} ' - let l:cider_opts = '-e "(require ''nrepl.cmdline) (nrepl.cmdline/-main \"--middleware\" \"[' + let l:main_fn = '-m nrepl.cmdline' + let l:interactive = '--interactive' + + let l:deps = '-Sdeps ''{:deps {nrepl/nrepl {:mvn/version "0.7.0"} ' + let l:cider_opts = '--middleware ''[' for [dep, inj] in items(g:jack_in_injections) - let l:deps_map .= dep . ' {:mvn/version "' . inj['version'] . '"} ' - let l:cider_opts .= ' '.inj['middleware'] + let l:deps .= dep . ' {:mvn/version "' . inj['version'] . '"} ' + let l:cider_opts .= ' "'.inj['middleware'] . '"' endfor - let l:deps_map .= '}}' - let l:cider_opts .= ']\")"' + let l:deps .= '}}''' + let l:cider_opts .= ']''' + + let l:cmd = l:clj_string . ' ' . l:deps . ' ' . l:main_fn . ' ' . l:cider_opts . ' ' . l:interactive - return l:clj_string . ' -Sdeps ''' . l:deps_map . ''' ' . join(a:000, ' ') . ' ' . l:cider_opts . ' ' + return l:cmd endfunction function! jack_in#clj(is_bg, ...) From 4ed869911205b8e5e185e9456a80fa4990b2de09 Mon Sep 17 00:00:00 2001 From: Jeff Rose <rosejn@gmail.com> Date: Fri, 2 Jul 2021 09:53:58 -0600 Subject: [PATCH 2/3] Adding a Cljs command that starts up shadow cljs with the standard command. --- autoload/jack_in.vim | 13 +++++++++++++ plugin/jack_in.vim | 1 + 2 files changed, 14 insertions(+) diff --git a/autoload/jack_in.vim b/autoload/jack_in.vim index abb813b..40d34a8 100644 --- a/autoload/jack_in.vim +++ b/autoload/jack_in.vim @@ -88,3 +88,16 @@ endfunction function! jack_in#clj(is_bg, ...) call s:RunRepl(call(function('jack_in#clj_cmd'), a:000), a:is_bg) endfunction + + +function! jack_in#cljs_cmd(...) + let l:cljs_string = 'npx shadow-cljs watch app' + + return l:cljs_string +endfunction + +function! jack_in#cljs(is_bg, ...) + call s:RunRepl(call(function('jack_in#cljs_cmd'), a:000), a:is_bg) +endfunction + + diff --git a/plugin/jack_in.vim b/plugin/jack_in.vim index 4b1d892..e9719c9 100644 --- a/plugin/jack_in.vim +++ b/plugin/jack_in.vim @@ -18,3 +18,4 @@ let g:jack_in_injections = command! -bang -nargs=* Boot call jack_in#boot(<bang>0,<q-args>) command! -bang -nargs=* Lein call jack_in#lein(<bang>0,<q-args>) command! -bang -nargs=* Clj call jack_in#clj(<bang>0,<q-args>) +command! -bang -nargs=* Cljs call jack_in#cljs(<bang>0,<q-args>) From e4f37ea4d8073e1d00ed54c53a1caf1a7f140a01 Mon Sep 17 00:00:00 2001 From: Jeff Rose <rosejn@gmail.com> Date: Thu, 16 Dec 2021 16:27:47 -0500 Subject: [PATCH 3/3] using dev alias --- autoload/jack_in.vim | 123 ++++++++++++++++++++++--------------------- plugin/jack_in.vim | 11 ++-- 2 files changed, 71 insertions(+), 63 deletions(-) diff --git a/autoload/jack_in.vim b/autoload/jack_in.vim index 40d34a8..d7c274c 100644 --- a/autoload/jack_in.vim +++ b/autoload/jack_in.vim @@ -1,3 +1,17 @@ +" Append a window to the right if there is only one window currently, +" and add it to the bottom right if there are 2 or more. +function! s:AppendWin() + let l:window_count winnr('$') + if l:window_count == 1 + vsplit + wincmd l + else + wincmd l + split + endif + enew +endfunction + function! s:warn(str) abort echohl WarningMsg echomsg a:str @@ -5,71 +19,67 @@ function! s:warn(str) abort let v:warningmsg = a:str endfunction -function! s:RunRepl(cmd, is_bg) abort - if exists(':Start') == 2 - execute 'Start' . (a:is_bg ? '!' : '') a:cmd +function! s:FindBufName(name, num) + let l:buf_name = a:name . '_' . a:num + if bufexists(l:buf_name) + let l:num = a:num + 1 + return s:FindBufName(a:name, l:num) else - call s:warn('dispatch.vim not installed, please install it.') - if has('nvim') - call s:warn('neovim detected, falling back on termopen()') - tabnew - call termopen(a:cmd) - tabprevious - endif + return l:buf_name endif endfunction -function! jack_in#boot_cmd(...) - let l:boot_string = 'boot -x -i "(require ''cider.tasks)"' +function! s:RunRepl(name, cmd, is_bg) abort + call AppendWin() + Rooter + call termopen(a:cmd) + let l:buf_name = s:FindBufName(a:name, 0) + execute "file" l:buf_name +endfunction + +function! jack_in#clj_cmd(...) + let l:clj_string = 'clojure -X:dev' + let l:main_fn = '' + let l:interactive = '' + + let l:deps = '-Sdeps '' {:deps {nrepl/nrepl {:mvn/version "0.8.3"} ' + let l:cider_opts = '--middleware ''[' + for [dep, inj] in items(g:jack_in_injections) - let l:boot_string .= printf(' -d %s:%s', dep, inj['version']) - endfor - let l:boot_string .= ' cider.tasks/add-middleware' - for inj in values(g:jack_in_injections) - let l:boot_string .= ' -m '.inj['middleware'] + let l:deps .= dep . ' {:mvn/version "' . inj['version'] . '"} ' + let l:cider_opts .= ' "'.inj['middleware'] . '"' endfor - if a:0 > 0 && a:1 != '' - let l:boot_task = join(a:000, ' ') - else - let l:boot_task = g:default_boot_task - endif - return l:boot_string.' '.l:boot_task + + let l:deps .= '}}''' + let l:cider_opts .= ']''' + + "let l:cmd = l:clj_string . ' ' . l:deps . ' ' . l:main_fn . ' ' . l:cider_opts . ' ' . l:interactive + let l:cmd = l:clj_string + return l:cmd endfunction -function! jack_in#boot(is_bg,...) - call s:RunRepl(call(function('jack_in#boot_cmd'), a:000), a:is_bg) +function! jack_in#clj(is_bg, ...) + call s:RunRepl("clj", call(function('jack_in#clj_cmd'), a:000), a:is_bg) endfunction -function! jack_in#lein_cmd(...) - let l:lein_string = 'lein' - for [dep, inj] in items(g:jack_in_injections) - let l:dep_vector = printf('''[%s "%s"]''', dep, inj['version']) - if !get(inj, 'lein_plugin') - let l:lein_string .= ' update-in :dependencies conj '.l:dep_vector.' --' - let l:lein_string .= ' update-in :repl-options:nrepl-middleware conj '.inj['middleware'].' --' - else - let l:lein_string .= ' update-in :plugins conj '.l:dep_vector.' --' - endif - endfor - if a:0 > 0 && a:1 != '' - let l:lein_task = join(a:000, ' ') - else - let l:lein_task = g:default_lein_task - endif - return l:lein_string.' '.l:lein_task +function! jack_in#shadow_cmd(...) + let l:shadow_string = 'npx shadow-cljs watch app' + + return l:shadow_string endfunction -function! jack_in#lein(is_bg, ...) - call s:RunRepl(call(function('jack_in#lein_cmd'), a:000), a:is_bg) +function! jack_in#shadow(is_bg, ...) + call s:RunRepl("shadow", call(function('jack_in#shadow_cmd'), a:000), a:is_bg) endfunction -function! jack_in#clj_cmd(...) - let l:clj_string = 'clj' - let l:main_fn = '-m nrepl.cmdline' - let l:interactive = '--interactive' - let l:deps = '-Sdeps ''{:deps {nrepl/nrepl {:mvn/version "0.7.0"} ' +function! jack_in#cljs_cmd(...) + let l:clj_string = "clojure -M:cljs:dev " + let l:main_fn = '' + let l:interactive = '' + + let l:deps = '-Sdeps '' {:deps {nrepl/nrepl {:mvn/version "0.8.3"} ' let l:cider_opts = '--middleware ''[' for [dep, inj] in items(g:jack_in_injections) @@ -80,24 +90,17 @@ function! jack_in#clj_cmd(...) let l:deps .= '}}''' let l:cider_opts .= ']''' - let l:cmd = l:clj_string . ' ' . l:deps . ' ' . l:main_fn . ' ' . l:cider_opts . ' ' . l:interactive + let l:eval = "--eval \"(require \'shadow-repl)(shadow-repl/start\!)\"" + + let l:cmd = l:clj_string . ' ' . l:eval return l:cmd -endfunction -function! jack_in#clj(is_bg, ...) - call s:RunRepl(call(function('jack_in#clj_cmd'), a:000), a:is_bg) endfunction -function! jack_in#cljs_cmd(...) - let l:cljs_string = 'npx shadow-cljs watch app' - - return l:cljs_string -endfunction - function! jack_in#cljs(is_bg, ...) - call s:RunRepl(call(function('jack_in#cljs_cmd'), a:000), a:is_bg) + call s:RunRepl("cljs", call(function('jack_in#cljs_cmd'), a:000), a:is_bg) endfunction diff --git a/plugin/jack_in.vim b/plugin/jack_in.vim index e9719c9..5654460 100644 --- a/plugin/jack_in.vim +++ b/plugin/jack_in.vim @@ -6,16 +6,21 @@ let g:loaded_jack_in = 1 let g:default_lein_task = 'repl' let g:default_boot_task = 'repl' -let g:jack_in_injections = - \ {'cider/cider-nrepl': +let g:jack_in_injections = {'cider/cider-nrepl': \ {'version': '0.25.2', \ 'middleware': 'cider.nrepl/cider-middleware', \ 'lein_plugin': 1}, + \ 'thheller/shadow-cljs': + \ {'version': '2.15.1', + \ 'middleware': 'shadow.cljs.devtools.server.nrepl/middleware'}, \ 'refactor-nrepl/refactor-nrepl': \ {'version': '2.5.0', - \ 'middleware': 'refactor-nrepl.middleware/wrap-refactor'}} + \ 'middleware': 'refactor-nrepl.middleware/wrap-refactor'} + \} command! -bang -nargs=* Boot call jack_in#boot(<bang>0,<q-args>) command! -bang -nargs=* Lein call jack_in#lein(<bang>0,<q-args>) command! -bang -nargs=* Clj call jack_in#clj(<bang>0,<q-args>) +command! -bang -nargs=* Shadow call jack_in#shadow(<bang>0,<q-args>) command! -bang -nargs=* Cljs call jack_in#cljs(<bang>0,<q-args>) +