From 43653ef54816e5219de56cf57073a93b4ce957b8 Mon Sep 17 00:00:00 2001 From: Carlos Ramos Date: Fri, 20 Oct 2017 17:13:25 -0400 Subject: [PATCH 1/3] new fixer elixir mix format (only available in elixir > 1.6) --- autoload/ale/fix/registry.vim | 5 +++++ autoload/ale/fixers/mix_format.vim | 17 +++++++++++++++++ autoload/ale/handlers/elixir.vim | 5 +++++ test/elixir-test-files/testfile.ex | 0 test/fixers/test_elixir_fixer_callback.vader | 16 ++++++++++++++++ 5 files changed, 43 insertions(+) create mode 100644 autoload/ale/fixers/mix_format.vim create mode 100644 autoload/ale/handlers/elixir.vim create mode 100644 test/elixir-test-files/testfile.ex create mode 100644 test/fixers/test_elixir_fixer_callback.vader diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim index d26c71ab..598be6d0 100644 --- a/autoload/ale/fix/registry.vim +++ b/autoload/ale/fix/registry.vim @@ -27,6 +27,11 @@ let s:default_registry = { \ 'suggested_filetypes': ['javascript', 'typescript'], \ 'description': 'Apply eslint --fix to a file.', \ }, +\ 'mix_format': { +\ 'function': 'ale#fixers#mix_format#Fix', +\ 'suggested_filetypes': ['elixir'], +\ 'description': 'Apply mix format to a file.', +\ }, \ 'format': { \ 'function': 'ale#fixers#format#Fix', \ 'suggested_filetypes': ['elm'], diff --git a/autoload/ale/fixers/mix_format.vim b/autoload/ale/fixers/mix_format.vim new file mode 100644 index 00000000..905a6089 --- /dev/null +++ b/autoload/ale/fixers/mix_format.vim @@ -0,0 +1,17 @@ +" Author: carakan +" Description: Fixing files with elixir formatter 'mix format'. + +call ale#Set('elixir_mix_executable', 'mix') + +function! ale#fixers#mix_format#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'elixir_mix_executable') +endfunction + +function! ale#fixers#mix_format#Fix(buffer) abort + return { + \ 'command': ale#handlers#elixir#GetExecutable(a:buffer) + \ . ale#fixers#mix_format#GetExecutable(a:buffer) + \ . ' format %t', + \ 'read_temporary_file': 1, + \} +endfunction diff --git a/autoload/ale/handlers/elixir.vim b/autoload/ale/handlers/elixir.vim new file mode 100644 index 00000000..be25d331 --- /dev/null +++ b/autoload/ale/handlers/elixir.vim @@ -0,0 +1,5 @@ +call ale#Set('elixir_executable', '') + +function! ale#handlers#elixir#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'elixir_executable') +endfunction diff --git a/test/elixir-test-files/testfile.ex b/test/elixir-test-files/testfile.ex new file mode 100644 index 00000000..e69de29b diff --git a/test/fixers/test_elixir_fixer_callback.vader b/test/fixers/test_elixir_fixer_callback.vader new file mode 100644 index 00000000..ff4786e7 --- /dev/null +++ b/test/fixers/test_elixir_fixer_callback.vader @@ -0,0 +1,16 @@ +Before: + call ale#test#SetDirectory('/testplugin/test/fixers') + +After: + call ale#test#RestoreDirectory() + +Execute(The executable path should be correct): + call ale#test#SetFilename('../elixir-test-files/testfile.ex') + + AssertEqual + \ { + \ 'read_temporary_file': 1, + \ 'command': 'mix format' + \ . ' %t', + \ }, + \ ale#fixers#elixir#Fix(bufnr('')) From 3212278c91bc70d39d1affd6fc86a19ff8cee832 Mon Sep 17 00:00:00 2001 From: Carlos Ramos Date: Sun, 22 Oct 2017 09:22:16 -0400 Subject: [PATCH 2/3] fix test's and delete unused code --- autoload/ale/fixers/mix_format.vim | 3 +-- autoload/ale/handlers/elixir.vim | 5 ----- test/fixers/test_elixir_fixer_callback.vader | 16 --------------- .../test_mix_format_fixer_callback.vader | 20 +++++++++++++++++++ 4 files changed, 21 insertions(+), 23 deletions(-) delete mode 100644 autoload/ale/handlers/elixir.vim delete mode 100644 test/fixers/test_elixir_fixer_callback.vader create mode 100644 test/fixers/test_mix_format_fixer_callback.vader diff --git a/autoload/ale/fixers/mix_format.vim b/autoload/ale/fixers/mix_format.vim index 905a6089..04866408 100644 --- a/autoload/ale/fixers/mix_format.vim +++ b/autoload/ale/fixers/mix_format.vim @@ -9,8 +9,7 @@ endfunction function! ale#fixers#mix_format#Fix(buffer) abort return { - \ 'command': ale#handlers#elixir#GetExecutable(a:buffer) - \ . ale#fixers#mix_format#GetExecutable(a:buffer) + \ 'command': ale#Escape(ale#fixers#mix_format#GetExecutable(a:buffer)) \ . ' format %t', \ 'read_temporary_file': 1, \} diff --git a/autoload/ale/handlers/elixir.vim b/autoload/ale/handlers/elixir.vim deleted file mode 100644 index be25d331..00000000 --- a/autoload/ale/handlers/elixir.vim +++ /dev/null @@ -1,5 +0,0 @@ -call ale#Set('elixir_executable', '') - -function! ale#handlers#elixir#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'elixir_executable') -endfunction diff --git a/test/fixers/test_elixir_fixer_callback.vader b/test/fixers/test_elixir_fixer_callback.vader deleted file mode 100644 index ff4786e7..00000000 --- a/test/fixers/test_elixir_fixer_callback.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - call ale#test#RestoreDirectory() - -Execute(The executable path should be correct): - call ale#test#SetFilename('../elixir-test-files/testfile.ex') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': 'mix format' - \ . ' %t', - \ }, - \ ale#fixers#elixir#Fix(bufnr('')) diff --git a/test/fixers/test_mix_format_fixer_callback.vader b/test/fixers/test_mix_format_fixer_callback.vader new file mode 100644 index 00000000..c6c97c57 --- /dev/null +++ b/test/fixers/test_mix_format_fixer_callback.vader @@ -0,0 +1,20 @@ +Before: + call ale#test#SetDirectory('/testplugin/test/fixers') + Save g:ale_elixir_mix_executable + + let g:ale_elixir_mix_executable = 'xxxinvalid' + +After: + call ale#test#RestoreDirectory() + +Execute(The mix_format callback should return the correct default values): + call ale#test#SetFilename('../elixir-test-files/testfile.ex') + + AssertEqual + \ { + \ 'read_temporary_file': 1, + \ 'command': ale#Escape('xxxinvalid') + \ . ' format %t', + \ }, + \ ale#fixers#mix_format#Fix(bufnr('')) + From be1377f6d7e642a8b56bb0589dc9cc48fc836c13 Mon Sep 17 00:00:00 2001 From: Carlos Ramos Date: Sun, 22 Oct 2017 19:44:44 -0400 Subject: [PATCH 3/3] add basic documentation for elixir mix --- doc/ale-elixir.txt | 17 +++++++++++++++++ doc/ale.txt | 2 ++ 2 files changed, 19 insertions(+) create mode 100644 doc/ale-elixir.txt diff --git a/doc/ale-elixir.txt b/doc/ale-elixir.txt new file mode 100644 index 00000000..a5318c0f --- /dev/null +++ b/doc/ale-elixir.txt @@ -0,0 +1,17 @@ +=============================================================================== +ALE Elixir Integration *ale-elixir-options* + + +=============================================================================== +mix *ale-elixir-mix* + +g:ale_elixir_mix_options *g:ale_elixir_mix_options* + *b:ale_elixir_mix_options* + Type: |String| + Default: `'mix'` + + + This variable can be changed to specify the mix executable. + +=============================================================================== + vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/doc/ale.txt b/doc/ale.txt index fb0b5a76..b764fe6b 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -48,6 +48,8 @@ CONTENTS *ale-contents* dartanalyzer........................|ale-dart-dartanalyzer| dockerfile............................|ale-dockerfile-options| hadolint............................|ale-dockerfile-hadolint| + elixir................................|ale-elixir-options| + mix.................................|ale-elixir-mix| elm...................................|ale-elm-options| elm-format..........................|ale-elm-elm-format| elm-make............................|ale-elm-elm-make|