Adds options to foodcritic linter (#437)

* Adds options to foodcritic linter

Adds a way to pass command line options to the foodcritic command and
documentation about it.

* Creates a simple test for foodcritic command callback

This test simply runs the GetCommand function for the foodcritic linter
and feeds it with some test variables to assert the command line is
being created/escaped correctly.

* Makes foodcritic linter use a command callback

Following review comments, changes the foodcritic linter to use a
`GetCommand` callback for the `command_callback` linter option.

Makes sure that `~` are escaped: flags on foodcritic command line are
negated by adding a `~` in front of the specific cop name:

```
foodcritic -t ~FC011
```

But the way the commands are executed cause foodcritic to fail (since
tilde is recognized as home directory).

* Fixes the doc to include new variables
This commit is contained in:
José Júnior 2017-04-05 13:21:47 -04:00 committed by w0rp
parent c7bd5cc0ba
commit 4caf273d53
4 changed files with 67 additions and 1 deletions

View File

@ -1,6 +1,11 @@
" Author: Edward Larkey <edwlarkey@mac.com> " Author: Edward Larkey <edwlarkey@mac.com>
" Author: Jose Junior <jose.junior@gmail.com>
" Description: This file adds the foodcritic linter for Chef files. " Description: This file adds the foodcritic linter for Chef files.
" Support options!
let g:ale_chef_foodcritic_options = get(g:, 'ale_chef_foodcritic_options', '')
let g:ale_chef_foodcritic_executable = get(g:, 'ale_chef_foodcritic_executable', 'foodcritic')
function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
" Matches patterns line the following: " Matches patterns line the following:
" "
@ -29,10 +34,18 @@ function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
return l:output return l:output
endfunction endfunction
function! ale_linters#chef#foodcritic#GetCommand(buffer) abort
return printf('%s %s %%t',
\ g:ale_chef_foodcritic_executable,
\ escape(g:ale_chef_foodcritic_options, '~')
\)
endfunction
call ale#linter#Define('chef', { call ale#linter#Define('chef', {
\ 'name': 'foodcritic', \ 'name': 'foodcritic',
\ 'executable': 'foodcritic', \ 'executable': 'foodcritic',
\ 'command': 'foodcritic %t', \ 'command_callback': 'ale_linters#chef#foodcritic#GetCommand',
\ 'callback': 'ale_linters#chef#foodcritic#Handle', \ 'callback': 'ale_linters#chef#foodcritic#Handle',
\}) \})

25
doc/ale-chef.txt Normal file
View File

@ -0,0 +1,25 @@
===============================================================================
ALE Chef Integration *ale-chef-options*
-------------------------------------------------------------------------------
foodcritc *ale-chef-foodcritic*
g:ale_chef_foodcritic_options *g:ale_chef_foodcritic_options*
Type: |String|
Default: `''`
This variable can be changed to modify flags given to foodcritic.
g:ale_chef_foodcritic_executable *g:ale_chef_foodcritic_executable*
Type: |String|
Default: `'foodcritic'`
This variable can be changed to point to the foodcritic binary in case it's
not on the $PATH or a specific version/path must be used.
-------------------------------------------------------------------------------
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:

View File

@ -16,6 +16,8 @@ CONTENTS *ale-contents*
clang...............................|ale-c-clang| clang...............................|ale-c-clang|
cppcheck............................|ale-c-cppcheck| cppcheck............................|ale-c-cppcheck|
gcc.................................|ale-c-gcc| gcc.................................|ale-c-gcc|
chef..................................|ale-chef-options|
foodcritic..........................|ale-chef-foodcritic|
cpp...................................|ale-cpp-options| cpp...................................|ale-cpp-options|
clang...............................|ale-cpp-clang| clang...............................|ale-cpp-clang|
clangtidy...........................|ale-cpp-clangtidy| clangtidy...........................|ale-cpp-clangtidy|

View File

@ -0,0 +1,26 @@
Before:
let g:ale_chef_foodcritic_options = '-t ~F011'
let g:ale_chef_foodcritic_executable = 'foodcritic'
silent! cd /testplugin/test
let g:dir = getcwd()
runtime ale_linters/chef/foodcritic.vim
After:
let g:ale_chef_foodcritic_options = ''
let g:ale_chef_foodcritic_executable = ''
silent execute 'cd ' . g:dir
unlet! g:dir
call ale#linter#Reset()
Execute(command line should be assembled correctly):
AssertEqual
\ 'foodcritic -t \~F011 %t',
\ ale_linters#chef#foodcritic#GetCommand(bufnr(''))
:q