summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraliou <aliou@users.noreply.github.com>2017-08-29 17:05:19 +0200
committerw0rp <w0rp@users.noreply.github.com>2017-08-29 16:05:19 +0100
commitb36882e72e14673a62bcc129f00e58caa5f0c9d3 (patch)
tree2f2d2324c95de9f6b016bf4d164a0e31d8293ed2
parent87fb72346ac2353000c987cbc24326301d95a343 (diff)
downloadale-b36882e72e14673a62bcc129f00e58caa5f0c9d3.zip
Add support for prettier configuration file. (#886)
* Add support for prettier configuration file. As of version 1.6.0, prettier allows passing a `--config` argument with a path to a configuration file. * Add test prettier configuration file. * Add option to use local prettier configuration. * Add description for new prettier option. * Also check if the config is present before using it.
-rw-r--r--autoload/ale/fixers/prettier.vim25
-rw-r--r--doc/ale-javascript.txt6
-rw-r--r--test/fixers/test_prettier_fixer_callback.vader58
-rw-r--r--test/prettier-test-files/testfile.js0
-rw-r--r--test/prettier-test-files/with_config/.prettierrc0
-rw-r--r--test/prettier-test-files/with_config/testfile.js0
6 files changed, 88 insertions, 1 deletions
diff --git a/autoload/ale/fixers/prettier.vim b/autoload/ale/fixers/prettier.vim
index 7f82ecfd..581536e6 100644
--- a/autoload/ale/fixers/prettier.vim
+++ b/autoload/ale/fixers/prettier.vim
@@ -4,8 +4,27 @@
call ale#Set('javascript_prettier_executable', 'prettier')
call ale#Set('javascript_prettier_use_global', 0)
+call ale#Set('javascript_prettier_use_local_config', 0)
call ale#Set('javascript_prettier_options', '')
+function! s:FindConfig(buffer) abort
+ for l:filename in [
+ \ '.prettierrc',
+ \ 'prettier.config.js',
+ \ 'package.json',
+ \ ]
+
+ let l:config = ale#path#FindNearestFile(a:buffer, l:filename)
+
+ if !empty(l:config)
+ return l:config
+ endif
+ endfor
+
+ return ''
+endfunction
+
+
function! ale#fixers#prettier#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'javascript_prettier', [
\ 'node_modules/.bin/prettier_d',
@@ -16,11 +35,15 @@ endfunction
function! ale#fixers#prettier#Fix(buffer) abort
let l:options = ale#Var(a:buffer, 'javascript_prettier_options')
+ let l:config = s:FindConfig(a:buffer)
+ let l:use_config = ale#Var(a:buffer, 'javascript_prettier_use_local_config')
+ \ && !empty(l:config)
return {
\ 'command': ale#Escape(ale#fixers#prettier#GetExecutable(a:buffer))
\ . ' %t'
- \ . ' ' . l:options
+ \ . (!empty(l:options) ? ' ' . l:options : '')
+ \ . (l:use_config ? ' --config ' . ale#Escape(l:config) : '')
\ . ' --write',
\ 'read_temporary_file': 1,
\}
diff --git a/doc/ale-javascript.txt b/doc/ale-javascript.txt
index 3adba503..95d2504a 100644
--- a/doc/ale-javascript.txt
+++ b/doc/ale-javascript.txt
@@ -86,6 +86,12 @@ g:ale_javascript_prettier_use_global *g:ale_javascript_prettier_use_global*
See |ale-integrations-local-executables|
+g:ale_javascript_prettier_use_local_config *g:ale_javascript_prettier_use_local_config*
+ *b:ale_javascript_prettier_use_local_config*
+ Type: |Number|
+ Default: `0`
+
+ This variable can be set to use the local prettier configuration file.
===============================================================================
prettier-eslint *ale-javascript-prettier-eslint*
diff --git a/test/fixers/test_prettier_fixer_callback.vader b/test/fixers/test_prettier_fixer_callback.vader
new file mode 100644
index 00000000..1eb24dae
--- /dev/null
+++ b/test/fixers/test_prettier_fixer_callback.vader
@@ -0,0 +1,58 @@
+Before:
+ call ale#test#SetDirectory('/testplugin/test/fixers')
+ Save g:ale_javascript_prettier_executable
+ Save g:ale_javascript_prettier_options
+
+ " Use an invalid global executable, so we don't match it.
+ let g:ale_javascript_prettier_executable = 'xxxinvalid'
+ let g:ale_javascript_prettier_options = ''
+
+ call ale#test#SetDirectory('/testplugin/test/fixers')
+ silent cd ..
+ silent cd command_callback
+ let g:dir = getcwd()
+
+After:
+ let g:ale_has_override = {}
+ call ale#test#RestoreDirectory()
+
+Execute(The prettier callback should return the correct default values):
+ call ale#test#SetFilename('../prettier-test-files/testfile.js')
+
+ AssertEqual
+ \ {
+ \ 'read_temporary_file': 1,
+ \ 'command': ale#Escape(g:ale_javascript_prettier_executable)
+ \ . ' %t'
+ \ . ' --write',
+ \ },
+ \ ale#fixers#prettier#Fix(bufnr(''))
+
+Execute(The prettier callback should include configuration files when the option is set):
+ let g:ale_javascript_prettier_use_local_config = 1
+ call ale#test#SetFilename('../prettier-test-files/with_config/testfile.js')
+
+ AssertEqual
+ \ {
+ \ 'read_temporary_file': 1,
+ \ 'command': ale#Escape(g:ale_javascript_prettier_executable)
+ \ . ' %t'
+ \ . ' --config ' . ale#Escape(simplify(g:dir . '/../prettier-test-files/with_config/.prettierrc'))
+ \ . ' --write',
+ \ },
+ \ ale#fixers#prettier#Fix(bufnr(''))
+
+Execute(The prettier callback should include custom prettier options):
+ let g:ale_javascript_prettier_options = '--no-semi'
+ call ale#test#SetFilename('../prettier-test-files/with_config/testfile.js')
+
+ AssertEqual
+ \ {
+ \ 'read_temporary_file': 1,
+ \ 'command': ale#Escape(g:ale_javascript_prettier_executable)
+ \ . ' %t'
+ \ . ' --no-semi'
+ \ . ' --config ' . ale#Escape(simplify(g:dir . '/../prettier-test-files/with_config/.prettierrc'))
+ \ . ' --write',
+ \ },
+ \ ale#fixers#prettier#Fix(bufnr(''))
diff --git a/test/prettier-test-files/testfile.js b/test/prettier-test-files/testfile.js
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/prettier-test-files/testfile.js
diff --git a/test/prettier-test-files/with_config/.prettierrc b/test/prettier-test-files/with_config/.prettierrc
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/prettier-test-files/with_config/.prettierrc
diff --git a/test/prettier-test-files/with_config/testfile.js b/test/prettier-test-files/with_config/testfile.js
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/prettier-test-files/with_config/testfile.js