1
0
Fork 0
mirror of synced 2024-11-26 18:55:34 -05:00
ultimate-vim/sources_non_forked/ale/ale_linters/ruby/reek.vim

70 lines
2.1 KiB
VimL
Raw Normal View History

" Author: Eddie Lebow https://github.com/elebow
" Description: Reek, a code smell detector for Ruby files
call ale#Set('ruby_reek_show_context', 0)
call ale#Set('ruby_reek_show_wiki_link', 0)
2018-09-24 20:40:17 -04:00
call ale#Set('ruby_reek_options', '')
call ale#Set('ruby_reek_executable', 'reek')
2019-05-17 10:09:13 -04:00
function! ale_linters#ruby#reek#GetCommand(buffer, version) abort
2018-09-24 20:40:17 -04:00
let l:executable = ale#Var(a:buffer, 'ruby_reek_executable')
2018-07-04 06:53:25 -04:00
" Tell reek what the filename is if the version of reek is new enough.
2019-05-17 10:09:13 -04:00
let l:display_name_args = ale#semver#GTE(a:version, [5, 0, 0])
2018-07-04 06:53:25 -04:00
\ ? ' --stdin-filename %s'
\ : ''
2019-11-16 10:28:42 -05:00
return ale#ruby#EscapeExecutable(l:executable, 'reek')
2018-11-01 06:03:42 -04:00
\ . ' -f json --no-progress --no-color --force-exclusion'
2018-07-04 06:53:25 -04:00
\ . l:display_name_args
endfunction
2022-08-08 09:45:56 -04:00
function! s:GetDocumentationLink(error) abort
return get(a:error, 'documentation_link', get(a:error, 'wiki_link', ''))
endfunction
function! s:BuildText(buffer, error) abort
let l:parts = []
if ale#Var(a:buffer, 'ruby_reek_show_context')
call add(l:parts, a:error.context)
endif
call add(l:parts, a:error.message)
if ale#Var(a:buffer, 'ruby_reek_show_wiki_link')
2022-08-08 09:45:56 -04:00
call add(l:parts, '[' . s:GetDocumentationLink(a:error) . ']')
endif
return join(l:parts, ' ')
endfunction
2018-07-04 06:53:25 -04:00
function! ale_linters#ruby#reek#Handle(buffer, lines) abort
let l:output = []
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
for l:location in l:error.lines
call add(l:output, {
\ 'lnum': l:location,
\ 'type': 'W',
\ 'text': s:BuildText(a:buffer, l:error),
\ 'code': l:error.smell_type,
\})
endfor
endfor
return l:output
endfunction
call ale#linter#Define('ruby', {
2018-07-04 06:53:25 -04:00
\ 'name': 'reek',
2019-03-08 06:04:56 -05:00
\ 'executable': {b -> ale#Var(b, 'ruby_reek_executable')},
2019-05-17 10:09:13 -04:00
\ 'command': {buffer -> ale#semver#RunWithVersionCheck(
\ buffer,
\ ale#Var(buffer, 'ruby_reek_executable'),
\ '%e --version',
\ function('ale_linters#ruby#reek#GetCommand'),
\ )},
\ 'callback': 'ale_linters#ruby#reek#Handle',
\})