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 f0e8503..189a9ce 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 58940ca..8349dff 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 fbcf490..4159986 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 0000000..5208908 --- /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