diff options
author | Ivan Petkov <ivanppetkov@gmail.com> | 2018-01-09 19:18:18 -0800 |
---|---|---|
committer | Ivan Petkov <ivanppetkov@gmail.com> | 2018-01-11 19:24:44 -0800 |
commit | 2ef45ab7457566a10354b7833cbdf5137118cebf (patch) | |
tree | ad91c0d326c7f2e26a2ed782b47cfa83014c98d3 /ale_linters/rust/cargo.vim | |
parent | f1747901cc00abb7becb64c02bfccad46b66ed21 (diff) | |
download | ale-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.vim | 22 |
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', { |