Fix #1051 - Support ash and dash for shellcheck and the sh linter
This commit is contained in:
parent
3ac92ea529
commit
33c2c20e66
@ -23,15 +23,20 @@ function! ale_linters#sh#shellcheck#GetDialectArgument(buffer) abort
|
|||||||
let l:shell_type = ale#handlers#sh#GetShellType(a:buffer)
|
let l:shell_type = ale#handlers#sh#GetShellType(a:buffer)
|
||||||
|
|
||||||
if !empty(l:shell_type)
|
if !empty(l:shell_type)
|
||||||
|
" Use the dash dialect for /bin/ash, etc.
|
||||||
|
if l:shell_type is# 'ash'
|
||||||
|
return 'dash'
|
||||||
|
endif
|
||||||
|
|
||||||
return l:shell_type
|
return l:shell_type
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" If there's no hashbang, try using Vim's buffer variables.
|
" If there's no hashbang, try using Vim's buffer variables.
|
||||||
if get(b:, 'is_bash')
|
if getbufvar(a:buffer, 'is_bash', 0)
|
||||||
return 'bash'
|
return 'bash'
|
||||||
elseif get(b:, 'is_sh')
|
elseif getbufvar(a:buffer, 'is_sh', 0)
|
||||||
return 'sh'
|
return 'sh'
|
||||||
elseif get(b:, 'is_kornshell')
|
elseif getbufvar(a:buffer, 'is_kornshell', 0)
|
||||||
return 'ksh'
|
return 'ksh'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ function! ale#handlers#sh#GetShellType(buffer) abort
|
|||||||
" 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', 'tcsh', 'csh', 'zsh', 'sh']
|
for l:possible_shell in ['bash', 'dash', 'ash', 'tcsh', 'csh', 'zsh', 'sh']
|
||||||
if l:command =~# l:possible_shell . '\s*$'
|
if l:command =~# l:possible_shell . '\s*$'
|
||||||
return l:possible_shell
|
return l:possible_shell
|
||||||
endif
|
endif
|
||||||
|
@ -81,3 +81,23 @@ Execute(The ksh dialect should be used for shellcheck if b:is_kornshell is 1):
|
|||||||
let b:is_kornshell = 1
|
let b:is_kornshell = 1
|
||||||
|
|
||||||
AssertEqual 'ksh', ale_linters#sh#shellcheck#GetDialectArgument(bufnr(''))
|
AssertEqual 'ksh', ale_linters#sh#shellcheck#GetDialectArgument(bufnr(''))
|
||||||
|
|
||||||
|
Given(A file with /bin/ash):
|
||||||
|
#!/bin/ash
|
||||||
|
|
||||||
|
Execute(The ash dialect should be used for the shell and the base function):
|
||||||
|
AssertEqual 'ash', ale#handlers#sh#GetShellType(bufnr(''))
|
||||||
|
AssertEqual 'ash', ale_linters#sh#shell#GetExecutable(bufnr(''))
|
||||||
|
|
||||||
|
Execute(dash should be used for shellcheck, which has no ash dialect):
|
||||||
|
AssertEqual 'dash', ale_linters#sh#shellcheck#GetDialectArgument(bufnr(''))
|
||||||
|
|
||||||
|
Given(A file with /bin/dash):
|
||||||
|
#!/bin/dash
|
||||||
|
|
||||||
|
Execute(The dash dialect should be used for the shell and the base function):
|
||||||
|
AssertEqual 'dash', ale#handlers#sh#GetShellType(bufnr(''))
|
||||||
|
AssertEqual 'dash', ale_linters#sh#shell#GetExecutable(bufnr(''))
|
||||||
|
|
||||||
|
Execute(dash should be used for shellcheck):
|
||||||
|
AssertEqual 'dash', ale_linters#sh#shellcheck#GetDialectArgument(bufnr(''))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user