aboutsummaryrefslogtreecommitdiff
path: root/runtime/autoload/provider/node.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/autoload/provider/node.vim')
-rw-r--r--runtime/autoload/provider/node.vim40
1 files changed, 30 insertions, 10 deletions
diff --git a/runtime/autoload/provider/node.vim b/runtime/autoload/provider/node.vim
index b08ad4f316..67b54c6439 100644
--- a/runtime/autoload/provider/node.vim
+++ b/runtime/autoload/provider/node.vim
@@ -5,8 +5,32 @@ let g:loaded_node_provider = 1
let s:job_opts = {'rpc': v:true, 'on_stderr': function('provider#stderr_collector')}
+" Support for --inspect-brk requires node 6.12+ or 7.6+ or 8+
+" Return 1 if it is supported
+" Return 0 otherwise
+function! provider#node#can_inspect()
+ if !executable('node')
+ return 0
+ endif
+ let node_v = get(split(system(['node', '-v']), "\n"), 0, '')
+ if v:shell_error || node_v[0] !=# 'v'
+ return 0
+ endif
+ " [major, minor, patch]
+ let node_v = split(node_v[1:], '\.')
+ return len(node_v) == 3 && (
+ \ (node_v[0] > 7) ||
+ \ (node_v[0] == 7 && node_v[1] >= 6) ||
+ \ (node_v[0] == 6 && node_v[1] >= 12)
+ \ )
+endfunction
+
function! provider#node#Detect() abort
- return has('win32') ? exepath('neovim-node-host.cmd') : exepath('neovim-node-host')
+ let global_modules = get(split(system('npm root -g'), "\n"), 0, '')
+ if v:shell_error || !isdirectory(global_modules)
+ return ''
+ endif
+ return glob(global_modules . '/neovim/bin/cli.js')
endfunction
function! provider#node#Prog()
@@ -19,18 +43,14 @@ function! provider#node#Require(host) abort
return
endif
- if has('win32')
- let args = provider#node#Prog()
- else
- let args = ['node']
-
- if !empty($NVIM_NODE_HOST_DEBUG)
- call add(args, '--inspect-brk')
- endif
+ let args = ['node']
- call add(args , provider#node#Prog())
+ if !empty($NVIM_NODE_HOST_DEBUG) && provider#node#can_inspect()
+ 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'