This fixes issue #936 by linting the whole package

This commit is contained in:
Sander van Harmelen 2018-02-15 12:23:36 +01:00
parent fcb7932d7d
commit ab5257c344
4 changed files with 97 additions and 1 deletions

View File

@ -1,10 +1,32 @@
" Author: Ben Reedy <https://github.com/breed808>
" Description: staticcheck for Go files
call ale#Set('go_staticcheck_options', '')
call ale#Set('go_staticcheck_lint_package', 0)
function! ale_linters#go#staticcheck#GetCommand(buffer) abort
let l:filename = expand('#' . a:buffer . ':t')
let l:options = ale#Var(a:buffer, 'go_staticcheck_options')
let l:lint_package = ale#Var(a:buffer, 'go_staticcheck_lint_package')
" BufferCdString is used so that we can be sure the paths output from
" staticcheck can be calculated to absolute paths in the Handler
if l:lint_package
return ale#path#BufferCdString(a:buffer)
\ . 'staticcheck'
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
endif
return ale#path#BufferCdString(a:buffer)
\ . 'staticcheck'
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' ' . ale#Escape(l:filename)
endfunction
call ale#linter#Define('go', {
\ 'name': 'staticcheck',
\ 'executable': 'staticcheck',
\ 'command': 'staticcheck %s',
\ 'command_callback': 'ale_linters#go#staticcheck#GetCommand',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\ 'output_stream': 'both',
\ 'lint_file': 1,

View File

@ -20,6 +20,7 @@ the benefit of running a number of linters, more than ALE would by default,
while ensuring it doesn't run any linters known to be slow or resource
intensive.
===============================================================================
gobuild *ale-go-gobuild*
@ -42,6 +43,7 @@ g:ale_go_gofmt_options *g:ale_go_gofmt_options*
This variable can be set to pass additional options to the gofmt fixer.
===============================================================================
gometalinter *ale-go-gometalinter*
@ -71,5 +73,35 @@ g:ale_go_gometalinter_options *g:ale_go_gometalinter_options*
number of linters known to be slow or consume a lot of resources.
g:ale_go_gometalinter_package *g:ale_go_gometalinter_package*
*b:ale_go_gometalinter_package*
Type: |Number|
Default: `0`
When set to `1`, the whole Go package will be checked instead of only the
current file.
===============================================================================
staticcheck *ale-go-staticcheck*
g:ale_go_staticcheck_options *g:ale_go_staticcheck_options*
*b:ale_go_staticcheck_options*
Type: |String|
Default: `''`
This variable can be set to pass additional options to the staticcheck
linter.
g:ale_go_staticcheck_package *g:ale_go_staticcheck_package*
*b:ale_go_staticcheck_package*
Type: |Number|
Default: `0`
When set to `1`, the whole Go package will be checked instead of only the
current file.
===============================================================================
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:

View File

@ -80,6 +80,7 @@ CONTENTS *ale-contents*
gobuild.............................|ale-go-gobuild|
gofmt...............................|ale-go-gofmt|
gometalinter........................|ale-go-gometalinter|
staticcheck.........................|ale-go-staticcheck|
graphql...............................|ale-graphql-options|
eslint..............................|ale-graphql-eslint|
gqlint..............................|ale-graphql-gqlint|

View File

@ -0,0 +1,41 @@
Before:
Save b:ale_go_staticcheck_options
Save b:ale_go_staticcheck_lint_package
let b:ale_go_staticcheck_options = ''
let b:ale_go_staticcheck_lint_package = 0
runtime ale_linters/go/staticcheck.vim
call ale#test#SetDirectory('/testplugin/test/command_callback')
call ale#test#SetFilename('test.go')
After:
Restore
call ale#test#RestoreDirectory()
call ale#linter#Reset()
Execute(The staticcheck callback should return the right defaults):
AssertEqual
\ 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
\ . 'staticcheck '
\ . ale#Escape(expand('%' . ':t')),
\ ale_linters#go#staticcheck#GetCommand(bufnr(''))
Execute(The staticcheck callback should use configured options):
let b:ale_go_staticcheck_options = '-test'
AssertEqual
\ 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
\ . 'staticcheck '
\ . '-test ' . ale#Escape(expand('%' . ':t')),
\ ale_linters#go#staticcheck#GetCommand(bufnr(''))
Execute(The staticcheck `lint_package` option should use the correct command):
let b:ale_go_staticcheck_lint_package = 1
AssertEqual
\ 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
\ . 'staticcheck .',
\ ale_linters#go#staticcheck#GetCommand(bufnr(''))