diff options
-rw-r--r-- | autoload/ale/fixers/black.vim | 24 | ||||
-rw-r--r-- | autoload/ale/references.vim | 1 | ||||
-rw-r--r-- | doc/ale-python.txt | 11 | ||||
-rw-r--r-- | test/fixers/test_black_fixer_callback.vader | 13 | ||||
-rw-r--r-- | test/test_find_references.vader | 6 |
5 files changed, 38 insertions, 17 deletions
diff --git a/autoload/ale/fixers/black.vim b/autoload/ale/fixers/black.vim index 4169322a..27249c55 100644 --- a/autoload/ale/fixers/black.vim +++ b/autoload/ale/fixers/black.vim @@ -4,22 +4,28 @@ call ale#Set('python_black_executable', 'black') call ale#Set('python_black_use_global', get(g:, 'ale_use_global_executables', 0)) call ale#Set('python_black_options', '') +call ale#Set('python_black_auto_pipenv', 0) + +function! ale#fixers#black#GetExecutable(buffer) abort + if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_black_auto_pipenv')) + \ && ale#python#PipenvPresent(a:buffer) + return 'pipenv' + endif + + return ale#python#FindExecutable(a:buffer, 'python_black', ['black']) +endfunction function! ale#fixers#black#Fix(buffer) abort - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_black', - \ ['black'], - \) + let l:executable = ale#fixers#black#GetExecutable(a:buffer) - if !executable(l:executable) - return 0 - endif + let l:exec_args = l:executable =~? 'pipenv$' + \ ? ' run black' + \ : '' let l:options = ale#Var(a:buffer, 'python_black_options') return { - \ 'command': ale#Escape(l:executable) + \ 'command': ale#Escape(l:executable) . l:exec_args \ . (!empty(l:options) ? ' ' . l:options : '') \ . ' -', \} diff --git a/autoload/ale/references.vim b/autoload/ale/references.vim index d00a1fa9..24267bb4 100644 --- a/autoload/ale/references.vim +++ b/autoload/ale/references.vim @@ -27,6 +27,7 @@ function! ale#references#HandleTSServerResponse(conn_id, response) abort \ 'filename': l:response_item.file, \ 'line': l:response_item.start.line, \ 'column': l:response_item.start.offset, + \ 'match': substitute(l:response_item.lineText, '^\s*\(.\{-}\)\s*$', '\1', ''), \}) endfor diff --git a/doc/ale-python.txt b/doc/ale-python.txt index f3f2801a..a1ad1500 100644 --- a/doc/ale-python.txt +++ b/doc/ale-python.txt @@ -75,7 +75,7 @@ g:ale_python_black_executable *g:ale_python_black_executable* See |ale-integrations-local-executables| -autopep8 + g:ale_python_black_options *g:ale_python_black_options* *b:ale_python_black_options* Type: |String| @@ -92,6 +92,15 @@ g:ale_python_black_use_global *g:ale_python_black_use_global* See |ale-integrations-local-executables| +g:ale_python_black_auto_pipenv *g:ale_python_black_auto_pipenv* + *b:ale_python_black_auto_pipenv* + Type: |Number| + Default: `0` + + Detect whether the file is inside a pipenv, and set the executable to `pipenv` + if true. This is overridden by a manually-set executable. + + =============================================================================== flake8 *ale-python-flake8* diff --git a/test/fixers/test_black_fixer_callback.vader b/test/fixers/test_black_fixer_callback.vader index 365b0fa6..7843783a 100644 --- a/test/fixers/test_black_fixer_callback.vader +++ b/test/fixers/test_black_fixer_callback.vader @@ -5,6 +5,7 @@ Before: " Use an invalid global executable, so we don't match it. let g:ale_python_black_executable = 'xxxinvalid' let g:ale_python_black_options = '' + let g:ale_python_black_auto_pipenv = 0 call ale#test#SetDirectory('/testplugin/test/fixers') silent cd .. @@ -21,10 +22,6 @@ After: call ale#test#RestoreDirectory() Execute(The black callback should return the correct default values): - AssertEqual - \ 0, - \ ale#fixers#black#Fix(bufnr('')) - silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/bar.py') AssertEqual \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/black')) . ' -'}, @@ -37,3 +34,11 @@ Execute(The black callback should include options): AssertEqual \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/black')) . ' --some-option -' }, \ ale#fixers#black#Fix(bufnr('')) + +Execute(Pipenv is detected when python_black_auto_pipenv is set): + let g:ale_python_black_auto_pipenv = 1 + call ale#test#SetFilename('/testplugin/test/python_fixtures/pipenv/whatever.py') + + AssertEqual + \ {'command': ale#Escape('pipenv') . ' run black -'}, + \ ale#fixers#black#Fix(bufnr('')) diff --git a/test/test_find_references.vader b/test/test_find_references.vader index 88b2d762..14b5e37b 100644 --- a/test/test_find_references.vader +++ b/test/test_find_references.vader @@ -135,9 +135,9 @@ Execute(Results should be shown for tsserver responses): AssertEqual \ [ - \ {'filename': '/foo/bar/app.ts', 'column': 9, 'line': 9}, - \ {'filename': '/foo/bar/app.ts', 'column': 3, 'line': 804}, - \ {'filename': '/foo/bar/other/app.ts', 'column': 3, 'line': 51}, + \ {'filename': '/foo/bar/app.ts', 'column': 9, 'line': 9, 'match': 'import {doSomething} from ''./whatever'''}, + \ {'filename': '/foo/bar/app.ts', 'column': 3, 'line': 804, 'match': 'doSomething()'}, + \ {'filename': '/foo/bar/other/app.ts', 'column': 3, 'line': 51, 'match': 'doSomething()'}, \ ], \ g:item_list AssertEqual {}, ale#references#GetMap() |