diff options
-rw-r--r-- | autoload/ale/fixers/prettier_eslint.vim | 30 | ||||
-rw-r--r-- | doc/ale-javascript.txt | 13 | ||||
-rw-r--r-- | test/fixers/test_prettier_eslint_fixer.callback.vader | 55 |
3 files changed, 74 insertions, 24 deletions
diff --git a/autoload/ale/fixers/prettier_eslint.vim b/autoload/ale/fixers/prettier_eslint.vim index 524c52d1..5dd9102e 100644 --- a/autoload/ale/fixers/prettier_eslint.vim +++ b/autoload/ale/fixers/prettier_eslint.vim @@ -6,7 +6,6 @@ function! ale#fixers#prettier_eslint#SetOptionDefaults() abort call ale#Set('javascript_prettier_eslint_executable', 'prettier-eslint') call ale#Set('javascript_prettier_eslint_use_global', 0) call ale#Set('javascript_prettier_eslint_options', '') - call ale#Set('javascript_prettier_eslint_legacy', 0) endfunction call ale#fixers#prettier_eslint#SetOptionDefaults() @@ -19,16 +18,43 @@ function! ale#fixers#prettier_eslint#GetExecutable(buffer) abort endfunction function! ale#fixers#prettier_eslint#Fix(buffer) abort + let l:executable = ale#fixers#prettier_eslint#GetExecutable(a:buffer) + + let l:command = ale#semver#HasVersion(l:executable) + \ ? '' + \ : ale#Escape(l:executable) . ' --version' + + return { + \ 'command': l:command, + \ 'chain_with': 'ale#fixers#prettier_eslint#ApplyFixForVersion', + \} +endfunction + +function! ale#fixers#prettier_eslint#ApplyFixForVersion(buffer, version_output) abort let l:options = ale#Var(a:buffer, 'javascript_prettier_eslint_options') let l:executable = ale#fixers#prettier_eslint#GetExecutable(a:buffer) - let l:config = !ale#Var(a:buffer, 'javascript_prettier_eslint_legacy') + let l:version = ale#semver#GetVersion(l:executable, a:version_output) + + " 4.2.0 is the first version with --eslint-config-path + let l:config = ale#semver#GTE(l:version, [4, 2, 0]) \ ? ale#handlers#eslint#FindConfig(a:buffer) \ : '' let l:eslint_config_option = !empty(l:config) \ ? ' --eslint-config-path ' . ale#Escape(l:config) \ : '' + " 4.4.0 is the first version with --stdin-filepath + if ale#semver#GTE(l:version, [4, 4, 0]) + return { + \ 'command': ale#path#BufferCdString(a:buffer) + \ . ale#Escape(l:executable) + \ . l:eslint_config_option + \ . (!empty(l:options) ? ' ' . l:options : '') + \ . ' --stdin-filepath %s --stdin', + \} + endif + return { \ 'command': ale#Escape(l:executable) \ . ' %t' diff --git a/doc/ale-javascript.txt b/doc/ale-javascript.txt index 365dfa62..3934dfb2 100644 --- a/doc/ale-javascript.txt +++ b/doc/ale-javascript.txt @@ -171,11 +171,6 @@ g:ale_javascript_prettier_use_global *g:ale_javascript_prettier_use_global* =============================================================================== prettier-eslint *ale-javascript-prettier-eslint* -ALE supports `prettier-eslint` >= 4.2.0. Using lower version is not recommended -because it cannot be configured to use the ESLint configuration file for input -given via stdin. However ALE could be set up on your own risk with older -versions with |g:ale_javascript_prettier_eslint_legacy| - g:ale_javascript_prettier_eslint_executable *g:ale_javascript_prettier_eslint_executable* *b:ale_javascript_prettier_eslint_executable* @@ -202,14 +197,6 @@ g:ale_javascript_prettier_eslint_use_global See |ale-integrations-local-executables| -g:ale_javascript_prettier_eslint_legacy - *g:ale_javascript_prettier_eslint_legacy* - *b:ale_javascript_prettier_eslint_legacy* - Type: |Number| - Default: `0` - - Fallback option for `prettier-eslint` < 4.2.0 - =============================================================================== prettier-standard *ale-javascript-prettier-standard* diff --git a/test/fixers/test_prettier_eslint_fixer.callback.vader b/test/fixers/test_prettier_eslint_fixer.callback.vader index b48a7085..1ff11fe7 100644 --- a/test/fixers/test_prettier_eslint_fixer.callback.vader +++ b/test/fixers/test_prettier_eslint_fixer.callback.vader @@ -4,12 +4,10 @@ Before: Save g:ale_javascript_prettier_eslint_executable Save g:ale_javascript_prettier_eslint_use_global Save g:ale_javascript_prettier_eslint_options - Save g:ale_javascript_prettier_eslint_legacy unlet! g:ale_javascript_prettier_eslint_executable unlet! g:ale_javascript_prettier_eslint_use_global unlet! g:ale_javascript_prettier_eslint_options - unlet! g:ale_javascript_prettier_eslint_legacy call ale#fixers#prettier_eslint#SetOptionDefaults() @@ -19,9 +17,9 @@ After: unlet! b:ale_javascript_prettier_eslint_executable unlet! b:ale_javascript_prettier_eslint_use_global unlet! b:ale_javascript_prettier_eslint_options - unlet! b:ale_javascript_prettier_eslint_legacy call ale#test#RestoreDirectory() + call ale#semver#ResetVersionCache() Execute(The default command should be correct): AssertEqual @@ -32,7 +30,7 @@ Execute(The default command should be correct): \ . ' %t' \ . ' --write' \ }, - \ ale#fixers#prettier_eslint#Fix(bufnr('')) + \ ale#fixers#prettier_eslint#ApplyFixForVersion(bufnr(''), []) Execute(Additional options should be used when set): let b:ale_javascript_prettier_eslint_options = '--foobar' @@ -45,9 +43,9 @@ Execute(Additional options should be used when set): \ . ' %t' \ . ' --foobar --write' \ }, - \ ale#fixers#prettier_eslint#Fix(bufnr('')) + \ ale#fixers#prettier_eslint#ApplyFixForVersion(bufnr(''), []) -Execute(Configuration files should be detected): +Execute(--eslint-config-path should be set for 4.2.0 and up): call ale#test#SetFilename('eslint-test-files/react-app/foo/bar.js') AssertEqual @@ -59,11 +57,10 @@ Execute(Configuration files should be detected): \ . ' --eslint-config-path ' . ale#Escape(ale#path#Winify(g:dir . '/eslint-test-files/react-app/.eslintrc.js')) \ . ' --write' \ }, - \ ale#fixers#prettier_eslint#Fix(bufnr('')) + \ ale#fixers#prettier_eslint#ApplyFixForVersion(bufnr(''), ['4.2.0']) -Execute(Configuration files should be disabled if the legacy option is on): +Execute(--eslint-config-path shouldn't be used for older versions): call ale#test#SetFilename('eslint-test-files/react-app/foo/bar.js') - let b:ale_javascript_prettier_eslint_legacy = 1 AssertEqual \ { @@ -73,4 +70,44 @@ Execute(Configuration files should be disabled if the legacy option is on): \ . ' %t' \ . ' --write' \ }, + \ ale#fixers#prettier_eslint#ApplyFixForVersion(bufnr(''), []) + +Execute(The version check should be correct): + AssertEqual + \ { + \ 'chain_with': 'ale#fixers#prettier_eslint#ApplyFixForVersion', + \ 'command': ale#Escape('prettier-eslint') . ' --version', + \ }, + \ ale#fixers#prettier_eslint#Fix(bufnr('')) + +Execute(The new --stdin-filepath option should be used when the version is new enough): + call ale#test#SetFilename('eslint-test-files/react-app/foo/bar.js') + + AssertEqual + \ { + \ 'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' + \ . ale#Escape('prettier-eslint') + \ . ' --eslint-config-path ' . ale#Escape(ale#path#Winify(g:dir . '/eslint-test-files/react-app/.eslintrc.js')) + \ . ' --stdin-filepath %s --stdin', + \ }, + \ ale#fixers#prettier_eslint#ApplyFixForVersion(bufnr(''), ['4.4.0']) + +Execute(The version number should be cached): + call ale#fixers#prettier_eslint#ApplyFixForVersion(bufnr(''), ['4.4.0']) + + " The version command should be skipped. + AssertEqual + \ { + \ 'chain_with': 'ale#fixers#prettier_eslint#ApplyFixForVersion', + \ 'command': '', + \ }, \ ale#fixers#prettier_eslint#Fix(bufnr('')) + + " The newer command should be used. + AssertEqual + \ { + \ 'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' + \ . ale#Escape('prettier-eslint') + \ . ' --stdin-filepath %s --stdin', + \ }, + \ ale#fixers#prettier_eslint#ApplyFixForVersion(bufnr(''), []) |