Merge pull request #2906 from elebow/shelldetect-fall-back-to-filetype-if-no-hashbang
ShellDetect falls back to filetype if no hashbang (fixes #2886)
This commit is contained in:
commit
eb864730e2
3 changed files with 24 additions and 7 deletions
|
@ -1,5 +1,5 @@
|
||||||
" Author: w0rp <devw0rp@gmail.com>
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
" Description: Lints sh files using bash -n
|
" Description: Lints shell files by invoking the shell with -n
|
||||||
|
|
||||||
" Backwards compatibility
|
" Backwards compatibility
|
||||||
if exists('g:ale_linters_sh_shell_default_shell')
|
if exists('g:ale_linters_sh_shell_default_shell')
|
||||||
|
|
|
@ -4,17 +4,24 @@
|
||||||
function! ale#handlers#sh#GetShellType(buffer) abort
|
function! ale#handlers#sh#GetShellType(buffer) abort
|
||||||
let l:bang_line = get(getbufline(a:buffer, 1), 0, '')
|
let l:bang_line = get(getbufline(a:buffer, 1), 0, '')
|
||||||
|
|
||||||
|
let l:command = ''
|
||||||
|
|
||||||
" Take the shell executable from the hashbang, if we can.
|
" Take the shell executable from the hashbang, if we can.
|
||||||
if l:bang_line[:1] is# '#!'
|
if l:bang_line[:1] is# '#!'
|
||||||
" Remove options like -e, etc.
|
" Remove options like -e, etc.
|
||||||
let l:command = substitute(l:bang_line, ' --\?[a-zA-Z0-9]\+', '', 'g')
|
let l:command = substitute(l:bang_line, ' --\?[a-zA-Z0-9]\+', '', 'g')
|
||||||
|
|
||||||
for l:possible_shell in ['bash', 'dash', 'ash', 'tcsh', 'csh', 'zsh', 'ksh', 'sh']
|
|
||||||
if l:command =~# l:possible_shell . '\s*$'
|
|
||||||
return l:possible_shell
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" If we couldn't find a hashbang, try the filetype
|
||||||
|
if l:command is# ''
|
||||||
|
let l:command = &filetype
|
||||||
|
endif
|
||||||
|
|
||||||
|
for l:possible_shell in ['bash', 'dash', 'ash', 'tcsh', 'csh', 'zsh', 'ksh', 'sh']
|
||||||
|
if l:command =~# l:possible_shell . '\s*$'
|
||||||
|
return l:possible_shell
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -98,6 +98,16 @@ Execute(The ksh dialect should be used for shellcheck if b:is_kornshell is 1):
|
||||||
|
|
||||||
AssertEqual 'ksh', ale#handlers#shellcheck#GetDialectArgument(bufnr(''))
|
AssertEqual 'ksh', ale#handlers#shellcheck#GetDialectArgument(bufnr(''))
|
||||||
|
|
||||||
|
Execute(The filetype should be used as the default shell type when there is no hashbang line):
|
||||||
|
set filetype=zsh
|
||||||
|
AssertEqual 'zsh', ale#handlers#sh#GetShellType(bufnr(''))
|
||||||
|
|
||||||
|
set filetype=tcsh
|
||||||
|
AssertEqual 'tcsh', ale#handlers#sh#GetShellType(bufnr(''))
|
||||||
|
|
||||||
|
set filetype=python
|
||||||
|
AssertEqual '', ale#handlers#sh#GetShellType(bufnr(''))
|
||||||
|
|
||||||
Given(A file with /bin/ash):
|
Given(A file with /bin/ash):
|
||||||
#!/bin/ash
|
#!/bin/ash
|
||||||
|
|
||||||
|
|
Reference in a new issue