From f12d312aa4aa49c4698056933030cd5adb60b489 Mon Sep 17 00:00:00 2001 From: Alvin Chan Date: Tue, 22 Jan 2019 02:24:15 -0800 Subject: [PATCH] Add `babylon` as default Prettier parser (#2220) * Mimic Prettier's default parser by setting it to `babylon` * Add tests to check default Prettier `parser` * Set Prettier default parser based on version * Update the comment to explain the reason for an explicit default --- autoload/ale/fixers/prettier.vim | 10 ++++++- .../fixers/test_prettier_fixer_callback.vader | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/autoload/ale/fixers/prettier.vim b/autoload/ale/fixers/prettier.vim index 58dea159..95932474 100644 --- a/autoload/ale/fixers/prettier.vim +++ b/autoload/ale/fixers/prettier.vim @@ -47,6 +47,15 @@ function! ale#fixers#prettier#ApplyFixForVersion(buffer, version_output) abort " Append the --parser flag depending on the current filetype (unless it's " already set in g:javascript_prettier_options). if empty(expand('#' . a:buffer . ':e')) && match(l:options, '--parser') == -1 + " Mimic Prettier's defaults. In cases without a file extension or + " filetype (scratch buffer), Prettier needs `parser` set to know how + " to process the buffer. + if ale#semver#GTE(l:version, [1, 16, 0]) + let l:parser = 'babel' + else + let l:parser = 'babylon' + endif + let l:prettier_parsers = { \ 'typescript': 'typescript', \ 'css': 'css', @@ -60,7 +69,6 @@ function! ale#fixers#prettier#ApplyFixForVersion(buffer, version_output) abort \ 'yaml': 'yaml', \ 'html': 'html', \} - let l:parser = '' for l:filetype in split(getbufvar(a:buffer, '&filetype'), '\.') if has_key(l:prettier_parsers, l:filetype) diff --git a/test/fixers/test_prettier_fixer_callback.vader b/test/fixers/test_prettier_fixer_callback.vader index 7f25471b..05ed421e 100644 --- a/test/fixers/test_prettier_fixer_callback.vader +++ b/test/fixers/test_prettier_fixer_callback.vader @@ -96,6 +96,34 @@ Execute(The version number should be cached): \ }, \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), []) +Execute(Should set --parser to `babylon` by default, < 1.16.0): + call ale#test#SetFilename('../prettier-test-files/testfile') + + set filetype=javascript + + AssertEqual + \ { + \ 'command': ale#path#CdString(expand('%:p:h')) + \ . ale#Escape(g:ale_javascript_prettier_executable) + \ . ' --parser babylon' + \ . ' --stdin-filepath %s --stdin', + \ }, + \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0']) + +Execute(Should set --parser to `babel` by default, >= 1.16.0): + call ale#test#SetFilename('../prettier-test-files/testfile') + + set filetype=javascript + + AssertEqual + \ { + \ 'command': ale#path#CdString(expand('%:p:h')) + \ . ale#Escape(g:ale_javascript_prettier_executable) + \ . ' --parser babel' + \ . ' --stdin-filepath %s --stdin', + \ }, + \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.16.0']) + Execute(Should set --parser based on filetype, TypeScript): call ale#test#SetFilename('../prettier-test-files/testfile')