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> " Author: Ben Reedy <https://github.com/breed808>
" Description: staticcheck for Go files " 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', { call ale#linter#Define('go', {
\ 'name': 'staticcheck', \ 'name': 'staticcheck',
\ 'executable': 'staticcheck', \ 'executable': 'staticcheck',
\ 'command': 'staticcheck %s', \ 'command_callback': 'ale_linters#go#staticcheck#GetCommand',
\ 'callback': 'ale#handlers#unix#HandleAsWarning', \ 'callback': 'ale#handlers#unix#HandleAsWarning',
\ 'output_stream': 'both', \ 'output_stream': 'both',
\ 'lint_file': 1, \ '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 while ensuring it doesn't run any linters known to be slow or resource
intensive. intensive.
=============================================================================== ===============================================================================
gobuild *ale-go-gobuild* 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. This variable can be set to pass additional options to the gofmt fixer.
=============================================================================== ===============================================================================
gometalinter *ale-go-gometalinter* 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. 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: 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| gobuild.............................|ale-go-gobuild|
gofmt...............................|ale-go-gofmt| gofmt...............................|ale-go-gofmt|
gometalinter........................|ale-go-gometalinter| gometalinter........................|ale-go-gometalinter|
staticcheck.........................|ale-go-staticcheck|
graphql...............................|ale-graphql-options| graphql...............................|ale-graphql-options|
eslint..............................|ale-graphql-eslint| eslint..............................|ale-graphql-eslint|
gqlint..............................|ale-graphql-gqlint| 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(''))