summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/go/staticcheck.vim24
-rw-r--r--doc/ale-go.txt32
-rw-r--r--doc/ale.txt1
-rw-r--r--test/command_callback/test_staticcheck_command_callback.vader41
4 files changed, 97 insertions, 1 deletions
diff --git a/ale_linters/go/staticcheck.vim b/ale_linters/go/staticcheck.vim
index 255fd17c..ce9e6e38 100644
--- a/ale_linters/go/staticcheck.vim
+++ b/ale_linters/go/staticcheck.vim
@@ -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,
diff --git a/doc/ale-go.txt b/doc/ale-go.txt
index 502f2376..b80bd454 100644
--- a/doc/ale-go.txt
+++ b/doc/ale-go.txt
@@ -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:
diff --git a/doc/ale.txt b/doc/ale.txt
index 6ace9d55..fa0e1c13 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -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|
diff --git a/test/command_callback/test_staticcheck_command_callback.vader b/test/command_callback/test_staticcheck_command_callback.vader
new file mode 100644
index 00000000..e9628eb6
--- /dev/null
+++ b/test/command_callback/test_staticcheck_command_callback.vader
@@ -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(''))