From bf1af1e582d5aabfe0c78fe6e161028fa73ab713 Mon Sep 17 00:00:00 2001 From: Cyper Date: Wed, 10 Jun 2020 15:16:10 +0800 Subject: [PATCH 1/6] add support for neovim Notice that on vim 8.0+, `job_status` returns` "run", "fail" or "dead". So I consider the `job_status` check branch is a bug. Tested on `nvim v0.5.0-6ca7ebb` --- autoload/jsdoc.vim | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/autoload/jsdoc.vim b/autoload/jsdoc.vim index bfbf1e0..76aee19 100644 --- a/autoload/jsdoc.vim +++ b/autoload/jsdoc.vim @@ -106,20 +106,35 @@ function! s:exit_callback(msg) abort endfunction function! s:vim.execute(cmd, lines, start_lineno, is_method, cb, ex_cb) dict - if exists('s:job') && job_status(s:job) != 'stop' - call job_stop(s:job) - endif + if has('nvim') + if exists('s:job') && jobwait([s:job], 0)[0] == -1 + call jobstop(s:job) + endif - let s:job = job_start(a:cmd, { - \ 'callback': {_, m -> a:cb(m, a:start_lineno, a:is_method)}, - \ 'exit_cb': {_, m -> a:ex_cb(m)}, - \ 'in_mode': 'nl', - \ }) + let s:job = jobstart(a:cmd, { + \ 'on_stdout': {_, m -> a:cb(m, a:start_lineno, a:is_method)}, + \ 'on_exit': {_, m -> a:ex_cb(m)}, + \ 'stdout_buffered': 1, + \ }) + + call chansend(s:job, a:lines) + call chanclose(s:job, 'stdin') + elseif v:version >= 800 && !has('nvim') + if exists('s:job') && job_status(s:job) != 'dead' + call job_stop(s:job) + endif - let channel = job_getchannel(s:job) - if ch_status(channel) ==# 'open' - call ch_sendraw(channel, a:lines) - call ch_close_in(channel) + let s:job = job_start(a:cmd, { + \ 'callback': {_, m -> a:cb(m, a:start_lineno, a:is_method)}, + \ 'exit_cb': {_, m -> a:ex_cb(m)}, + \ 'in_mode': 'nl', + \ }) + + let channel = job_getchannel(s:job) + if ch_status(channel) ==# 'open' + call ch_sendraw(channel, a:lines) + call ch_close_in(channel) + endif endif endfunction From 88c42fe88b60e1d42b316ffd70109b75d8fb3f51 Mon Sep 17 00:00:00 2001 From: Cyper Date: Mon, 15 Jun 2020 11:01:05 +0800 Subject: [PATCH 2/6] Add test for neovim --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 21a72f2..a810a46 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,3 +27,12 @@ jobs: script: - cd $HOME/build/heavenshell/vim-jsdoc/tests - VIM_EXE=$HOME/bin/vim/bin/vim ./run.sh + + - env: ENV="Neovim" + install: + - mkdir -p ~/tmp/nvim/bin + - curl -L https://github.com/neovim/neovim/releases/download/v0.4.3/nvim.appimage -o ~/tmp/nvim/bin/nvim + - chmod u+x ~/tmp/nvim/bin/nvim + + script: + - VIM_EXE=$HOME/tmp/nvim/bin/nvim ./run.sh From 33220060240df93fdf5940c0f49a5ace93a9e16e Mon Sep 17 00:00:00 2001 From: Cyper Date: Mon, 15 Jun 2020 11:07:53 +0800 Subject: [PATCH 3/6] Fix travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index a810a46..def5bf4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,4 +35,5 @@ jobs: - chmod u+x ~/tmp/nvim/bin/nvim script: + - cd $HOME/build/heavenshell/vim-jsdoc/tests - VIM_EXE=$HOME/tmp/nvim/bin/nvim ./run.sh From 6931780a004732096d013b61a39d4d5424742b9f Mon Sep 17 00:00:00 2001 From: Cyper Date: Mon, 15 Jun 2020 13:04:49 +0800 Subject: [PATCH 4/6] Fix travis --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index def5bf4..7f06348 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,6 +33,10 @@ jobs: - mkdir -p ~/tmp/nvim/bin - curl -L https://github.com/neovim/neovim/releases/download/v0.4.3/nvim.appimage -o ~/tmp/nvim/bin/nvim - chmod u+x ~/tmp/nvim/bin/nvim + + before_script: + - cd $HOME/build/heavenshell/vim-jsdoc + - make install script: - cd $HOME/build/heavenshell/vim-jsdoc/tests From c5f764d717f9452670075721aa781fa0cfc10448 Mon Sep 17 00:00:00 2001 From: vimark1 Date: Fri, 26 Jun 2020 22:50:10 +1200 Subject: [PATCH 5/6] download test dependency if needed --- tests/run.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/run.sh b/tests/run.sh index 292723f..70d40c5 100755 --- a/tests/run.sh +++ b/tests/run.sh @@ -1,6 +1,11 @@ #!/bin/sh : "${VIM_EXE:=vim}" +# download test dependency if needed +if [[ ! -d "./vader.vim" ]]; then + git clone https://github.com/junegunn/vader.vim.git vader.vim +fi + # If nvim is available in PATH, then we prefer to use nvim # since it works better with nodemon if hash nvim 2>/dev/null ; then From 56ca8ad3d2602159875a8597eef3360da58cc2b1 Mon Sep 17 00:00:00 2001 From: vimark1 Date: Fri, 26 Jun 2020 22:50:33 +1200 Subject: [PATCH 6/6] fix jsdocFormat in neovim --- autoload/jsdoc.vim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/autoload/jsdoc.vim b/autoload/jsdoc.vim index 76aee19..85ce5f4 100644 --- a/autoload/jsdoc.vim +++ b/autoload/jsdoc.vim @@ -93,7 +93,12 @@ function! s:exit_callback(msg) abort if len(s:results) let view = winsaveview() silent execute '% delete' - call setline(1, s:results) + if has('nvim') + " the -2 slicing is required to remove an extra new line + call setline(1, s:results[0][:-2]) + else + call setline(1, s:results) + endif call winrestview(view) endif