Add ruby fixer using `rubocop --auto-correct` (#689)

* add ruby fixer for `rubocop --auto-correct`
This commit is contained in:
Lynn Dylan Hurley 2017-06-25 14:04:14 -05:00 committed by w0rp
parent 7d73a1602b
commit 7f6e5dc65b
4 changed files with 64 additions and 0 deletions

View File

@ -42,6 +42,11 @@ let s:default_registry = {
\ 'suggested_filetypes': ['python'],
\ 'description': 'Fix Python files with yapf.',
\ },
\ 'rubocop': {
\ 'function': 'ale#fixers#rubocop#Fix',
\ 'suggested_filetypes': ['ruby'],
\ 'description': 'Fix ruby files with rubocop --auto-correct.',
\ },
\}
" Reset the function registry to the default entries.

View File

@ -0,0 +1,31 @@
" Set this option to change Rubocop options.
if !exists('g:ale_ruby_rubocop_options')
" let g:ale_ruby_rubocop_options = '--lint'
let g:ale_ruby_rubocop_options = ''
endif
if !exists('g:ale_ruby_rubocop_executable')
let g:ale_ruby_rubocop_executable = 'rubocop'
endif
function! ale#fixers#rubocop#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'ruby_rubocop_executable')
endfunction
function! ale#fixers#rubocop#GetCommand(buffer) abort
let l:executable = ale#Var(a:buffer, 'ruby_rubocop_executable')
let l:exec_args = l:executable =~? 'bundle$'
\ ? ' exec rubocop'
\ : ''
return ale#Escape(l:executable) . l:exec_args
\ . ' --auto-correct %t'
endfunction
function! ale#fixers#rubocop#Fix(buffer) abort
return {
\ 'command': ale#fixers#rubocop#GetCommand(a:buffer),
\ 'read_temporary_file': 1,
\}
endfunction

View File

@ -0,0 +1,28 @@
Before:
Save g:ale_ruby_rubocop_executable
" Use an invalid global executable, so we don't match it.
let g:ale_ruby_rubocop_executable = 'xxxinvalid'
silent! execute 'cd /testplugin/test/command_callback'
silent cd ..
silent cd command_callback
let g:dir = getcwd()
After:
Restore
silent execute 'cd ' . fnameescape(g:dir)
" Set the file to something else,
" or we'll cause issues when running other tests
silent file 'dummy.rb'
unlet! g:dir
Execute(The rubocop callback should return the correct default values):
silent execute 'file ' . fnameescape(g:dir . '/ruby_paths/dummy.rb')
AssertEqual
\ {'read_temporary_file': 1,
\ 'command': "'" . g:ale_ruby_rubocop_executable . "' "
\ . '--auto-correct %t' },
\ ale#fixers#rubocop#Fix(bufnr(''))