aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2023-03-07 09:28:53 -0500
committerGitHub <noreply@github.com>2023-03-07 06:28:53 -0800
commit04e8e1f9eaa9ca64fa6418639d595f142585a934 (patch)
treedcb52e16a96caffef942efc56692671592bfdae2
parent7a462c10d522e1b650979e810ad3b137224bb2b0 (diff)
downloadrneovim-04e8e1f9eaa9ca64fa6418639d595f142585a934.tar.gz
rneovim-04e8e1f9eaa9ca64fa6418639d595f142585a934.tar.bz2
rneovim-04e8e1f9eaa9ca64fa6418639d595f142585a934.zip
refactor(runtime): use vim.version to compare versions #22550
TODO: Unfortunately, cannot (yet) use vim.version for tmux version comparison, because `vim.version.parse(…,{strict=false})` does not coerce tmux's funny "tmux 3.3a" version string. https://github.com/neovim/neovim/blob/6969d3d7491fc2f10d80309b26dd0c26d211b1b3/runtime/autoload/provider/clipboard.vim#L148
-rw-r--r--runtime/autoload/health/provider.vim28
-rw-r--r--runtime/autoload/provider/node.vim18
2 files changed, 13 insertions, 33 deletions
diff --git a/runtime/autoload/health/provider.vim b/runtime/autoload/health/provider.vim
index d104bcfd67..59361eb735 100644
--- a/runtime/autoload/health/provider.vim
+++ b/runtime/autoload/health/provider.vim
@@ -19,22 +19,6 @@ function! s:cmd_ok(cmd) abort
return v:shell_error == 0
endfunction
-" Simple version comparison.
-function! s:version_cmp(a, b) abort
- let a = split(a:a, '\.', 0)
- let b = split(a:b, '\.', 0)
-
- for i in range(len(a))
- if str2nr(a[i]) > str2nr(b[i])
- return 1
- elseif str2nr(a[i]) < str2nr(b[i])
- return -1
- endif
- endfor
-
- return 0
-endfunction
-
" Handler for s:system() function.
function! s:system_handler(jobid, data, event) dict abort
if a:event ==# 'stderr'
@@ -244,7 +228,7 @@ function! s:version_info(python) abort
let nvim_path_base = fnamemodify(nvim_path, ':~:h')
let version_status = 'unknown; '.nvim_path_base
if !s:is_bad_response(nvim_version) && !s:is_bad_response(pypi_version)
- if s:version_cmp(nvim_version, pypi_version) == -1
+ if v:lua.vim.version.lt(nvim_version, pypi_version)
let version_status = 'outdated; from '.nvim_path_base
else
let version_status = 'up to date'
@@ -598,7 +582,7 @@ function! s:check_ruby() abort
return
endif
- if s:version_cmp(current_gem, latest_gem) == -1
+ if v:lua.vim.version.lt(current_gem, latest_gem)
call health#report_warn(
\ printf('Gem "neovim" is out-of-date. Installed: %s, latest: %s',
\ current_gem, latest_gem),
@@ -623,8 +607,8 @@ function! s:check_node() abort
endif
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('Nvim node.js host does not support '.node_v)
+ if s:shell_error || v:lua.vim.version.lt(node_v[1:], '6.0.0')
+ call health#report_warn('Nvim node.js host does not support Node '.node_v)
" Skip further checks, they are nonsense if nodejs is too old.
return
endif
@@ -675,7 +659,7 @@ function! s:check_node() abort
return
endif
- if s:version_cmp(current_npm, latest_npm) == -1
+ if latest_npm !=# 'unable to parse' && v:lua.vim.version.lt(current_npm, latest_npm)
call health#report_warn(
\ printf('Package "neovim" is out-of-date. Installed: %s, latest: %s',
\ current_npm, latest_npm),
@@ -751,7 +735,7 @@ function! s:check_perl() abort
return
endif
- if s:version_cmp(current_cpan, latest_cpan) == -1
+ if v:lua.vim.version.lt(current_cpan, latest_cpan)
call health#report_warn(
\ printf('Module "Neovim::Ext" is out-of-date. Installed: %s, latest: %s',
\ current_cpan, latest_cpan),
diff --git a/runtime/autoload/provider/node.vim b/runtime/autoload/provider/node.vim
index 87af0094fe..3e7b8b4ef9 100644
--- a/runtime/autoload/provider/node.vim
+++ b/runtime/autoload/provider/node.vim
@@ -3,7 +3,7 @@ if exists('g:loaded_node_provider')
endif
let g:loaded_node_provider = 1
-function! s:is_minimum_version(version, min_major, min_minor) abort
+function! s:is_minimum_version(version, min_version) abort
if empty(a:version)
let nodejs_version = get(split(system(['node', '-v']), "\n"), 0, '')
if v:shell_error || nodejs_version[0] !=# 'v'
@@ -15,11 +15,7 @@ function! s:is_minimum_version(version, min_major, min_minor) abort
" Remove surrounding junk. Example: 'v4.12.0' => '4.12.0'
let nodejs_version = matchstr(nodejs_version, '\(\d\.\?\)\+')
" [major, minor, patch]
- let v_list = split(nodejs_version, '\.')
- return len(v_list) == 3
- \ && ((str2nr(v_list[0]) > str2nr(a:min_major))
- \ || (str2nr(v_list[0]) == str2nr(a:min_major)
- \ && str2nr(v_list[1]) >= str2nr(a:min_minor)))
+ return !v:lua.vim.version.lt(nodejs_version, a:min_version)
endfunction
let s:NodeHandler = {
@@ -43,20 +39,20 @@ function! provider#node#can_inspect() abort
if v:shell_error || ver[0] !=# 'v'
return 0
endif
- return (ver[1] ==# '6' && s:is_minimum_version(ver, 6, 12))
- \ || s:is_minimum_version(ver, 7, 6)
+ return (ver[1] ==# '6' && s:is_minimum_version(ver, '6.12.0'))
+ \ || s:is_minimum_version(ver, '7.6.0')
endfunction
function! provider#node#Detect() abort
- let minver = [6, 0]
+ let minver = '6.0.0'
if exists('g:node_host_prog')
return [expand(g:node_host_prog, v:true), '']
endif
if !executable('node')
return ['', 'node not found (or not executable)']
endif
- if !s:is_minimum_version(v:null, minver[0], minver[1])
- return ['', printf('node version %s.%s not found', minver[0], minver[1])]
+ if !s:is_minimum_version(v:null, minver)
+ return ['', printf('node version %s not found', minver)]
endif
let npm_opts = {}