forked from github-mirrors/ale
Make staticcheck configurable with GOPATH detection
This commit is contained in:
parent
a02a4f2811
commit
1b08791228
|
@ -7,20 +7,6 @@ call ale#Set('go_gopls_options', '--mode stdio')
|
|||
call ale#Set('go_gopls_init_options', {})
|
||||
call ale#Set('go_gopls_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
|
||||
function! s:GetGoPathExecutable(suffix) abort
|
||||
let l:prefix = $GOPATH
|
||||
|
||||
if !empty($GOPATH)
|
||||
let l:prefix = $GOPATH
|
||||
elseif has('win32')
|
||||
let l:prefix = $USERPROFILE . '/go'
|
||||
else
|
||||
let l:prefix = $HOME . '/go'
|
||||
endif
|
||||
|
||||
return ale#path#Simplify(l:prefix . '/' . a:suffix)
|
||||
endfunction
|
||||
|
||||
function! ale_linters#go#gopls#GetCommand(buffer) abort
|
||||
return ale#go#EnvString(a:buffer)
|
||||
\ . '%e'
|
||||
|
@ -45,7 +31,7 @@ call ale#linter#Define('go', {
|
|||
\ 'name': 'gopls',
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#path#FindExecutable(b, 'go_gopls', [
|
||||
\ s:GetGoPathExecutable('bin/gopls'),
|
||||
\ ale#go#GetGoPathExecutable('bin/gopls'),
|
||||
\ ])},
|
||||
\ 'command': function('ale_linters#go#gopls#GetCommand'),
|
||||
\ 'project_root': function('ale_linters#go#gopls#FindProjectRoot'),
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
" Author: Ben Reedy <https://github.com/breed808>
|
||||
" Description: staticcheck for Go files
|
||||
|
||||
call ale#Set('go_staticcheck_executable', 'staticcheck')
|
||||
call ale#Set('go_staticcheck_options', '')
|
||||
call ale#Set('go_staticcheck_lint_package', 0)
|
||||
call ale#Set('go_staticcheck_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
|
||||
function! ale_linters#go#staticcheck#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'go_staticcheck_options')
|
||||
|
@ -10,18 +12,20 @@ function! ale_linters#go#staticcheck#GetCommand(buffer) abort
|
|||
let l:env = ale#go#EnvString(a:buffer)
|
||||
|
||||
if l:lint_package
|
||||
return l:env . 'staticcheck'
|
||||
return l:env . '%e'
|
||||
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
||||
endif
|
||||
|
||||
return l:env . 'staticcheck'
|
||||
return l:env . '%e'
|
||||
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||
\ . ' %s:t'
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('go', {
|
||||
\ 'name': 'staticcheck',
|
||||
\ 'executable': 'staticcheck',
|
||||
\ 'executable': {b -> ale#path#FindExecutable(b, 'go_staticcheck', [
|
||||
\ ale#go#GetGoPathExecutable('bin/staticcheck'),
|
||||
\ ])},
|
||||
\ 'cwd': '%s:h',
|
||||
\ 'command': function('ale_linters#go#staticcheck#GetCommand'),
|
||||
\ 'callback': 'ale#handlers#go#Handler',
|
||||
|
|
|
@ -42,3 +42,17 @@ function! ale#go#EnvString(buffer) abort
|
|||
|
||||
return l:env
|
||||
endfunction
|
||||
|
||||
function! ale#go#GetGoPathExecutable(suffix) abort
|
||||
let l:prefix = $GOPATH
|
||||
|
||||
if !empty($GOPATH)
|
||||
let l:prefix = $GOPATH
|
||||
elseif has('win32')
|
||||
let l:prefix = $USERPROFILE . '/go'
|
||||
else
|
||||
let l:prefix = $HOME . '/go'
|
||||
endif
|
||||
|
||||
return ale#path#Simplify(l:prefix . '/' . a:suffix)
|
||||
endfunction
|
||||
|
|
|
@ -20,8 +20,8 @@ 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.
|
||||
|
||||
g:ale_go_go_executable *g:ale_go_go_options*
|
||||
*b:ale_go_go_options*
|
||||
g:ale_go_go_executable *g:ale_go_go_executable*
|
||||
*b:ale_go_go_executable*
|
||||
|
||||
Type: |String|
|
||||
Default: `'go'`
|
||||
|
@ -289,6 +289,18 @@ g:ale_go_revive_options *g:ale_go_revive_options*
|
|||
===============================================================================
|
||||
staticcheck *ale-go-staticcheck*
|
||||
|
||||
g:ale_go_staticcheck_executable *g:ale_go_staticcheck_executable*
|
||||
*b:ale_go_staticcheck_executable*
|
||||
Type: |String|
|
||||
Default: `'staticcheck'`
|
||||
|
||||
See |ale-integrations-local-executables|
|
||||
|
||||
ALE will search for `staticcheck` in locally installed directories first by
|
||||
default, and fall back on a globally installed `staticcheck` if it can't be
|
||||
found otherwise.
|
||||
|
||||
|
||||
g:ale_go_staticcheck_options *g:ale_go_staticcheck_options*
|
||||
*b:ale_go_staticcheck_options*
|
||||
Type: |String|
|
||||
|
@ -307,5 +319,13 @@ g:ale_go_staticcheck_lint_package *g:ale_go_staticcheck_lint_package*
|
|||
current file.
|
||||
|
||||
|
||||
g:ale_go_staticcheck_use_global *g:ale_go_staticcheck_use_global*
|
||||
*b:ale_go_staticcheck_use_global*
|
||||
Type: |String|
|
||||
Default: `get(g:, 'ale_use_global_executables', 0)`
|
||||
|
||||
See |ale-integrations-local-executables|
|
||||
|
||||
|
||||
===============================================================================
|
||||
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
Before:
|
||||
Save g:ale_go_go111module
|
||||
Save $GOPATH
|
||||
|
||||
let $GOPATH = '/non/existent/directory'
|
||||
|
||||
call ale#assert#SetUpLinterTest('go', 'staticcheck')
|
||||
call ale#test#SetFilename('test.go')
|
||||
|
@ -11,25 +14,36 @@ After:
|
|||
|
||||
Execute(The staticcheck callback should return the right defaults):
|
||||
AssertLinterCwd '%s:h'
|
||||
AssertLinter 'staticcheck', 'staticcheck %s:t'
|
||||
AssertLinter 'staticcheck', ale#Escape('staticcheck') . ' %s:t'
|
||||
|
||||
Execute(staticcheck should be found in GOPATH):
|
||||
" This is a directory with a fake executable
|
||||
let $GOPATH = ale#test#GetFilename('../test-files/go/gopath')
|
||||
|
||||
AssertLinter
|
||||
\ ale#test#GetFilename('../test-files/go/gopath/bin/staticcheck'),
|
||||
\ ale#Escape(ale#test#GetFilename('../test-files/go/gopath/bin/staticcheck'))
|
||||
\ . ' %s:t'
|
||||
|
||||
Execute(The staticcheck callback should use configured options):
|
||||
let b:ale_go_staticcheck_options = '-test'
|
||||
|
||||
AssertLinter 'staticcheck', 'staticcheck -test %s:t'
|
||||
AssertLinter 'staticcheck', ale#Escape('staticcheck') . ' -test %s:t'
|
||||
|
||||
Execute(The staticcheck `lint_package` option should use the correct command):
|
||||
let b:ale_go_staticcheck_lint_package = 1
|
||||
|
||||
AssertLinterCwd '%s:h'
|
||||
AssertLinter 'staticcheck', 'staticcheck .'
|
||||
AssertLinter 'staticcheck', ale#Escape('staticcheck') . ' .'
|
||||
|
||||
Execute(The staticcheck callback should use the `GO111MODULE` option if set):
|
||||
let b:ale_go_go111module = 'off'
|
||||
|
||||
AssertLinter 'staticcheck', ale#Env('GO111MODULE', 'off') . 'staticcheck %s:t'
|
||||
AssertLinter 'staticcheck',
|
||||
\ ale#Env('GO111MODULE', 'off') . ale#Escape('staticcheck') . ' %s:t'
|
||||
|
||||
" Test with lint_package option set
|
||||
let b:ale_go_staticcheck_lint_package = 1
|
||||
|
||||
AssertLinter 'staticcheck', ale#Env('GO111MODULE', 'off') . 'staticcheck .'
|
||||
AssertLinter 'staticcheck',
|
||||
\ ale#Env('GO111MODULE', 'off') . ale#Escape('staticcheck') . ' .'
|
||||
|
|
Loading…
Reference in New Issue