aboutsummaryrefslogtreecommitdiff
path: root/.vim/autoload/neomake/makers/clippy.vim
blob: 6f2a8a3dd4464405ec97976fce1fe6fce09da1f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
" vim: ts=4 sw=4 et

" Yet to be determined
let s:rustup_has_nightly = get(g:, 'neomake_clippy_rustup_has_nightly', -1)

function! neomake#makers#clippy#clippy() abort
    " When rustup and a nightly toolchain is installed, that is used.
    " Otherwise, the default cargo exectuable is used. If this is not part
    " of a nightly rust, this will fail.
    if s:rustup_has_nightly == -1
        if !executable('rustup')
            let s:rustup_has_nightly = 0
            call system('rustc --version | grep -q "\-nightly"')
            if v:shell_error
                call neomake#log#warning('Clippy requires a nightly rust installation.')
            endif
        else
            call system('rustup show | grep -q "^nightly-"')
            let s:rustup_has_nightly = !v:shell_error
        endif
    endif

    let cargo_maker = neomake#makers#ft#rust#cargo()
    let json_args = ['--message-format=json', '--quiet']

    if s:rustup_has_nightly
        return {
            \ 'exe': 'rustup',
            \ 'args': ['run', 'nightly', 'cargo', 'clippy'] + json_args,
            \ 'process_output': cargo_maker.process_output,
            \ }
    else
        return {
            \ 'exe': 'cargo',
            \ 'args': ['clippy'] + json_args,
            \ 'process_output': cargo_maker.process_output,
            \ }
    endif
endfunction