Add ruby fixer using rubocop --auto-correct (#689)
				
					
				
			* add ruby fixer for `rubocop --auto-correct`
This commit is contained in:
		
							parent
							
								
									7d73a1602b
								
							
						
					
					
						commit
						7f6e5dc65b
					
				@ -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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								autoload/ale/fixers/rubocop.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								autoload/ale/fixers/rubocop.vim
									
									
									
									
									
										Normal 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
 | 
			
		||||
							
								
								
									
										0
									
								
								test/command_callback/ruby_paths/dummy.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								test/command_callback/ruby_paths/dummy.rb
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										28
									
								
								test/fixers/test_rubocop_fixer_callback.vader
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								test/fixers/test_rubocop_fixer_callback.vader
									
									
									
									
									
										Normal 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(''))
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user