diff --git a/ale_linters/perl/perlcritic.vim b/ale_linters/perl/perlcritic.vim index f0e85030..189a9ce3 100644 --- a/ale_linters/perl/perlcritic.vim +++ b/ale_linters/perl/perlcritic.vim @@ -1,14 +1,29 @@ " Author: Vincent Lequertier " Description: This file adds support for checking perl with perl critic +if !exists('g:ale_perl_perlcritic_showrules') + let g:ale_perl_perlcritic_showrules = 0 +endif + +function! ale_linters#perl#perlcritic#GetCommand(buffer) abort + let l:critic_verbosity = '%l:%c %m\n' + if g:ale_perl_perlcritic_showrules + let l:critic_verbosity = '%l:%c %m [%p]\n' + endif + + return "perlcritic --verbose '". l:critic_verbosity . "' --nocolor" +endfunction + + function! ale_linters#perl#perlcritic#Handle(buffer, lines) abort - let l:pattern = '\(.\+\) at \(.\+\) line \(\d\+\)' + let l:pattern = '\(\d\+\):\(\d\+\) \(.\+\)' let l:output = [] for l:match in ale#util#GetMatches(a:lines, l:pattern) call add(l:output, { - \ 'text': l:match[1], - \ 'lnum': l:match[3], + \ 'lnum': l:match[1], + \ 'col': l:match[2], + \ 'text': l:match[3], \}) endfor @@ -19,6 +34,6 @@ call ale#linter#Define('perl', { \ 'name': 'perlcritic', \ 'executable': 'perlcritic', \ 'output_stream': 'stdout', -\ 'command': 'perlcritic --verbose 3 --nocolor', +\ 'command_callback': 'ale_linters#perl#perlcritic#GetCommand', \ 'callback': 'ale_linters#perl#perlcritic#Handle', \}) diff --git a/doc/ale-perl.txt b/doc/ale-perl.txt index 58940ca7..8349dff7 100644 --- a/doc/ale-perl.txt +++ b/doc/ale-perl.txt @@ -22,5 +22,17 @@ g:ale_perl_perl_options *g:ale_perl_perl_options* invocation. +------------------------------------------------------------------------------- +perlcritic *ale-perl-perlcritic* + +g:ale_perl_perlcritic_showrules *g:ale_perl_perlcritic_showrules* + + Type: |Number| + Default: 0 + + Controls whether perlcritic rule names are shown after the error message. + Defaults to off to reduce length of message. + + ------------------------------------------------------------------------------- vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/doc/ale.txt b/doc/ale.txt index fbcf490c..4159986c 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -63,6 +63,7 @@ CONTENTS *ale-contents* merlin..............................|ale-ocaml-merlin| perl..................................|ale-perl-options| perl................................|ale-perl-perl| + perlcritic..........................|ale-perl-perlcritic| php...................................|ale-php-options| phpcs...............................|ale-php-phpcs| phpmd...............................|ale-php-phpmd| diff --git a/test/test_perlcritic_showrules.vader b/test/test_perlcritic_showrules.vader new file mode 100644 index 00000000..52089080 --- /dev/null +++ b/test/test_perlcritic_showrules.vader @@ -0,0 +1,16 @@ +Execute(no g:ale_perl_perlcritic_showrules): + silent noautocmd new testfile.pl + + let g:ale_perl_perlcritic_showrules = 0 + + AssertEqual + \ "perlcritic --verbose '". '%l:%c %m\n' . "' --nocolor", + \ ale_linters#perl#perlcritic#GetCommand(bufnr('')) + + let g:ale_perl_perlcritic_showrules = 1 + + AssertEqual + \ "perlcritic --verbose '". '%l:%c %m [%p]\n' . "' --nocolor", + \ ale_linters#perl#perlcritic#GetCommand(bufnr('')) + + :q