summaryrefslogtreecommitdiff
path: root/ale_linters/rust/cargo.vim
diff options
context:
space:
mode:
authorIvan Petkov <ivanppetkov@gmail.com>2018-01-09 19:18:18 -0800
committerIvan Petkov <ivanppetkov@gmail.com>2018-01-11 19:24:44 -0800
commit2ef45ab7457566a10354b7833cbdf5137118cebf (patch)
treead91c0d326c7f2e26a2ed782b47cfa83014c98d3 /ale_linters/rust/cargo.vim
parentf1747901cc00abb7becb64c02bfccad46b66ed21 (diff)
downloadale-2ef45ab7457566a10354b7833cbdf5137118cebf.zip
Teach ALE about cargo features and add some configuration options
* When working on rust/cargo projects of varying sizes, it may be useful to either build all possible features (i.e. lint all possible conditionally compiled code), or even turn off other features for a quicker edit-lint cycle (e.g. for large projects with large build times) * Added a g:ale_rust_cargo_default_feature_behavior flag for instructing cargo to not build any features at all (via `--no-default-features`), building default features (via no extra flags), or building all possible features (via `--all-features`) * Also added a g:ale_rust_cargo_include_features flag for including arbitrary features to be checked by cargo. When coupled with g:ale_rust_cargo_default_feature_behavior this allows for full customization of what features are checked and which ones are ignored
Diffstat (limited to 'ale_linters/rust/cargo.vim')
-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', {