summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2023-09-09 14:01:00 +0100
committerw0rp <devw0rp@gmail.com>2023-09-09 14:01:00 +0100
commitd2c2bbf2dc470e5d796519bbc6060bf0bcebc1c1 (patch)
treeac4230832d4d67525fa5badb28a14e1c3bfeafdf
parent79a2dc2d8a6e1644e9c8e648f9c0e417d5400097 (diff)
downloadale-d2c2bbf2dc470e5d796519bbc6060bf0bcebc1c1.zip
Add `--globals vim` to luacheck automatically
luacheck will run with `--globals vim` automatically if the file is in runtimepath and `--globals` hasn't already been configured.
-rw-r--r--ale_linters/lua/luacheck.vim37
-rw-r--r--test/linter/test_luacheck.vader20
2 files changed, 54 insertions, 3 deletions
diff --git a/ale_linters/lua/luacheck.vim b/ale_linters/lua/luacheck.vim
index 34be2b5a..16dc08a5 100644
--- a/ale_linters/lua/luacheck.vim
+++ b/ale_linters/lua/luacheck.vim
@@ -4,8 +4,43 @@
call ale#Set('lua_luacheck_executable', 'luacheck')
call ale#Set('lua_luacheck_options', '')
+function! s:IsInRuntimepath(buffer) abort
+ let l:runtimepath_dirs = split(&runtimepath, ',')
+
+ for l:dir in ale#path#Upwards(expand('#' . a:buffer . ':p:h'))
+ for l:runtime_dir in l:runtimepath_dirs
+ if l:dir is# l:runtime_dir
+ return 1
+ endif
+ endfor
+ endfor
+
+ return 0
+endfunction
+
function! ale_linters#lua#luacheck#GetCommand(buffer) abort
- return '%e' . ale#Pad(ale#Var(a:buffer, 'lua_luacheck_options'))
+ let l:options = ale#Var(a:buffer, 'lua_luacheck_options')
+
+ " Add `--globals vim` by default if the file is in runtimepath.
+ if l:options !~# '--globals'
+ let l:in_runtime = getbufvar(a:buffer, 'ale_in_runtimepath', v:null)
+
+ if l:in_runtime is v:null
+ let l:in_runtime = s:IsInRuntimepath(a:buffer)
+ " Save the result of check this buffer so we only check once.
+ call setbufvar(a:buffer, 'ale_in_runtimepath', l:in_runtime)
+ endif
+
+ if l:in_runtime
+ if !empty(l:options)
+ let l:options .= ' '
+ endif
+
+ let l:options .= '--globals vim'
+ endif
+ endif
+
+ return '%e' . ale#Pad(l:options)
\ . ' --formatter plain --codes --filename %s -'
endfunction
diff --git a/test/linter/test_luacheck.vader b/test/linter/test_luacheck.vader
index f0ef221c..1d7276b7 100644
--- a/test/linter/test_luacheck.vader
+++ b/test/linter/test_luacheck.vader
@@ -1,14 +1,19 @@
Before:
call ale#assert#SetUpLinterTest('lua', 'luacheck')
+ " Default to testing linting Lua not in Vim directories.
+ call ale#test#SetFilename('/test.lua')
After:
+ " Clear the variable for saving the result of the runtime check.
+ " We don't want to cache the result between tests.
+ unlet! b:ale_in_runtimepath
call ale#assert#TearDownLinterTest()
-Execute(The lua luacheck command callback should return the correct default string):
+Execute(The luacheck default command should be correct):
AssertLinter 'luacheck',
\ ale#Escape('luacheck') . ' --formatter plain --codes --filename %s -'
-Execute(The lua luacheck command callback should let you set options):
+Execute(You should be able to set luacheck options):
let g:ale_lua_luacheck_options = '--config filename'
AssertLinter 'luacheck',
@@ -21,3 +26,14 @@ Execute(The luacheck executable should be configurable):
AssertLinter 'luacheck.sh',
\ ale#Escape('luacheck.sh') . ' --formatter plain --codes --filename %s -'
+
+Execute(The luacheck command should include vim as a global if in runtimepath):
+ call ale#test#SetFilename('test.lua')
+ AssertLinter 'luacheck',
+ \ ale#Escape('luacheck') . ' --globals vim --formatter plain --codes --filename %s -'
+
+Execute(The default Vim globals should not be set if globals are already set):
+ call ale#test#SetFilename('test.lua')
+ let g:ale_lua_luacheck_options = '--globals foo'
+ AssertLinter 'luacheck',
+ \ ale#Escape('luacheck') . ' --globals foo --formatter plain --codes --filename %s -'