diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim index d26c71a..598be6d 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 0000000..905a608 --- /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 0000000..be25d33 --- /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 0000000..e69de29 diff --git a/test/fixers/test_elixir_fixer_callback.vader b/test/fixers/test_elixir_fixer_callback.vader new file mode 100644 index 0000000..ff4786e --- /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(''))