diff --git a/plugin/syntastic.vim b/plugin/syntastic.vim index fc382ad7..af5de87d 100644 --- a/plugin/syntastic.vim +++ b/plugin/syntastic.vim @@ -163,6 +163,7 @@ function! s:UpdateErrors(auto_invoked, ...) call s:HighlightErrors() endif + let loclist = s:LocList() if g:syntastic_auto_jump && loclist.hasErrorsOrWarningsToDisplay() silent! ll endif diff --git a/syntax_checkers/perl/perlcritic.vim b/syntax_checkers/perl/perlcritic.vim new file mode 100644 index 00000000..73f137cc --- /dev/null +++ b/syntax_checkers/perl/perlcritic.vim @@ -0,0 +1,59 @@ +"============================================================================ +"File: perlcritic.vim +"Description: Syntax checking plugin for syntastic.vim +"Maintainer: LCD 47 +"License: This program is free software. It comes without any warranty, +" to the extent permitted by applicable law. You can redistribute +" it and/or modify it under the terms of the Do What The Fuck You +" Want To Public License, Version 2, as published by Sam Hocevar. +" See http://sam.zoy.org/wtfpl/COPYING for more details. +" +"============================================================================ +" +" For details about perlcritic see: +" +" - http://perlcritic.tigris.org/ +" - https://metacpan.org/module/Perl::Critic +" +" Checker options: +" +" - g:syntastic_perl_perlcritic_options (string; default: "--severity 3") +" options to pass to perlcritic +" +" - g:syntastic_perl_perlcritic_thres (integer; default: 5) +" error thresholdi: policy violations with a severity above this +" value are highlighted as errors, the others are warnings + +if !exists('g:syntastic_perl_perlcritic_options') + let g:syntastic_perl_perlcritic_options = '--severity 3' +endif + +if !exists('g:syntastic_perl_perlcritic_thres') + let g:syntastic_perl_perlcritic_thres = 5 +endif + +function! SyntaxCheckers_perl_perlcritic_IsAvailable() + return executable('perlcritic') +endfunction + +function! SyntaxCheckers_perl_perlcritic_GetLocList() + let makeprg = syntastic#makeprg#build({ + \ 'exe': 'perlcritic', + \ 'args': '--quiet --nocolor --verbose "\%s:\%f:\%l:\%c:(\%s) \%m (\%e)\n" '.g:syntastic_perl_perlcritic_options, + \ 'subchecker': 'perlcritic' }) + let errorformat='%t:%f:%l:%c:%m' + let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'subtype': 'Style' }) + + " change error types according to the prescribed threshold + let n = len(loclist) - 1 + while n >= 0 + let loclist[n]['type'] = loclist[n]['type'] < g:syntastic_perl_perlcritic_thres ? 'W' : 'E' + let n -= 1 + endwhile + + return loclist +endfunction + +call g:SyntasticRegistry.CreateAndRegisterChecker({ + \ 'filetype': 'perl', + \ 'name': 'perlcritic'})