From 2ef45ab7457566a10354b7833cbdf5137118cebf Mon Sep 17 00:00:00 2001 From: Ivan Petkov Date: Tue, 9 Jan 2018 19:18:18 -0800 Subject: 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 --- ale_linters/rust/cargo.vim | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'ale_linters/rust/cargo.vim') 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 +" Author: Daniel Schemala , +" Ivan Petkov " 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', { -- cgit v1.2.3