Merge pull request #1351 from svanharmelen/f-issue-936

This fixes issue #936 by linting the whole package
This commit is contained in:
w0rp 2018-02-25 11:54:05 +00:00 committed by GitHub
commit b6ccd60dd0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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(''))