Choose shell dialect based on vim syntax

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.
This commit is contained in:
Keith Smiley 2016-10-27 18:20:22 +10:00
parent c8821fc049
commit 5fc2f8f6c0
No known key found for this signature in database
GPG Key ID: 33BA60D44C7167F8
1 changed files with 17 additions and 1 deletions

View File

@ -16,9 +16,25 @@ else
let s:exclude_option = '' let s:exclude_option = ''
endif 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', { call ale#linter#Define('sh', {
\ 'name': 'shellcheck', \ 'name': 'shellcheck',
\ 'executable': 'shellcheck', \ 'executable': 'shellcheck',
\ 'command': 'shellcheck ' . s:exclude_option . ' -f gcc -', \ 'command_callback': 'ale_linters#sh#shellcheck#GetCommand',
\ 'callback': 'ale#handlers#HandleGCCFormat', \ 'callback': 'ale#handlers#HandleGCCFormat',
\}) \})