Fix Rubocop filename handling
In my previous change, I updated the Rubocop linter to pass the filename to Rubocop. This change was tested on a file I expected Rubocop to ignore and the experience in vim was as I expected. However, I soon found that ALE wasn't finding errors in files that should not be ignored. After investigation, I found a few issues that this commit fixes: 1. We were not properly passing the current filename. We now use `expand` to get the filename. 2. The regular expression used in the callback was expecting the static value of `_` for the filename in output. We now use a looser regular expression that begins matching on the first `:`. 3. The linter was defined statically. By using the current filename when defining the command the linter would always use the filename of the first Ruby file the user opened. We now use a `command_callback` to inject the proper filename. I tested these changes on a configuration with included and excluded files and found it to work as I expected. Apologies for the earlier incorrect change.
This commit is contained in:
parent
97131262ab
commit
f2fc7072b9
@ -6,7 +6,7 @@ function! ale_linters#ruby#rubocop#Handle(buffer, lines) abort
|
|||||||
"
|
"
|
||||||
" <path>/_:47:14: 83:29: C: Prefer single-quoted strings when you don't
|
" <path>/_:47:14: 83:29: C: Prefer single-quoted strings when you don't
|
||||||
" need string interpolation or special symbols.
|
" need string interpolation or special symbols.
|
||||||
let l:pattern = '\v_:(\d+):(\d+): (.): (.+)'
|
let l:pattern = '\v:(\d+):(\d+): (.): (.+)'
|
||||||
let l:output = []
|
let l:output = []
|
||||||
|
|
||||||
for l:line in a:lines
|
for l:line in a:lines
|
||||||
@ -34,6 +34,12 @@ function! ale_linters#ruby#rubocop#Handle(buffer, lines) abort
|
|||||||
return l:output
|
return l:output
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ruby#rubocop#GetCommand(_buffer) abort
|
||||||
|
return 'rubocop --format emacs --force-exclusion ' .
|
||||||
|
\ g:ale_ruby_rubocop_options .
|
||||||
|
\ ' --stdin ' . expand('%')
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Set this option to change Rubocop options.
|
" Set this option to change Rubocop options.
|
||||||
if !exists('g:ale_ruby_rubocop_options')
|
if !exists('g:ale_ruby_rubocop_options')
|
||||||
" let g:ale_ruby_rubocop_options = '--lint'
|
" let g:ale_ruby_rubocop_options = '--lint'
|
||||||
@ -43,8 +49,6 @@ endif
|
|||||||
call ale#linter#Define('ruby', {
|
call ale#linter#Define('ruby', {
|
||||||
\ 'name': 'rubocop',
|
\ 'name': 'rubocop',
|
||||||
\ 'executable': 'rubocop',
|
\ 'executable': 'rubocop',
|
||||||
\ 'command': 'rubocop --format emacs --force-exclusion --stdin '
|
\ 'command_callback': 'ale_linters#ruby#rubocop#GetCommand',
|
||||||
\ . g:ale_ruby_rubocop_options
|
|
||||||
\ . ' %s',
|
|
||||||
\ 'callback': 'ale_linters#ruby#rubocop#Handle',
|
\ 'callback': 'ale_linters#ruby#rubocop#Handle',
|
||||||
\})
|
\})
|
||||||
|
Loading…
Reference in New Issue
Block a user