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:
parent
c7bd5cc0ba
commit
4caf273d53
@ -1,6 +1,11 @@
|
||||
" Author: Edward Larkey <edwlarkey@mac.com>
|
||||
" Author: Jose Junior <jose.junior@gmail.com>
|
||||
" 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
|
||||
" Matches patterns line the following:
|
||||
"
|
||||
@ -29,10 +34,18 @@ function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
|
||||
return l:output
|
||||
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', {
|
||||
\ 'name': 'foodcritic',
|
||||
\ 'executable': 'foodcritic',
|
||||
\ 'command': 'foodcritic %t',
|
||||
\ 'command_callback': 'ale_linters#chef#foodcritic#GetCommand',
|
||||
\ 'callback': 'ale_linters#chef#foodcritic#Handle',
|
||||
\})
|
||||
|
||||
|
25
doc/ale-chef.txt
Normal file
25
doc/ale-chef.txt
Normal 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:
|
@ -16,6 +16,8 @@ CONTENTS *ale-contents*
|
||||
clang...............................|ale-c-clang|
|
||||
cppcheck............................|ale-c-cppcheck|
|
||||
gcc.................................|ale-c-gcc|
|
||||
chef..................................|ale-chef-options|
|
||||
foodcritic..........................|ale-chef-foodcritic|
|
||||
cpp...................................|ale-cpp-options|
|
||||
clang...............................|ale-cpp-clang|
|
||||
clangtidy...........................|ale-cpp-clangtidy|
|
||||
|
26
test/test_foodcritic_command_callback.vader
Normal file
26
test/test_foodcritic_command_callback.vader
Normal 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
|
||||
|
Loading…
Reference in New Issue
Block a user