change ale to use value of g:ale_shell regardless of what it is

This commit is contained in:
Holden 2019-01-02 19:05:51 -05:00
parent 8550fa6059
commit 5f613a5fd6
5 changed files with 36 additions and 22 deletions

View file

@ -12,10 +12,10 @@
let g:ale_command_wrapper = get(g:, 'ale_command_wrapper', '')
" A setting for the shell used to execute commands
let g:ale_shell = get(g:, 'ale_shell', &shell)
let g:ale_shell = get(g:, 'ale_shell', v:null)
" A setting for the arguments we pass to the shell when executing commands
let g:ale_shell_arguments = get(g:, 'ale_shell_arguments', &shellcmdflag)
let g:ale_shell_arguments = get(g:, 'ale_shell_arguments', v:null)
if !has_key(s:, 'job_map')
let s:job_map = {}
@ -190,15 +190,27 @@ function! ale#job#PrepareCommand(buffer, command) abort
" NeoVim handles this issue automatically if the command is a String,
" but we'll do this explicitly, so we use the same exact command for both
" versions.
if g:ale_shell is v:null
if has('win32')
return 'cmd /s/c "' . l:command . '"'
endif
if g:ale_shell =~? 'fish$\|pwsh$'
if &shell =~? 'fish$\|pwsh$'
return ['/bin/sh', '-c', l:command]
endif
return [g:ale_shell] + split(g:ale_shell_arguments) + [l:command]
return split(&shell) + split(&shellcmdflag) + [l:command]
else
if has('win32')
return g:ale_shell . l:command . '"'
endif
let l:shell_arguments = g:ale_shell_arguments is v:null
\ ? &shellcmdflag
\ : g:ale_shell_arguments
return split(g:ale_shell) + split(l:shell_arguments) + [l:command]
endif
endfunction
" Start a job with options which are agnostic to Vim and NeoVim.

View file

@ -1993,14 +1993,17 @@ g:ale_windows_node_executable_path *g:ale_windows_node_executable_path*
g:ale_shell *g:ale_shell*
Type: |String|
Default: `'&shell'`
Default: not set
This variable is used to determine which shell ale will use to execute
commands. This variables defaults to the value of the vim option '&shell'
which corresponds to the $SHELL environment variable. For example
if `$SHELL == '/bin/bash'`, but you want to use zsh, set `g:ale_shell = '/bin/zsh'.`
If this option is set to either `fish` or `pwsh` (either by default or set
with this command), ale will still execute commands with `bin/sh`.
commands. By default this variable is undefined, meaning that ALE will use
it's default behavior. Which is to run shells via the shell determined by
the `&shell` vim variable, with the arguments `&shellcmdflag`. Ale will fall
back to using `/bin/sh`if it detects the underlying `&shell`is either `fish`
or `pwsh`. However, if you set this variable ALE will no longer fall back to
other shells, meaning if you wanted to use `fish` you could do so via this
option. For example if `$SHELL == '/bin/bash'`, but you want to use zsh,
set `g:ale_shell = '/bin/zsh'.
Please note - if you are using this option you should consider additionally
setting `g:ale``g:ale_shell_arguments` since the default values for that
@ -2009,12 +2012,11 @@ g:ale_shell *g:ale_shell*
g:ale_shell_arguments *g:ale_shell_arguments*
Type: |String|
Default: `'&shellcmdflag'`
Default: not set
This variable is used to determine what commands vim will pass to the shell
to execute it's commands. By default, `&shellcmdflag` would be set to the
value of '`-c'`. Similar to `g:ale_shell`, if the shell is set to either
`fish` or `pwsh`, `g:ale_shell_arguments` will no be used.
to execute it's commands. If this command is not set, but g:ale_shell is
set, ale will use `&shellcmdflag` as command arguments.
-------------------------------------------------------------------------------
6.1. Highlights *ale-highlights*

View file

@ -26,7 +26,7 @@ Before:
augroup END
if !has('win32')
let g:ale_shell = '/bin/bash'
let &shell = '/bin/bash'
endif
call ale#test#SetDirectory('/testplugin/test')

View file

@ -31,6 +31,6 @@ Execute(Command formatting should be applied correctly for LSP linters):
\ g:args
else
AssertEqual
\ ['true', [g:ale_shell, '-c', '''true'' --foo']],
\ ['true', [&shell, '-c', '''true'' --foo']],
\ g:args
endif

View file

@ -4,7 +4,7 @@ Before:
After:
Restore
let g:ale_shell = &shell
let g:ale_shell = v:null
Execute(sh should be used when the shell is fish):
if !has('win32')