diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-11-11 01:54:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-11 01:54:32 +0100 |
commit | b6a603fe515ee1cd554a8c4151286b26209a467b (patch) | |
tree | f40fa782d89c304045ebb7cb4184f0ac52204deb /runtime/autoload/provider | |
parent | a2fdd0a72f9d1f72f2e49e80719902a6f555454e (diff) | |
parent | eed10f7e23a7ec27e5ba147379fb6acbfcb10c20 (diff) | |
download | rneovim-b6a603fe515ee1cd554a8c4151286b26209a467b.tar.gz rneovim-b6a603fe515ee1cd554a8c4151286b26209a467b.tar.bz2 rneovim-b6a603fe515ee1cd554a8c4151286b26209a467b.zip |
Merge #7458 'remote: add node host'
Diffstat (limited to 'runtime/autoload/provider')
-rw-r--r-- | runtime/autoload/provider/node.vim | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/runtime/autoload/provider/node.vim b/runtime/autoload/provider/node.vim new file mode 100644 index 0000000000..ce2740e813 --- /dev/null +++ b/runtime/autoload/provider/node.vim @@ -0,0 +1,76 @@ +if exists('g:loaded_node_provider') + finish +endif +let g:loaded_node_provider = 1 + +let s:job_opts = {'rpc': v:true, 'on_stderr': function('provider#stderr_collector')} + +function! provider#node#Detect() abort + return exepath('neovim-node-host') +endfunction + +function! provider#node#Prog() + return s:prog +endfunction + +function! provider#node#Require(host) abort + if s:err != '' + echoerr s:err + return + endif + + let args = ['node'] + + if !empty($NVIM_NODE_HOST_DEBUG) + call add(args, '--inspect-brk') + endif + + call add(args , provider#node#Prog()) + + try + let channel_id = jobstart(args, s:job_opts) + if rpcrequest(channel_id, 'poll') ==# 'ok' + return channel_id + endif + catch + echomsg v:throwpoint + echomsg v:exception + for row in provider#get_stderr(channel_id) + echomsg row + endfor + endtry + finally + call provider#clear_stderr(channel_id) + endtry + throw remote#host#LoadErrorForHost(a:host.orig_name, '$NVIM_NODE_LOG_FILE') +endfunction + +function! provider#node#Call(method, args) + if s:err != '' + echoerr s:err + return + endif + + if !exists('s:host') + try + let s:host = remote#host#Require('node') + catch + let s:err = v:exception + echohl WarningMsg + echomsg v:exception + echohl None + return + endtry + endif + return call('rpcrequest', insert(insert(a:args, 'node_'.a:method), s:host)) +endfunction + + +let s:err = '' +let s:prog = provider#node#Detect() + +if empty(s:prog) + let s:err = 'Cannot find the "neovim" node package. Try :CheckHealth' +endif + +call remote#host#RegisterPlugin('node-provider', 'node', []) |