Merge pull request #2167 from stegmanh/master

Add support for ale option to override default shell used by ale
This commit is contained in:
w0rp 2019-01-03 21:01:13 +00:00 committed by GitHub
commit 7919db0db5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 61 additions and 7 deletions

View File

@ -11,6 +11,12 @@
" A setting for wrapping commands.
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', 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', v:null)
if !has_key(s:, 'job_map')
let s:job_map = {}
endif
@ -184,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 has('win32')
return 'cmd /s/c "' . l:command . '"'
endif
if g:ale_shell is v:null
if has('win32')
return 'cmd /s/c "' . l:command . '"'
endif
if &shell =~? 'fish$\|pwsh$'
return ['/bin/sh', '-c', l:command]
endif
if &shell =~? 'fish$\|pwsh$'
return ['/bin/sh', '-c', l:command]
endif
return split(&shell) + split(&shellcmdflag) + [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

@ -2000,6 +2000,33 @@ g:ale_windows_node_executable_path *g:ale_windows_node_executable_path*
scripts are executed with whatever executable is configured with this
setting.
g:ale_shell *g:ale_shell*
Type: |String|
Default: not set
This variable is used to determine which shell ale will use to execute
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
option might be incompatable with the newly set shell.
g:ale_shell_arguments *g:ale_shell_arguments*
Type: |String|
Default: not set
This variable is used to determine what commands vim will pass to the shell
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

@ -4,6 +4,7 @@ Before:
After:
Restore
let g:ale_shell = v:null
Execute(sh should be used when the shell is fish):
if !has('win32')
@ -43,6 +44,7 @@ Execute(Other shells should be used when set):
if !has('win32')
let &shell = '/bin/bash'
let &shellcmdflag = '-c'
let g:ale_shell = &shell
AssertEqual ['/bin/bash', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
endif
@ -54,3 +56,10 @@ Execute(cmd /s/c as a string should be used on Windows):
AssertEqual 'cmd /s/c "foobar"', ale#job#PrepareCommand(bufnr(''), 'foobar')
endif
Execute(Setting ale_shell should cause ale#job#PrepareCommand to use set shell):
if !has('win32')
let g:ale_shell = '/foo/bar'
AssertEqual ['/foo/bar', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar")
endif