summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2017-10-26 21:17:47 +0100
committerw0rp <devw0rp@gmail.com>2017-10-26 21:21:42 +0100
commit33c2c20e66f694daf899963d778c47f824cda732 (patch)
tree41ce191eb81a8719f876bbc75dd6f286c311b3a3
parent3ac92ea529e41fa733647692e40b6ee5c0622e1d (diff)
downloadale-33c2c20e66f694daf899963d778c47f824cda732.zip
Fix #1051 - Support ash and dash for shellcheck and the sh linter
-rw-r--r--ale_linters/sh/shellcheck.vim11
-rw-r--r--autoload/ale/handlers/sh.vim2
-rw-r--r--test/test_shell_detection.vader20
3 files changed, 29 insertions, 4 deletions
diff --git a/ale_linters/sh/shellcheck.vim b/ale_linters/sh/shellcheck.vim
index 68844a05..32b47e22 100644
--- a/ale_linters/sh/shellcheck.vim
+++ b/ale_linters/sh/shellcheck.vim
@@ -23,15 +23,20 @@ function! ale_linters#sh#shellcheck#GetDialectArgument(buffer) abort
let l:shell_type = ale#handlers#sh#GetShellType(a:buffer)
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
endif
" 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'
- elseif get(b:, 'is_sh')
+ elseif getbufvar(a:buffer, 'is_sh', 0)
return 'sh'
- elseif get(b:, 'is_kornshell')
+ elseif getbufvar(a:buffer, 'is_kornshell', 0)
return 'ksh'
endif
diff --git a/autoload/ale/handlers/sh.vim b/autoload/ale/handlers/sh.vim
index 894879ee..e96dd3ce 100644
--- a/autoload/ale/handlers/sh.vim
+++ b/autoload/ale/handlers/sh.vim
@@ -9,7 +9,7 @@ function! ale#handlers#sh#GetShellType(buffer) abort
" Remove options like -e, etc.
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*$'
return l:possible_shell
endif
diff --git a/test/test_shell_detection.vader b/test/test_shell_detection.vader
index 37cf43ce..adb8d70d 100644
--- a/test/test_shell_detection.vader
+++ b/test/test_shell_detection.vader
@@ -81,3 +81,23 @@ Execute(The ksh dialect should be used for shellcheck if b:is_kornshell is 1):
let b:is_kornshell = 1
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(''))