From 0cb3e3655419e80226e3738f94d514836a382b87 Mon Sep 17 00:00:00 2001 From: Ben Paxton Date: Mon, 19 Mar 2018 15:34:47 +0000 Subject: [PATCH 1/2] Lint whole package for gosimple and gotype Fixes #936 --- ale_linters/go/gosimple.vim | 6 +++++- ale_linters/go/gotype.vim | 3 ++- .../test_gosimple_command_callback.vader | 12 ++++++++++++ .../test_gotype_command_callback.vader | 4 +++- 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 test/command_callback/test_gosimple_command_callback.vader diff --git a/ale_linters/go/gosimple.vim b/ale_linters/go/gosimple.vim index 8a4c01e..12ef3b9 100644 --- a/ale_linters/go/gosimple.vim +++ b/ale_linters/go/gosimple.vim @@ -1,10 +1,14 @@ " Author: Ben Reedy " Description: gosimple for Go files +function! ale_linters#go#gosimple#GetCommand(buffer) abort + return ale#path#BufferCdString(a:buffer) . ' gosimple .' +endfunction + call ale#linter#Define('go', { \ 'name': 'gosimple', \ 'executable': 'gosimple', -\ 'command': 'gosimple %s', +\ 'command_callback': 'ale_linters#go#gosimple#GetCommand', \ 'callback': 'ale#handlers#unix#HandleAsWarning', \ 'output_stream': 'both', \ 'lint_file': 1, diff --git a/ale_linters/go/gotype.vim b/ale_linters/go/gotype.vim index 13055a8..82737e2 100644 --- a/ale_linters/go/gotype.vim +++ b/ale_linters/go/gotype.vim @@ -6,7 +6,8 @@ function! ale_linters#go#gotype#GetCommand(buffer) abort return endif - return 'gotype %s' + + return ale#path#BufferCdString(a:buffer) . ' gotype .' endfunction call ale#linter#Define('go', { diff --git a/test/command_callback/test_gosimple_command_callback.vader b/test/command_callback/test_gosimple_command_callback.vader new file mode 100644 index 0000000..a0b1f46 --- /dev/null +++ b/test/command_callback/test_gosimple_command_callback.vader @@ -0,0 +1,12 @@ +Before: + runtime ale_linters/go/gosimple.vim + call ale#test#SetFilename('../go_files/testfile2.go') + +After: + call ale#linter#Reset() + +Execute(The default gosimple command should be correct): + AssertEqual 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' + \ . ' gosimple .', + \ ale_linters#go#gosimple#GetCommand(bufnr('')) + diff --git a/test/command_callback/test_gotype_command_callback.vader b/test/command_callback/test_gotype_command_callback.vader index ec98627..4fba334 100644 --- a/test/command_callback/test_gotype_command_callback.vader +++ b/test/command_callback/test_gotype_command_callback.vader @@ -6,7 +6,9 @@ After: call ale#linter#Reset() Execute(The default gotype command should be correct): - AssertEqual 'gotype %s', ale_linters#go#gotype#GetCommand(bufnr('')) + AssertEqual 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' + \ . ' gotype .', + \ ale_linters#go#gotype#GetCommand(bufnr('')) Execute(The gotype callback should ignore test files): call ale#test#SetFilename('bla_test.go') From 6452c5e2f0aded3044a4263189f5b46c37409981 Mon Sep 17 00:00:00 2001 From: Ben Paxton Date: Tue, 20 Mar 2018 14:19:48 +0000 Subject: [PATCH 2/2] Use govet handler for gosimple, gotype, staticcheck --- ale_linters/go/gosimple.vim | 2 +- ale_linters/go/gotype.vim | 2 +- ale_linters/go/govet.vim | 19 +------------- ale_linters/go/staticcheck.vim | 2 +- autoload/ale/handlers/go.vim | 25 +++++++++++++++++++ ...er.vader => test_go_generic_handler.vader} | 10 ++------ 6 files changed, 31 insertions(+), 29 deletions(-) create mode 100644 autoload/ale/handlers/go.vim rename test/handler/{test_govet_handler.vader => test_go_generic_handler.vader} (72%) diff --git a/ale_linters/go/gosimple.vim b/ale_linters/go/gosimple.vim index 12ef3b9..dbdc3fc 100644 --- a/ale_linters/go/gosimple.vim +++ b/ale_linters/go/gosimple.vim @@ -9,7 +9,7 @@ call ale#linter#Define('go', { \ 'name': 'gosimple', \ 'executable': 'gosimple', \ 'command_callback': 'ale_linters#go#gosimple#GetCommand', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', +\ 'callback': 'ale#handlers#go#Handler', \ 'output_stream': 'both', \ 'lint_file': 1, \}) diff --git a/ale_linters/go/gotype.vim b/ale_linters/go/gotype.vim index 82737e2..f4bb274 100644 --- a/ale_linters/go/gotype.vim +++ b/ale_linters/go/gotype.vim @@ -15,6 +15,6 @@ call ale#linter#Define('go', { \ 'output_stream': 'stderr', \ 'executable': 'gotype', \ 'command_callback': 'ale_linters#go#gotype#GetCommand', -\ 'callback': 'ale#handlers#unix#HandleAsError', +\ 'callback': 'ale#handlers#go#Handler', \ 'lint_file': 1, \}) diff --git a/ale_linters/go/govet.vim b/ale_linters/go/govet.vim index aae5969..edf9eb6 100644 --- a/ale_linters/go/govet.vim +++ b/ale_linters/go/govet.vim @@ -8,28 +8,11 @@ function! ale_linters#go#govet#GetCommand(buffer) abort return ale#path#BufferCdString(a:buffer) . ' go vet .' endfunction -function! ale_linters#go#govet#Handler(buffer, lines) abort - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:? ?(.+)$' - let l:output = [] - let l:dir = expand('#' . a:buffer . ':p:h') - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'type': 'E', - \}) - endfor - return l:output -endfunction - call ale#linter#Define('go', { \ 'name': 'go vet', \ 'output_stream': 'stderr', \ 'executable': 'go', \ 'command_callback': 'ale_linters#go#govet#GetCommand', -\ 'callback': 'ale_linters#go#govet#Handler', +\ 'callback': 'ale#handlers#go#Handler', \ 'lint_file': 1, \}) diff --git a/ale_linters/go/staticcheck.vim b/ale_linters/go/staticcheck.vim index ce9e6e3..a346401 100644 --- a/ale_linters/go/staticcheck.vim +++ b/ale_linters/go/staticcheck.vim @@ -27,7 +27,7 @@ call ale#linter#Define('go', { \ 'name': 'staticcheck', \ 'executable': 'staticcheck', \ 'command_callback': 'ale_linters#go#staticcheck#GetCommand', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', +\ 'callback': 'ale#handlers#go#Handler', \ 'output_stream': 'both', \ 'lint_file': 1, \}) diff --git a/autoload/ale/handlers/go.vim b/autoload/ale/handlers/go.vim new file mode 100644 index 0000000..224df66 --- /dev/null +++ b/autoload/ale/handlers/go.vim @@ -0,0 +1,25 @@ +" Author: neersighted +" Description: go vet for Go files +" +" Author: John Eikenberry +" Description: updated to work with go1.10 +" +" Author: Ben Paxton +" Description: moved to generic Golang file from govet + +function! ale#handlers#go#Handler(buffer, lines) abort + let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:? ?(.+)$' + let l:output = [] + let l:dir = expand('#' . a:buffer . ':p:h') + + for l:match in ale#util#GetMatches(a:lines, l:pattern) + call add(l:output, { + \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), + \ 'lnum': l:match[2] + 0, + \ 'col': l:match[3] + 0, + \ 'text': l:match[4], + \ 'type': 'E', + \}) + endfor + return l:output +endfunction diff --git a/test/handler/test_govet_handler.vader b/test/handler/test_go_generic_handler.vader similarity index 72% rename from test/handler/test_govet_handler.vader rename to test/handler/test_go_generic_handler.vader index b4bfdc9..624e56c 100644 --- a/test/handler/test_govet_handler.vader +++ b/test/handler/test_go_generic_handler.vader @@ -1,10 +1,4 @@ -Before: - runtime ale_linters/go/govet.vim - -After: - call ale#linter#Reset() - -Execute(The govet handler should return the correct filenames): +Execute(The golang handler should return the correct filenames): AssertEqual \ [ \ { @@ -22,7 +16,7 @@ Execute(The govet handler should return the correct filenames): \ 'filename': ale#path#Simplify(expand('%:p:h') . '/other.go'), \ }, \ ], - \ ale_linters#go#govet#Handler(bufnr(''), [ + \ ale#handlers#go#Handler(bufnr(''), [ \ 'test.go:27: some error', \ 'other.go:27:5: some error with a column', \ ])