summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/fixers/black.vim23
-rw-r--r--test/fixers/test_black_fixer_callback.vader10
2 files changed, 24 insertions, 9 deletions
diff --git a/autoload/ale/fixers/black.vim b/autoload/ale/fixers/black.vim
index 17697652..142cd983 100644
--- a/autoload/ale/fixers/black.vim
+++ b/autoload/ale/fixers/black.vim
@@ -18,20 +18,25 @@ endfunction
function! ale#fixers#black#Fix(buffer) abort
let l:executable = ale#fixers#black#GetExecutable(a:buffer)
- let l:exec_args = l:executable =~? 'pipenv$'
- \ ? ' run black'
- \ : ''
+ let l:cmd = [ale#Escape(l:executable)]
+
+ if l:executable =~? 'pipenv$'
+ call extend(l:cmd, ['run', 'black'])
+ endif
+
let l:options = ale#Var(a:buffer, 'python_black_options')
+ if !empty(l:options)
+ call add(l:cmd, l:options)
+ endif
+
if expand('#' . a:buffer . ':e') is? 'pyi'
- let l:options .= '--pyi'
+ call add(l:cmd, '--pyi')
endif
- let l:result = {
- \ 'command': ale#Escape(l:executable) . l:exec_args
- \ . (!empty(l:options) ? ' ' . l:options : '')
- \ . ' -',
- \}
+ call add(l:cmd, '-')
+
+ let l:result = {'command': join(l:cmd, ' ')}
if ale#Var(a:buffer, 'python_black_change_directory')
let l:result.cwd = '%s:h'
diff --git a/test/fixers/test_black_fixer_callback.vader b/test/fixers/test_black_fixer_callback.vader
index 665ba78b..a69eafd9 100644
--- a/test/fixers/test_black_fixer_callback.vader
+++ b/test/fixers/test_black_fixer_callback.vader
@@ -36,6 +36,16 @@ Execute(The black callback should include --pyi for .pyi files):
\ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/black')) . ' --pyi -' },
\ ale#fixers#black#Fix(bufnr(''))
+Execute(The black callback should not concatenate options):
+ let g:ale_python_black_options = '--some-option'
+ let g:ale_python_black_change_directory = 0
+
+ silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.pyi')
+
+ AssertEqual
+ \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/black')) . ' --some-option --pyi -' },
+ \ ale#fixers#black#Fix(bufnr(''))
+
Execute(Pipenv is detected when python_black_auto_pipenv is set):
let g:ale_python_black_auto_pipenv = 1
let g:ale_python_black_change_directory = 0