This fixes issue #936 by linting the whole package
This commit is contained in:
parent
fcb7932d7d
commit
ab5257c344
@ -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,
|
||||||
|
@ -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:
|
||||||
|
@ -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|
|
||||||
|
@ -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(''))
|
Loading…
Reference in New Issue
Block a user