From 8bc44ed585db4c704f4c93feab6477f32d8aebe6 Mon Sep 17 00:00:00 2001 From: Jeff Willette Date: Fri, 10 Nov 2017 18:37:23 +0900 Subject: [PATCH] Added support for linting of proto files (#1098) * Added support for linting of proto files * Added function to get the proper protoc command --- ale_linters/proto/protoc_gen_lint.vim | 19 +++++++++++++++ doc/ale-proto.txt | 24 +++++++++++++++++++ doc/ale.txt | 2 ++ .../test_proto_command_callback.vader | 16 +++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 ale_linters/proto/protoc_gen_lint.vim create mode 100644 doc/ale-proto.txt create mode 100644 test/command_callback/test_proto_command_callback.vader diff --git a/ale_linters/proto/protoc_gen_lint.vim b/ale_linters/proto/protoc_gen_lint.vim new file mode 100644 index 00000000..9d5ceacc --- /dev/null +++ b/ale_linters/proto/protoc_gen_lint.vim @@ -0,0 +1,19 @@ +" Author: Jeff Willette +" 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', +\}) diff --git a/doc/ale-proto.txt b/doc/ale-proto.txt new file mode 100644 index 00000000..6a256380 --- /dev/null +++ b/doc/ale-proto.txt @@ -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: diff --git a/doc/ale.txt b/doc/ale.txt index ffe7ac7e..94016623 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -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| diff --git a/test/command_callback/test_proto_command_callback.vader b/test/command_callback/test_proto_command_callback.vader new file mode 100644 index 00000000..2730bb84 --- /dev/null +++ b/test/command_callback/test_proto_command_callback.vader @@ -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('')) +