From 99263bdda446ec9c28ab92c3cafe8b166ac7fca8 Mon Sep 17 00:00:00 2001 From: Steven Humphrey Date: Sun, 11 Jun 2017 21:13:47 +0100 Subject: [PATCH] Perlcritic column number and rule names (#640) * Add column number to perlcritic linting output This returns the column number of the perlcritic error so that ale can show the column in addition to the line where perlcritic found an error. * Add perlcritic configuration for rule names This adds a configuration setting so that the name of the perlcritic rule is shown [Rule::Name] after the error message. This is useful to lookup the rule failure. * Add a vader test for perlcritic#GetCommand --- ale_linters/perl/perlcritic.vim | 23 +++++++++++++++++++---- doc/ale-perl.txt | 12 ++++++++++++ doc/ale.txt | 1 + test/test_perlcritic_showrules.vader | 16 ++++++++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 test/test_perlcritic_showrules.vader 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