summaryrefslogtreecommitdiff
path: root/ale_linters/rust
diff options
context:
space:
mode:
Diffstat (limited to 'ale_linters/rust')
-rw-r--r--ale_linters/rust/cargo.vim62
1 files changed, 12 insertions, 50 deletions
diff --git a/ale_linters/rust/cargo.vim b/ale_linters/rust/cargo.vim
index f41cb4b6..ae26fab4 100644
--- a/ale_linters/rust/cargo.vim
+++ b/ale_linters/rust/cargo.vim
@@ -4,8 +4,6 @@
call ale#Set('rust_cargo_use_check', 1)
call ale#Set('rust_cargo_check_all_targets', 1)
-let s:version_cache = {}
-
function! ale_linters#rust#cargo#GetCargoExecutable(bufnr) abort
if ale#path#FindNearestFile(a:bufnr, 'Cargo.toml') isnot# ''
return 'cargo'
@@ -17,59 +15,23 @@ function! ale_linters#rust#cargo#GetCargoExecutable(bufnr) abort
endfunction
function! ale_linters#rust#cargo#VersionCheck(buffer) abort
- if has_key(s:version_cache, 'cargo')
- return ''
- endif
-
- return 'cargo --version'
-endfunction
-
-function! s:GetVersion(executable, output) abort
- let l:version = get(s:version_cache, a:executable, [])
-
- for l:match in ale#util#GetMatches(a:output, '\v\d+\.\d+\.\d+')
- let l:version = ale#semver#Parse(l:match[0])
- let s:version_cache[a:executable] = l:version
- endfor
-
- return l:version
-endfunction
-
-function! s:CanUseCargoCheck(buffer, version) abort
- " Allow `cargo check` to be disabled.
- if !ale#Var(a:buffer, 'rust_cargo_use_check')
- return 0
- endif
-
- return !empty(a:version)
- \ && ale#semver#GreaterOrEqual(a:version, [0, 17, 0])
-endfunction
-
-function! s:CanUseAllTargets(buffer, version) abort
- if !ale#Var(a:buffer, 'rust_cargo_use_check')
- return 0
- endif
-
- if !ale#Var(a:buffer, 'rust_cargo_check_all_targets')
- return 0
- endif
-
- return !empty(a:version)
- \ && ale#semver#GreaterOrEqual(a:version, [0, 22, 0])
+ return !ale#semver#HasVersion('cargo')
+ \ ? 'cargo --version'
+ \ : ''
endfunction
function! ale_linters#rust#cargo#GetCommand(buffer, version_output) abort
- let l:version = s:GetVersion('cargo', a:version_output)
- let l:command = s:CanUseCargoCheck(a:buffer, l:version)
- \ ? 'check'
- \ : 'build'
- let l:all_targets = s:CanUseAllTargets(a:buffer, l:version)
- \ ? ' --all-targets'
- \ : ''
+ let l:version = ale#semver#GetVersion('cargo', a:version_output)
+
+ let l:use_check = ale#Var(a:buffer, 'rust_cargo_use_check')
+ \ && ale#semver#GTE(l:version, [0, 17, 0])
+ let l:use_all_targets = l:use_check
+ \ && ale#Var(a:buffer, 'rust_cargo_check_all_targets')
+ \ && ale#semver#GTE(l:version, [0, 22, 0])
return 'cargo '
- \ . l:command
- \ . l:all_targets
+ \ . (l:use_check ? 'check' : 'build')
+ \ . (l:use_all_targets ? ' --all-targets' : '')
\ . ' --frozen --message-format=json -q'
endfunction