5fc2f8f6c0
Shellcheck is smart enough to check the shebang in a given file to determine which dialect to use. Unfortunately this doesn't work for files without shebangs, even if it might be apparent what dialect should be used, such as "bashrc" or "foo.bash". Luckily `filetype.vim` defines specific vars based on which shell dialect is being used based on a huge list of conditions. With this change we take those into account for all the types shellcheck supports, otherwise we fallback to letting it try and decide.
40 lines
1.2 KiB
VimL
40 lines
1.2 KiB
VimL
" Author: w0rp <devw0rp@gmail.com>
|
|
" Description: This file adds support for using the shellcheck linter with
|
|
" shell scripts.
|
|
|
|
" This global variable can be set with a string of comma-seperated error
|
|
" codes to exclude from shellcheck. For example:
|
|
"
|
|
" let g:ale_linters_sh_shellcheck_exclusions = 'SC2002,SC2004'
|
|
if !exists('g:ale_linters_sh_shellcheck_exclusions')
|
|
let g:ale_linters_sh_shellcheck_exclusions = ''
|
|
endif
|
|
|
|
if g:ale_linters_sh_shellcheck_exclusions !=# ''
|
|
let s:exclude_option = '-e ' . g:ale_linters_sh_shellcheck_exclusions
|
|
else
|
|
let s:exclude_option = ''
|
|
endif
|
|
|
|
function! s:GetDialectArgument()
|
|
if exists('b:is_bash') && b:is_bash
|
|
return '-s bash'
|
|
elseif exists('b:is_sh') && b:is_sh
|
|
return '-s sh'
|
|
elseif exists('b:is_kornshell') && b:is_kornshell
|
|
return '-s ksh'
|
|
endif
|
|
|
|
return ''
|
|
endfunction
|
|
|
|
function! ale_linters#sh#shellcheck#GetCommand(buffer)
|
|
return 'shellcheck ' . s:exclude_option . ' ' . s:GetDialectArgument() . ' -f gcc -'
|
|
endfunction
|
|
|
|
call ale#linter#Define('sh', {
|
|
\ 'name': 'shellcheck',
|
|
\ 'executable': 'shellcheck',
|
|
\ 'command_callback': 'ale_linters#sh#shellcheck#GetCommand',
|
|
\ 'callback': 'ale#handlers#HandleGCCFormat',
|
|
\})
|