aboutsummaryrefslogtreecommitdiff
path: root/runtime/autoload
diff options
context:
space:
mode:
authorJan Edmund Lazo <janedmundlazo@hotmail.com>2017-11-29 01:50:11 -0500
committerJustin M. Keyes <justinkz@gmail.com>2017-12-17 16:09:18 +0100
commita1adfdc7d59979824addce2f519a527f9a5c0290 (patch)
tree3cc9204170b430d11b1b40789908a9756b53e3e1 /runtime/autoload
parentbfb21f3e012d9473d6038dd254fc3a0ecdf8c0e9 (diff)
downloadrneovim-a1adfdc7d59979824addce2f519a527f9a5c0290.tar.gz
rneovim-a1adfdc7d59979824addce2f519a527f9a5c0290.tar.bz2
rneovim-a1adfdc7d59979824addce2f519a527f9a5c0290.zip
ci: nodejs client acceptance-test #7706
ci: install nodejs 8 in Appveyor, Travis provider: check node version for debug support Resolve https://github.com/neovim/neovim/pull/7577#issuecomment-350590592 for Unix. provider: test if nodejs in ci supports --inspect-brk nodejs host for neovim requires nodejs 6+ to work properly. nodejs 6.12+ or 7.6+ is required for debug support via `node --inspect-brk`. provider: run cli.js of nodejs host directly npm shims are useless because the user cannot set node to debug mode via --inspect-brk. This is problematic on Windows which use batchfiles and shell scripts to compensate for not supporting shebang. The patch uses `npm root -g` to get the absolute path of the global npm modules. If that fails, then the user did not install neovim npm package globally. Use that absolute path to find `neovim/bin/cli.js`, which is what the npm shim actually runs with node. glob() is for a simple file check in case bin/ is removed because the npm shims are ignored now.
Diffstat (limited to 'runtime/autoload')
-rw-r--r--runtime/autoload/health/provider.vim15
-rw-r--r--runtime/autoload/provider/node.vim40
2 files changed, 41 insertions, 14 deletions
diff --git a/runtime/autoload/health/provider.vim b/runtime/autoload/health/provider.vim
index 0201ed8062..188b67c4c1 100644
--- a/runtime/autoload/health/provider.vim
+++ b/runtime/autoload/health/provider.vim
@@ -488,7 +488,7 @@ function! s:check_ruby() abort
endfunction
function! s:check_node() abort
- call health#report_start('Node provider (optional)')
+ call health#report_start('Node.js provider (optional)')
let loaded_var = 'g:loaded_node_provider'
if exists(loaded_var) && !exists('*provider#node#Call')
@@ -502,7 +502,14 @@ function! s:check_node() abort
\ ['Install Node.js and verify that `node` and `npm` commands work.'])
return
endif
- call health#report_info('Node: '. s:system('node -v'))
+ let node_v = get(split(s:system('node -v'), "\n"), 0, '')
+ call health#report_info('Node.js: '. node_v)
+ if !s:shell_error && s:version_cmp(node_v[1:], '6.0.0') < 0
+ call health#report_warn('Neovim node.js host does not support '.node_v)
+ endif
+ if !provider#node#can_inspect()
+ call health#report_warn('node.js on this system does not support --inspect-brk so $NVIM_NODE_HOST_DEBUG is ignored.')
+ endif
let host = provider#node#Detect()
if empty(host)
@@ -511,7 +518,7 @@ function! s:check_node() abort
\ 'Is the npm bin directory in $PATH?'])
return
endif
- call health#report_info('Host: '. host)
+ call health#report_info('Neovim node.js host: '. host)
let latest_npm_cmd = has('win32') ? 'cmd /c npm info neovim --json' : 'npm info neovim --json'
let latest_npm = s:system(split(latest_npm_cmd))
@@ -530,7 +537,7 @@ function! s:check_node() abort
let latest_npm = get(get(pkg_data, 'dist-tags', {}), 'latest', 'unable to parse')
endif
- let current_npm_cmd = host .' --version'
+ let current_npm_cmd = ['node', host, '--version']
let current_npm = s:system(current_npm_cmd)
if s:shell_error
call health#report_error('Failed to run: '. current_npm_cmd,
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'