From 1eec4466202c0327fb2168f2de5cd064d113aad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Luis=20Lafuente?= Date: Wed, 7 Jun 2017 21:42:30 +0200 Subject: Search python fixers in virtual environment (#632) * Search python fixers in virtual environment * Add tests for python fixers --- autoload/ale/fixers/autopep8.vim | 7 ++++++- autoload/ale/fixers/isort.vim | 7 ++++++- autoload/ale/fixers/yapf.vim | 7 ++++++- autoload/ale/handlers/python.vim | 21 +++++++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) (limited to 'autoload') diff --git a/autoload/ale/fixers/autopep8.vim b/autoload/ale/fixers/autopep8.vim index 59130af8..92271336 100644 --- a/autoload/ale/fixers/autopep8.vim +++ b/autoload/ale/fixers/autopep8.vim @@ -2,7 +2,12 @@ " Description: Fixing files with autopep8. function! ale#fixers#autopep8#Fix(buffer) abort + let l:executable = ale#handlers#python#GetExecutable(a:buffer, 'autopep8') + if empty(l:executable) + return 0 + endif + return { - \ 'command': 'autopep8 -' + \ 'command': ale#Escape(l:executable) . ' -' \} endfunction diff --git a/autoload/ale/fixers/isort.vim b/autoload/ale/fixers/isort.vim index 2d47434a..04830b28 100644 --- a/autoload/ale/fixers/isort.vim +++ b/autoload/ale/fixers/isort.vim @@ -2,12 +2,17 @@ " Description: Fixing Python imports with isort. function! ale#fixers#isort#Fix(buffer) abort + let l:executable = ale#handlers#python#GetExecutable(a:buffer, 'isort') + if empty(l:executable) + return 0 + endif + let l:config = ale#path#FindNearestFile(a:buffer, '.isort.cfg') let l:config_options = !empty(l:config) \ ? ' --settings-path ' . ale#Escape(l:config) \ : '' return { - \ 'command': 'isort' . l:config_options . ' -', + \ 'command': ale#Escape(l:executable) . l:config_options . ' -', \} endfunction diff --git a/autoload/ale/fixers/yapf.vim b/autoload/ale/fixers/yapf.vim index 479fd75e..46da4081 100644 --- a/autoload/ale/fixers/yapf.vim +++ b/autoload/ale/fixers/yapf.vim @@ -2,12 +2,17 @@ " Description: Fixing Python files with yapf. function! ale#fixers#yapf#Fix(buffer) abort + let l:executable = ale#handlers#python#GetExecutable(a:buffer, 'yapf') + if empty(l:executable) + return 0 + endif + let l:config = ale#path#FindNearestFile(a:buffer, '.style.yapf') let l:config_options = !empty(l:config) \ ? ' --style ' . ale#Escape(l:config) \ : '' return { - \ 'command': 'yapf --no-local-style' . l:config_options, + \ 'command': ale#Escape(l:executable) . ' --no-local-style' . l:config_options, \} endfunction diff --git a/autoload/ale/handlers/python.vim b/autoload/ale/handlers/python.vim index ae6f6d6c..58e7d757 100644 --- a/autoload/ale/handlers/python.vim +++ b/autoload/ale/handlers/python.vim @@ -45,3 +45,24 @@ function! ale#handlers#python#HandlePEP8Format(buffer, lines) abort return l:output endfunction + +" Given a buffer number and a command name, find the path to the executable. +" First search on a virtualenv for Python, if nothing is found, try the global +" command. Returns an empty string if cannot find the executable +function! ale#handlers#python#GetExecutable(buffer, cmd_name) abort + let l:virtualenv = ale#python#FindVirtualenv(a:buffer) + + if !empty(l:virtualenv) + let l:ve_executable = l:virtualenv . '/bin/' . a:cmd_name + + if executable(l:ve_executable) + return l:ve_executable + endif + endif + + if executable(a:cmd_name) + return a:cmd_name + endif + + return '' +endfunction -- cgit v1.2.3