#1206 Add support for setting options for gobuild, and escape paths better
This commit is contained in:
parent
0f822b063c
commit
33b3331b04
@ -1,9 +1,14 @@
|
|||||||
" Author: Joshua Rubin <joshua@rubixconsulting.com>, Ben Reedy <https://github.com/breed808>,
|
" Author: Joshua Rubin <joshua@rubixconsulting.com>, Ben Reedy <https://github.com/breed808>,
|
||||||
" Jeff Willette <jrwillette88@gmail.com>
|
" Jeff Willette <jrwillette88@gmail.com>
|
||||||
" Description: go build for Go files
|
" Description: go build for Go files
|
||||||
|
|
||||||
" inspired by work from dzhou121 <dzhou121@gmail.com>
|
" 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
|
function! ale_linters#go#gobuild#GoEnv(buffer) abort
|
||||||
if exists('s:go_env')
|
if exists('s:go_env')
|
||||||
return ''
|
return ''
|
||||||
@ -13,6 +18,8 @@ function! ale_linters#go#gobuild#GoEnv(buffer) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#go#gobuild#GetCommand(buffer, goenv_output) abort
|
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')
|
if !exists('s:go_env')
|
||||||
let s:go_env = {
|
let s:go_env = {
|
||||||
\ 'GOPATH': a:goenv_output[0],
|
\ 'GOPATH': a:goenv_output[0],
|
||||||
@ -20,10 +27,16 @@ function! ale_linters#go#gobuild#GetCommand(buffer, goenv_output) abort
|
|||||||
\}
|
\}
|
||||||
endif
|
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
|
" Run go test in local directory with relative path
|
||||||
return 'GOPATH=' . s:go_env.GOPATH
|
return l:gopath_env_command
|
||||||
\ . ' cd ' . fnamemodify(bufname(a:buffer), ':.:h')
|
\ . ale#path#BufferCdString(a:buffer)
|
||||||
\ . ' && go test -c -o /dev/null ./'
|
\ . 'go test'
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' -c -o /dev/null ./'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#go#gobuild#GetMatches(lines) abort
|
function! ale_linters#go#gobuild#GetMatches(lines) abort
|
||||||
|
@ -20,6 +20,18 @@ 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*
|
||||||
|
|
||||||
|
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*
|
gofmt *ale-go-gofmt*
|
||||||
|
|
||||||
|
@ -77,6 +77,7 @@ CONTENTS *ale-contents*
|
|||||||
glslang.............................|ale-glsl-glslang|
|
glslang.............................|ale-glsl-glslang|
|
||||||
glslls..............................|ale-glsl-glslls|
|
glslls..............................|ale-glsl-glslls|
|
||||||
go....................................|ale-go-options|
|
go....................................|ale-go-options|
|
||||||
|
gobuild.............................|ale-go-gobuild|
|
||||||
gofmt...............................|ale-go-gofmt|
|
gofmt...............................|ale-go-gofmt|
|
||||||
gometalinter........................|ale-go-gometalinter|
|
gometalinter........................|ale-go-gometalinter|
|
||||||
graphql...............................|ale-graphql-options|
|
graphql...............................|ale-graphql-options|
|
||||||
|
52
test/command_callback/test_gobuild_command_callback.vader
Normal file
52
test/command_callback/test_gobuild_command_callback.vader
Normal file
@ -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 ./'
|
Loading…
Reference in New Issue
Block a user