Added support for linting of proto files (#1098)

* Added support for linting of proto files
* Added function to get the proper protoc command
This commit is contained in:
Jeff Willette 2017-11-10 18:37:23 +09:00 committed by w0rp
parent a8c5e0f4dc
commit 8bc44ed585
4 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,19 @@
" Author: Jeff Willette <jrwillette88@gmail.com>
" Description: run the protoc-gen-lint plugin for the protoc binary
function! ale_linters#proto#protoc_gen_lint#GetCommand(buffer) abort
let l:dirname = expand('#' . a:buffer . ':p:h')
return 'protoc'
\ . ' -I ' . ale#Escape(l:dirname)
\ . ' --lint_out=. ' . '%s'
endfunction
call ale#linter#Define('proto', {
\ 'name': 'protoc-gen-lint',
\ 'lint_file': 1,
\ 'output_stream': 'stderr',
\ 'executable': 'protoc',
\ 'command_callback': 'ale_linters#proto#protoc_gen_lint#GetCommand',
\ 'callback': 'ale#handlers#unix#HandleAsError',
\})

24
doc/ale-proto.txt Normal file
View File

@ -0,0 +1,24 @@
===============================================================================
ALE Proto Integration *ale-proto-options*
===============================================================================
Integration Information
Linting of `.proto` files requires that the `protoc` binary is installed in the
system path and that the `protoc-gen-lint` plugin for the `protoc` binary is also
installed.
To enable `.proto` file linting, update |g:ale_linters| as appropriate:
>
" Enable linter for .proto files
let g:ale_linters = {'proto': ['protoc-gen-lint']}
<
===============================================================================
protoc-gen-lint *ale-proto-protoc-gen-lint*
The linter is a plugin for the `protoc` binary. As long as the binary resides
in the system path, `protoc` will find it.
===============================================================================
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:

View File

@ -135,6 +135,8 @@ CONTENTS *ale-contents*
phpstan.............................|ale-php-phpstan|
pod...................................|ale-pod-options|
write-good..........................|ale-pod-write-good|
proto.................................|ale-proto-options|
protoc-gen-lint.....................|ale-proto-protoc-gen-lint|
pug...................................|ale-pug-options|
puglint.............................|ale-pug-puglint|
puppet................................|ale-puppet-options|

View File

@ -0,0 +1,16 @@
Before:
call ale#test#SetDirectory('/testplugin/test/command_callback')
call ale#test#SetFilename('test.proto')
After:
Restore
call ale#test#RestoreDirectory()
call ale#linter#Reset()
Execute(The default command should be correct):
AssertEqual
\ 'protoc' . ' -I ' . ale#Escape(getcwd()) . ' --lint_out=. ' . '%s',
\ ale_linters#proto#protoc_gen_lint#GetCommand(bufnr(''))