summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2018-02-04 13:55:09 +0000
committerw0rp <devw0rp@gmail.com>2018-02-04 13:55:09 +0000
commit33b3331b0499e502f01730af60fb0e9b5a30951f (patch)
tree5d0ee32e8e8fa4b4712ccd54a8bf500a16481701
parent0f822b063cb9553c9e00bc63d0184ba8577e6248 (diff)
downloadale-33b3331b0499e502f01730af60fb0e9b5a30951f.zip
#1206 Add support for setting options for gobuild, and escape paths better
-rw-r--r--ale_linters/go/gobuild.vim21
-rw-r--r--doc/ale-go.txt12
-rw-r--r--doc/ale.txt1
-rw-r--r--test/command_callback/test_gobuild_command_callback.vader52
4 files changed, 82 insertions, 4 deletions
diff --git a/ale_linters/go/gobuild.vim b/ale_linters/go/gobuild.vim
index 783b9e0a..068877a3 100644
--- a/ale_linters/go/gobuild.vim
+++ b/ale_linters/go/gobuild.vim
@@ -1,9 +1,14 @@
" Author: Joshua Rubin <joshua@rubixconsulting.com>, Ben Reedy <https://github.com/breed808>,
" Jeff Willette <jrwillette88@gmail.com>
" Description: go build for Go files
-
" inspired by work from dzhou121 <dzhou121@gmail.com>
+call ale#Set('go_gobuild_options', '')
+
+function! ale_linters#go#gobuild#ResetEnv() abort
+ unlet! s:go_env
+endfunction
+
function! ale_linters#go#gobuild#GoEnv(buffer) abort
if exists('s:go_env')
return ''
@@ -13,6 +18,8 @@ function! ale_linters#go#gobuild#GoEnv(buffer) abort
endfunction
function! ale_linters#go#gobuild#GetCommand(buffer, goenv_output) abort
+ let l:options = ale#Var(a:buffer, 'go_gobuild_options')
+
if !exists('s:go_env')
let s:go_env = {
\ 'GOPATH': a:goenv_output[0],
@@ -20,10 +27,16 @@ function! ale_linters#go#gobuild#GetCommand(buffer, goenv_output) abort
\}
endif
+ let l:gopath_env_command = has('win32')
+ \ ? 'set GOPATH=' . ale#Escape(s:go_env.GOPATH) . ' && '
+ \ : 'GOPATH=' . ale#Escape(s:go_env.GOPATH) . ' '
+
" Run go test in local directory with relative path
- return 'GOPATH=' . s:go_env.GOPATH
- \ . ' cd ' . fnamemodify(bufname(a:buffer), ':.:h')
- \ . ' && go test -c -o /dev/null ./'
+ return l:gopath_env_command
+ \ . ale#path#BufferCdString(a:buffer)
+ \ . 'go test'
+ \ . (!empty(l:options) ? ' ' . l:options : '')
+ \ . ' -c -o /dev/null ./'
endfunction
function! ale_linters#go#gobuild#GetMatches(lines) abort
diff --git a/doc/ale-go.txt b/doc/ale-go.txt
index c5a68878..502f2376 100644
--- a/doc/ale-go.txt
+++ b/doc/ale-go.txt
@@ -21,6 +21,18 @@ while ensuring it doesn't run any linters known to be slow or resource
intensive.
===============================================================================
+gobuild *ale-go-gobuild*
+
+g:ale_go_gobuild_options *g:ale_go_gobuild_options*
+ *b:ale_go_gobuild_options*
+ Type: |String|
+ Default: `''`
+
+ This variable can be set to pass additional options to the gobuild linter.
+ They are injected directly after "go test".
+
+
+===============================================================================
gofmt *ale-go-gofmt*
g:ale_go_gofmt_options *g:ale_go_gofmt_options*
diff --git a/doc/ale.txt b/doc/ale.txt
index 2644ebca..6ace9d55 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -77,6 +77,7 @@ CONTENTS *ale-contents*
glslang.............................|ale-glsl-glslang|
glslls..............................|ale-glsl-glslls|
go....................................|ale-go-options|
+ gobuild.............................|ale-go-gobuild|
gofmt...............................|ale-go-gofmt|
gometalinter........................|ale-go-gometalinter|
graphql...............................|ale-graphql-options|
diff --git a/test/command_callback/test_gobuild_command_callback.vader b/test/command_callback/test_gobuild_command_callback.vader
new file mode 100644
index 00000000..240f29c6
--- /dev/null
+++ b/test/command_callback/test_gobuild_command_callback.vader
@@ -0,0 +1,52 @@
+Before:
+ Save g:ale_go_gobuild_options
+
+ unlet! g:ale_go_gobuild_options
+
+ let g:env_prefix = has('win32')
+ \ ? 'set GOPATH=' . ale#Escape('/foo/bar') . ' && '
+ \ : 'GOPATH=' . ale#Escape('/foo/bar') . ' '
+
+ runtime ale_linters/go/gobuild.vim
+
+ call ale#test#SetDirectory('/testplugin/test/command_callback')
+
+ call ale_linters#go#gobuild#ResetEnv()
+
+After:
+ Restore
+
+ unlet! g:env_prefix
+
+ call ale#linter#Reset()
+ call ale#test#RestoreDirectory()
+
+Execute(The default gobuild command should be correct):
+ AssertEqual
+ \ ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz']),
+ \ g:env_prefix . 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
+ \ . 'go test -c -o /dev/null ./'
+
+Execute(The command for getting GOPATH should be correct):
+ AssertEqual ale_linters#go#gobuild#GoEnv(bufnr('')), 'go env GOPATH GOROOT'
+
+ call ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz'])
+
+ " We shouldn't run `go env` many times after we've got it.
+ AssertEqual ale_linters#go#gobuild#GoEnv(bufnr('')), ''
+
+Execute(The GOPATH output should be used after it has been read once):
+ call ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz'])
+
+ AssertEqual
+ \ ale_linters#go#gobuild#GetCommand(bufnr(''), []),
+ \ g:env_prefix . 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
+ \ . 'go test -c -o /dev/null ./'
+
+Execute(Extra options should be supported):
+ let g:ale_go_gobuild_options = '--foo-bar'
+
+ AssertEqual
+ \ ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz']),
+ \ g:env_prefix . 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
+ \ . 'go test --foo-bar -c -o /dev/null ./'