summaryrefslogtreecommitdiff
path: root/ale_linters
diff options
context:
space:
mode:
Diffstat (limited to 'ale_linters')
-rw-r--r--ale_linters/rust/cargo.vim22
1 files changed, 21 insertions, 1 deletions
diff --git a/ale_linters/rust/cargo.vim b/ale_linters/rust/cargo.vim
index a0e123a4..09f41bbb 100644
--- a/ale_linters/rust/cargo.vim
+++ b/ale_linters/rust/cargo.vim
@@ -1,8 +1,11 @@
-" Author: Daniel Schemala <istjanichtzufassen@gmail.com>
+" Author: Daniel Schemala <istjanichtzufassen@gmail.com>,
+" Ivan Petkov <ivanppetkov@gmail.com>
" Description: rustc invoked by cargo for rust files
call ale#Set('rust_cargo_use_check', 1)
call ale#Set('rust_cargo_check_all_targets', 0)
+call ale#Set('rust_cargo_default_feature_behavior', 'default')
+call ale#Set('rust_cargo_include_features', '')
function! ale_linters#rust#cargo#GetCargoExecutable(bufnr) abort
if ale#path#FindNearestFile(a:bufnr, 'Cargo.toml') isnot# ''
@@ -29,10 +32,27 @@ function! ale_linters#rust#cargo#GetCommand(buffer, version_output) abort
\ && ale#Var(a:buffer, 'rust_cargo_check_all_targets')
\ && ale#semver#GTE(l:version, [0, 22, 0])
+ let l:include_features = ale#Var(a:buffer, 'rust_cargo_include_features')
+ if !empty(l:include_features)
+ let l:include_features = ' --features ' . ale#Escape(l:include_features)
+ endif
+
+ let l:default_feature_behavior = ale#Var(a:buffer, 'rust_cargo_default_feature_behavior')
+ if l:default_feature_behavior is# 'all'
+ let l:include_features = ''
+ let l:default_feature = ' --all-features'
+ elseif l:default_feature_behavior is# 'none'
+ let l:default_feature = ' --no-default-features'
+ else
+ let l:default_feature = ''
+ endif
+
return 'cargo '
\ . (l:use_check ? 'check' : 'build')
\ . (l:use_all_targets ? ' --all-targets' : '')
\ . ' --frozen --message-format=json -q'
+ \ . l:default_feature
+ \ . l:include_features
endfunction
call ale#linter#Define('rust', {