From 373ffa0f316f14559870fb3903d723c6d88597ee Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Tue, 6 Oct 2020 02:12:05 -0400 Subject: [PATCH 1/8] Use pipenv isort executable when python_auto_pipenv = 1 --- autoload/ale/fixers/isort.vim | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/autoload/ale/fixers/isort.vim b/autoload/ale/fixers/isort.vim index 9070fb27..926822f2 100644 --- a/autoload/ale/fixers/isort.vim +++ b/autoload/ale/fixers/isort.vim @@ -5,14 +5,23 @@ call ale#Set('python_isort_executable', 'isort') call ale#Set('python_isort_options', '') call ale#Set('python_isort_use_global', get(g:, 'ale_use_global_executables', 0)) +function! ale#fixers#isort#GetExecutable(buffer) abort + if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_isort_auto_pipenv')) + \ && ale#python#PipenvPresent(a:buffer) + return 'pipenv' + endif + + return ale#python#FindExecutable(a:buffer, 'python_isort', ['isort']) +endfunction + function! ale#fixers#isort#Fix(buffer) abort let l:options = ale#Var(a:buffer, 'python_isort_options') - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_isort', - \ ['isort'], - \) + let l:executable = ale#fixers#isort#GetExecutable(a:buffer) + + let l:exec_args = l:executable =~? 'pipenv$' + \ ? ' run isort' + \ : '' if !executable(l:executable) return 0 @@ -20,6 +29,7 @@ function! ale#fixers#isort#Fix(buffer) abort return { \ 'command': ale#path#BufferCdString(a:buffer) - \ . ale#Escape(l:executable) . (!empty(l:options) ? ' ' . l:options : '') . ' -', + \ . ale#Escape(l:executable) . l:exec_args + \ . (!empty(l:options) ? ' ' . l:options : '') . ' -', \} endfunction From 64471e6ea88cc45dcd33e3a0ca5ee857797985e3 Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Tue, 6 Oct 2020 02:27:08 -0400 Subject: [PATCH 2/8] Document ale_python_isort_auto_pipenv option --- doc/ale-python.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/ale-python.txt b/doc/ale-python.txt index f0c8bfb8..504705f2 100644 --- a/doc/ale-python.txt +++ b/doc/ale-python.txt @@ -280,6 +280,15 @@ g:ale_python_isort_use_global *g:ale_python_isort_use_global* See |ale-integrations-local-executables| +g:ale_python_isort_auto_pipenv *g:ale_python_isort_auto_pipenv* + *b:ale_python_isort_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. + + =============================================================================== mypy *ale-python-mypy* From ae86d10e48ae27e08665502772886016c3a3aa3b Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Tue, 6 Oct 2020 04:00:45 -0400 Subject: [PATCH 3/8] Set default value for python_isort_auto_pipenv --- autoload/ale/fixers/isort.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoload/ale/fixers/isort.vim b/autoload/ale/fixers/isort.vim index 926822f2..13825f7e 100644 --- a/autoload/ale/fixers/isort.vim +++ b/autoload/ale/fixers/isort.vim @@ -2,8 +2,9 @@ " Description: Fixing Python imports with isort. call ale#Set('python_isort_executable', 'isort') -call ale#Set('python_isort_options', '') call ale#Set('python_isort_use_global', get(g:, 'ale_use_global_executables', 0)) +call ale#Set('python_isort_options', '') +call ale#Set('python_isort_auto_pipenv', 0) function! ale#fixers#isort#GetExecutable(buffer) abort if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_isort_auto_pipenv')) From 6efca486e8c228e9358d05e0a87d17e973da249e Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Tue, 6 Oct 2020 04:06:44 -0400 Subject: [PATCH 4/8] Add test for isort with auto_pipenv flag(s) --- test/fixers/test_isort_fixer_callback.vader | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/fixers/test_isort_fixer_callback.vader b/test/fixers/test_isort_fixer_callback.vader index 7f389dcf..76c8a4cb 100644 --- a/test/fixers/test_isort_fixer_callback.vader +++ b/test/fixers/test_isort_fixer_callback.vader @@ -5,6 +5,7 @@ Before: " Use an invalid global executable, so we don't match it. let g:ale_python_isort_executable = 'xxxinvalid' let g:ale_python_isort_options = '' + let g:ale_python_isort_auto_pipenv = 0 call ale#test#SetDirectory('/testplugin/test/fixers') silent cd .. @@ -48,3 +49,12 @@ Execute(The isort callback should respect custom options): \ . ' --multi-line=3 --trailing-comma -', \ }, \ ale#fixers#isort#Fix(bufnr('')) + +Execute(Pipenv is detected when python_isort_auto_pipenv is set): + let g:ale_python_isort_auto_pipenv = 1 + + call ale#test#SetFilename('/testplugin/test/python_fixtures/pipenv/whatever.py') + + AssertEqual + \ {'command': 'cd %s:h && ' . ale#Escape('pipenv') . ' run isort -'}, + \ ale#fixers#isort#Fix(bufnr('')) From d27a3f453cc15e6b801486115ef5693a499efcc3 Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Tue, 6 Oct 2020 04:07:10 -0400 Subject: [PATCH 5/8] Ignore executable check when executable is pipenv --- autoload/ale/fixers/isort.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/ale/fixers/isort.vim b/autoload/ale/fixers/isort.vim index 13825f7e..0ef166e5 100644 --- a/autoload/ale/fixers/isort.vim +++ b/autoload/ale/fixers/isort.vim @@ -24,7 +24,7 @@ function! ale#fixers#isort#Fix(buffer) abort \ ? ' run isort' \ : '' - if !executable(l:executable) + if !executable(l:executable) && l:executable != 'pipenv' return 0 endif From 340e9660556b87fafb4b9665115bbdcf831c9bc3 Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Wed, 25 Nov 2020 17:34:03 -0500 Subject: [PATCH 6/8] Fix comparison operator --- autoload/ale/fixers/isort.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/ale/fixers/isort.vim b/autoload/ale/fixers/isort.vim index 0ef166e5..1ae6f590 100644 --- a/autoload/ale/fixers/isort.vim +++ b/autoload/ale/fixers/isort.vim @@ -24,7 +24,7 @@ function! ale#fixers#isort#Fix(buffer) abort \ ? ' run isort' \ : '' - if !executable(l:executable) && l:executable != 'pipenv' + if !executable(l:executable) && l:executable !=# 'pipenv' return 0 endif From 713e53e3f64520b0501cb5d7b4c525946e6c7783 Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Wed, 25 Nov 2020 17:51:27 -0500 Subject: [PATCH 7/8] Ensure isort / pipenv test conforms to ALE coding standards --- test/fixers/test_isort_fixer_callback.vader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixers/test_isort_fixer_callback.vader b/test/fixers/test_isort_fixer_callback.vader index 76c8a4cb..3941f6dd 100644 --- a/test/fixers/test_isort_fixer_callback.vader +++ b/test/fixers/test_isort_fixer_callback.vader @@ -56,5 +56,5 @@ Execute(Pipenv is detected when python_isort_auto_pipenv is set): call ale#test#SetFilename('/testplugin/test/python_fixtures/pipenv/whatever.py') AssertEqual - \ {'command': 'cd %s:h && ' . ale#Escape('pipenv') . ' run isort -'}, + \ {'command': ale#path#BufferCdString(bufnr('')) . ale#Escape('pipenv') . ' run isort -'}, \ ale#fixers#isort#Fix(bufnr('')) From ce3d891bed18f610beb9117518ef560871ef00a0 Mon Sep 17 00:00:00 2001 From: Ivor Peles Date: Wed, 25 Nov 2020 17:57:40 -0500 Subject: [PATCH 8/8] Use better string comparison operators in isort fixer --- autoload/ale/fixers/isort.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/ale/fixers/isort.vim b/autoload/ale/fixers/isort.vim index 1ae6f590..55bb550e 100644 --- a/autoload/ale/fixers/isort.vim +++ b/autoload/ale/fixers/isort.vim @@ -24,7 +24,7 @@ function! ale#fixers#isort#Fix(buffer) abort \ ? ' run isort' \ : '' - if !executable(l:executable) && l:executable !=# 'pipenv' + if !executable(l:executable) && l:executable isnot# 'pipenv' return 0 endif