summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotkild <notkild@gmail.com>2017-02-06 09:21:06 +0100
committernotkild <notkild@gmail.com>2017-02-06 09:21:06 +0100
commit0143eb6a53fdf77e6d11b5d714501db2667b3ee2 (patch)
tree3992cbedadd71bfa1e76f7ba1814b50526bb9230
parent744d7d789f859b70ea5981377600678c0ff4f6c2 (diff)
downloadale-0143eb6a53fdf77e6d11b5d714501db2667b3ee2.zip
Fix rust linting with cargo when multiple targets are present
-rw-r--r--ale_linters/rust/cargo.vim4
-rw-r--r--ale_linters/rust/rustc.vim8
2 files changed, 10 insertions, 2 deletions
diff --git a/ale_linters/rust/cargo.vim b/ale_linters/rust/cargo.vim
index 738821d7..8c782656 100644
--- a/ale_linters/rust/cargo.vim
+++ b/ale_linters/rust/cargo.vim
@@ -15,7 +15,7 @@ endfunction
call ale#linter#Define('rust', {
\ 'name': 'cargo',
\ 'executable_callback': 'ale_linters#rust#cargo#GetCargoExecutable',
-\ 'command': 'cargo rustc -- --error-format=json -Z no-trans',
+\ 'command': 'cargo build --message-format=json -q',
\ 'callback': 'ale_linters#rust#rustc#HandleRustcErrors',
-\ 'output_stream': 'stderr',
+\ 'output_stream': 'stdout',
\})
diff --git a/ale_linters/rust/rustc.vim b/ale_linters/rust/rustc.vim
index 3eeede66..e31b895c 100644
--- a/ale_linters/rust/rustc.vim
+++ b/ale_linters/rust/rustc.vim
@@ -17,12 +17,20 @@ function! ale_linters#rust#rustc#HandleRustcErrors(buffer_number, errorlines) ab
endif
let l:error = json_decode(l:errorline)
+ if !has_key(l:error, 'code') && !has_key(l:error, 'message')
+ continue
+ endif
+
+ if has_key(l:error, 'message')
+ let l:error = l:error.message
+ endif
if !empty(l:error.code) && index(g:ale_rust_ignore_error_codes, l:error.code.code) > -1
continue
endif
for l:span in l:error.spans
+ let l:span.file_name = fnamemodify(l:span.file_name, ':t')
if l:span.is_primary &&
\ (l:span.file_name ==# l:file_name || l:span.file_name ==# '<anon>')
call add(l:output, {