diff options
author | Percy Ma <kecrily@gmail.com> | 2022-08-01 22:21:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-01 07:21:54 -0700 |
commit | c6181a672a2fdb2cb89ddf85b5d6ab15b10a0996 (patch) | |
tree | 55fefe96a8a421e36e832745bdab544baadbd493 | |
parent | 8d1c55e4224fc990d18409905aeb51d54d9d78cb (diff) | |
download | rneovim-c6181a672a2fdb2cb89ddf85b5d6ab15b10a0996.tar.gz rneovim-c6181a672a2fdb2cb89ddf85b5d6ab15b10a0996.tar.bz2 rneovim-c6181a672a2fdb2cb89ddf85b5d6ab15b10a0996.zip |
feat(node): add pnpm support #19461
-rw-r--r-- | runtime/autoload/health/provider.vim | 22 | ||||
-rw-r--r-- | runtime/autoload/provider/node.vim | 14 |
2 files changed, 29 insertions, 7 deletions
diff --git a/runtime/autoload/health/provider.vim b/runtime/autoload/health/provider.vim index 5cda7cfd03..d104bcfd67 100644 --- a/runtime/autoload/health/provider.vim +++ b/runtime/autoload/health/provider.vim @@ -615,10 +615,10 @@ function! s:check_node() abort return endif - if !executable('node') || (!executable('npm') && !executable('yarn')) + if !executable('node') || (!executable('npm') && !executable('yarn') && !executable('pnpm')) call health#report_warn( - \ '`node` and `npm` (or `yarn`) must be in $PATH.', - \ ['Install Node.js and verify that `node` and `npm` (or `yarn`) commands work.']) + \ '`node` and `npm` (or `yarn`, `pnpm`) must be in $PATH.', + \ ['Install Node.js and verify that `node` and `npm` (or `yarn`, `pnpm`) commands work.']) return endif let node_v = get(split(s:system(['node', '-v']), "\n"), 0, '') @@ -634,15 +634,22 @@ function! s:check_node() abort let [host, err] = provider#node#Detect() if empty(host) - call health#report_warn('Missing "neovim" npm (or yarn) package.', + call health#report_warn('Missing "neovim" npm (or yarn, pnpm) package.', \ ['Run in shell: npm install -g neovim', \ 'Run in shell (if you use yarn): yarn global add neovim', + \ 'Run in shell (if you use pnpm): pnpm install -g neovim', \ 'You may disable this provider (and warning) by adding `let g:loaded_node_provider = 0` to your init.vim']) return endif call health#report_info('Nvim node.js host: '. host) - let manager = executable('npm') ? 'npm' : 'yarn' + let manager = 'npm' + if executable('yarn') + let manager = 'yarn' + elseif executable('pnpm') + let manager = 'pnpm' + endif + let latest_npm_cmd = has('win32') ? \ 'cmd /c '. manager .' info neovim --json' : \ manager .' info neovim --json' @@ -673,9 +680,10 @@ function! s:check_node() abort \ printf('Package "neovim" is out-of-date. Installed: %s, latest: %s', \ current_npm, latest_npm), \ ['Run in shell: npm install -g neovim', - \ 'Run in shell (if you use yarn): yarn global add neovim']) + \ 'Run in shell (if you use yarn): yarn global add neovim', + \ 'Run in shell (if you use pnpm): pnpm install -g neovim']) else - call health#report_ok('Latest "neovim" npm/yarn package is installed: '. current_npm) + call health#report_ok('Latest "neovim" npm/yarn/pnpm package is installed: '. current_npm) endif endfunction diff --git a/runtime/autoload/provider/node.vim b/runtime/autoload/provider/node.vim index 5079c07d8c..45b1dd4fd7 100644 --- a/runtime/autoload/provider/node.vim +++ b/runtime/autoload/provider/node.vim @@ -82,6 +82,13 @@ function! provider#node#Detect() abort let yarn_opts.job_id = jobstart('yarn global dir', yarn_opts) endif + let pnpm_opts = {} + if executable('pnpm') + let pnpm_opts = deepcopy(s:NodeHandler) + let pnpm_opts.entry_point = '/neovim/bin/cli.js' + let pnpm_opts.job_id = jobstart('pnpm --loglevel silent root -g', pnpm_opts) + endif + " npm returns the directory faster, so let's check that first if !empty(npm_opts) let result = jobwait([npm_opts.job_id]) @@ -97,6 +104,13 @@ function! provider#node#Detect() abort endif endif + if !empty(pnpm_opts) + let result = jobwait([pnpm_opts.job_id]) + if result[0] == 0 && pnpm_opts.result != '' + return [pnpm_opts.result, ''] + endif + endif + return ['', 'failed to detect node'] endfunction |