diff options
author | Elias Martinez Cohen <eliasc@nvidia.com> | 2019-04-10 22:25:06 -0400 |
---|---|---|
committer | Elias Martinez Cohen <eliasc@nvidia.com> | 2019-07-01 11:04:33 -0400 |
commit | 49db8210f68637a2af14b21940f3cbbaf7361047 (patch) | |
tree | 366a5e30c22c40b2cf508b2edca6bf8ac25e6072 /ale_linters/go | |
parent | 89f7292138087e1410b2430ae6d359d42e7fe31f (diff) | |
download | ale-49db8210f68637a2af14b21940f3cbbaf7361047.zip |
Support $GO111MODULE with Go tooling
Allows the user to override $GO111MODULE environment variable through
ale options. This gives control over the default behavior of Go module
resolution.
Golang documentation:
https://github.com/golang/go/wiki/Modules#how-to-use-modules
Add `ale#Go#EnvString()` function to make it easy to add similar Go
environment variables in the future.
Use the new `EnvString` function in all available Go tools callbacks
& update tests
Also add test of linter command callback for `gofmt`
Diffstat (limited to 'ale_linters/go')
-rw-r--r-- | ale_linters/go/bingo.vim | 6 | ||||
-rw-r--r-- | ale_linters/go/gobuild.vim | 1 | ||||
-rw-r--r-- | ale_linters/go/gofmt.vim | 8 | ||||
-rw-r--r-- | ale_linters/go/golangci_lint.vim | 3 | ||||
-rw-r--r-- | ale_linters/go/golint.vim | 2 | ||||
-rw-r--r-- | ale_linters/go/gometalinter.vim | 2 | ||||
-rw-r--r-- | ale_linters/go/gopls.vim | 8 | ||||
-rw-r--r-- | ale_linters/go/gosimple.vim | 3 | ||||
-rw-r--r-- | ale_linters/go/gotype.vim | 3 | ||||
-rw-r--r-- | ale_linters/go/govet.vim | 1 | ||||
-rw-r--r-- | ale_linters/go/langserver.vim | 3 | ||||
-rw-r--r-- | ale_linters/go/staticcheck.vim | 5 |
12 files changed, 34 insertions, 11 deletions
diff --git a/ale_linters/go/bingo.vim b/ale_linters/go/bingo.vim index e446bdcc..1e43f8e4 100644 --- a/ale_linters/go/bingo.vim +++ b/ale_linters/go/bingo.vim @@ -5,11 +5,13 @@ call ale#Set('go_bingo_executable', 'bingo') call ale#Set('go_bingo_options', '--mode stdio') function! ale_linters#go#bingo#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'go_bingo_options')) + return ale#go#EnvString(a:buffer) . '%e' . ale#Pad(ale#Var(a:buffer, 'go_bingo_options')) endfunction function! ale_linters#go#bingo#FindProjectRoot(buffer) abort - let l:project_root = ale#path#FindNearestFile(a:buffer, 'go.mod') + let l:go_modules_off = ale#Var(a:buffer, 'go_go111module') is# 'off' + let l:project_root = l:go_modules_off ? + \ '' : ale#path#FindNearestFile(a:buffer, 'go.mod') let l:mods = ':h' if empty(l:project_root) diff --git a/ale_linters/go/gobuild.vim b/ale_linters/go/gobuild.vim index 374ded35..1dfb6daa 100644 --- a/ale_linters/go/gobuild.vim +++ b/ale_linters/go/gobuild.vim @@ -11,6 +11,7 @@ function! ale_linters#go#gobuild#GetCommand(buffer) abort " Run go test in local directory with relative path return ale#path#BufferCdString(a:buffer) + \ . ale#go#EnvString(a:buffer) \ . ale#Var(a:buffer, 'go_go_executable') . ' test' \ . (!empty(l:options) ? ' ' . l:options : '') \ . ' -c -o /dev/null ./' diff --git a/ale_linters/go/gofmt.vim b/ale_linters/go/gofmt.vim index 337deef8..a233b422 100644 --- a/ale_linters/go/gofmt.vim +++ b/ale_linters/go/gofmt.vim @@ -1,10 +1,16 @@ " Author: neersighted <bjorn@neersighted.com> " Description: gofmt for Go files +function! ale_linters#go#gofmt#GetCommand(buffer) abort + return ale#go#EnvString(a:buffer) + \ . '%e -e %t' +endfunction + + call ale#linter#Define('go', { \ 'name': 'gofmt', \ 'output_stream': 'stderr', \ 'executable': 'gofmt', -\ 'command': 'gofmt -e %t', +\ 'command': function('ale_linters#go#gofmt#GetCommand'), \ 'callback': 'ale#handlers#unix#HandleAsError', \}) diff --git a/ale_linters/go/golangci_lint.vim b/ale_linters/go/golangci_lint.vim index 357f7949..dd0e975a 100644 --- a/ale_linters/go/golangci_lint.vim +++ b/ale_linters/go/golangci_lint.vim @@ -10,13 +10,16 @@ function! ale_linters#go#golangci_lint#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'go_golangci_lint_options') let l:lint_package = ale#Var(a:buffer, 'go_golangci_lint_package') + if l:lint_package return ale#path#BufferCdString(a:buffer) + \ . ale#go#EnvString(a:buffer) \ . '%e run ' \ . l:options endif return ale#path#BufferCdString(a:buffer) + \ . ale#go#EnvString(a:buffer) \ . '%e run ' \ . ale#Escape(l:filename) \ . ' ' . l:options diff --git a/ale_linters/go/golint.vim b/ale_linters/go/golint.vim index 765e1477..79bfaeb5 100644 --- a/ale_linters/go/golint.vim +++ b/ale_linters/go/golint.vim @@ -7,7 +7,7 @@ call ale#Set('go_golint_options', '') function! ale_linters#go#golint#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'go_golint_options') - return '%e' + return ale#go#EnvString(a:buffer) . '%e' \ . (!empty(l:options) ? ' ' . l:options : '') \ . ' %t' endfunction diff --git a/ale_linters/go/gometalinter.vim b/ale_linters/go/gometalinter.vim index 19d70a81..eed9550a 100644 --- a/ale_linters/go/gometalinter.vim +++ b/ale_linters/go/gometalinter.vim @@ -14,11 +14,13 @@ function! ale_linters#go#gometalinter#GetCommand(buffer) abort " be calculated to absolute paths in the Handler if l:lint_package return ale#path#BufferCdString(a:buffer) + \ . ale#go#EnvString(a:buffer) \ . '%e' \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' endif return ale#path#BufferCdString(a:buffer) + \ . ale#go#EnvString(a:buffer) \ . '%e' \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename)) \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' diff --git a/ale_linters/go/gopls.vim b/ale_linters/go/gopls.vim index c411dc2b..dcff5ec7 100644 --- a/ale_linters/go/gopls.vim +++ b/ale_linters/go/gopls.vim @@ -6,11 +6,15 @@ call ale#Set('go_gopls_executable', 'gopls') call ale#Set('go_gopls_options', '--mode stdio') function! ale_linters#go#gopls#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'go_gopls_options')) + return ale#go#EnvString(a:buffer) + \ . '%e' + \ . ale#Pad(ale#Var(a:buffer, 'go_gopls_options')) endfunction function! ale_linters#go#gopls#FindProjectRoot(buffer) abort - let l:project_root = ale#path#FindNearestFile(a:buffer, 'go.mod') + let l:go_modules_off = ale#Var(a:buffer, 'go_go111module') is# 'off' + let l:project_root = l:go_modules_off ? + \ '' : ale#path#FindNearestFile(a:buffer, 'go.mod') let l:mods = ':h' if empty(l:project_root) diff --git a/ale_linters/go/gosimple.vim b/ale_linters/go/gosimple.vim index 281a0e53..ad52c621 100644 --- a/ale_linters/go/gosimple.vim +++ b/ale_linters/go/gosimple.vim @@ -2,7 +2,8 @@ " Description: gosimple for Go files function! ale_linters#go#gosimple#GetCommand(buffer) abort - return ale#path#BufferCdString(a:buffer) . ' gosimple .' + return ale#path#BufferCdString(a:buffer) . ' ' + \ . ale#go#EnvString(a:buffer) . 'gosimple .' endfunction call ale#linter#Define('go', { diff --git a/ale_linters/go/gotype.vim b/ale_linters/go/gotype.vim index d5d563aa..6a5149ca 100644 --- a/ale_linters/go/gotype.vim +++ b/ale_linters/go/gotype.vim @@ -6,7 +6,8 @@ function! ale_linters#go#gotype#GetCommand(buffer) abort return '' endif - return ale#path#BufferCdString(a:buffer) . ' gotype -e .' + return ale#path#BufferCdString(a:buffer) . ' ' + \ . ale#go#EnvString(a:buffer) . 'gotype -e .' endfunction call ale#linter#Define('go', { diff --git a/ale_linters/go/govet.vim b/ale_linters/go/govet.vim index bb81d5d0..dddafe17 100644 --- a/ale_linters/go/govet.vim +++ b/ale_linters/go/govet.vim @@ -11,6 +11,7 @@ function! ale_linters#go#govet#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'go_govet_options') return ale#path#BufferCdString(a:buffer) . ' ' + \ . ale#go#EnvString(a:buffer) \ . ale#Var(a:buffer, 'go_go_executable') . ' vet ' \ . (!empty(l:options) ? ' ' . l:options : '') \ . ' .' diff --git a/ale_linters/go/langserver.vim b/ale_linters/go/langserver.vim index 776186c7..7130db40 100644 --- a/ale_linters/go/langserver.vim +++ b/ale_linters/go/langserver.vim @@ -15,8 +15,9 @@ function! ale_linters#go#langserver#GetCommand(buffer) abort endif let l:options = uniq(sort(l:options)) + let l:env = ale#go#EnvString(a:buffer) - return join(extend(l:executable, l:options), ' ') + return l:env . join(extend(l:executable, l:options), ' ') endfunction call ale#linter#Define('go', { diff --git a/ale_linters/go/staticcheck.vim b/ale_linters/go/staticcheck.vim index 26fe0193..ed40c6c2 100644 --- a/ale_linters/go/staticcheck.vim +++ b/ale_linters/go/staticcheck.vim @@ -8,17 +8,18 @@ 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') + let l:env = ale#go#EnvString(a:buffer) " 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' + \ . l:env . 'staticcheck' \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' endif return ale#path#BufferCdString(a:buffer) - \ . 'staticcheck' + \ . l:env . 'staticcheck' \ . (!empty(l:options) ? ' ' . l:options : '') \ . ' ' . ale#Escape(l:filename) endfunction |