diff --git a/ale_linters/asm/gcc.vim b/ale_linters/asm/gcc.vim index 4ac876f8..fdd0ee83 100644 --- a/ale_linters/asm/gcc.vim +++ b/ale_linters/asm/gcc.vim @@ -4,15 +4,10 @@ call ale#Set('asm_gcc_executable', 'gcc') call ale#Set('asm_gcc_options', '-Wall') -function! ale_linters#asm#gcc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'asm_gcc_executable') -endfunction - function! ale_linters#asm#gcc#GetCommand(buffer) abort - return ale#Escape(ale_linters#asm#gcc#GetExecutable(a:buffer)) - \ . ' -x assembler -fsyntax-only ' - \ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - \ . ' ' . ale#Var(a:buffer, 'asm_gcc_options') . ' -' + return '%e -x assembler -fsyntax-only ' + \ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) + \ . ' ' . ale#Var(a:buffer, 'asm_gcc_options') . ' -' endfunction function! ale_linters#asm#gcc#Handle(buffer, lines) abort @@ -33,7 +28,7 @@ endfunction call ale#linter#Define('asm', { \ 'name': 'gcc', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#asm#gcc#GetExecutable', +\ 'executable_callback': ale#VarFunc('asm_gcc_executable'), \ 'command_callback': 'ale_linters#asm#gcc#GetCommand', \ 'callback': 'ale_linters#asm#gcc#Handle', \}) diff --git a/ale_linters/awk/gawk.vim b/ale_linters/awk/gawk.vim index 8b60815f..eb92e45e 100644 --- a/ale_linters/awk/gawk.vim +++ b/ale_linters/awk/gawk.vim @@ -1,29 +1,21 @@ " Author: kmarc " Description: This file adds support for using GNU awk with sripts. -let g:ale_awk_gawk_executable = -\ get(g:, 'ale_awk_gawk_executable', 'gawk') - -let g:ale_awk_gawk_options = -\ get(g:, 'ale_awk_gawk_options', '') - -function! ale_linters#awk#gawk#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'awk_gawk_executable') -endfunction +call ale#Set('awk_gawk_executable', 'gawk') +call ale#Set('awk_gawk_options', '') function! ale_linters#awk#gawk#GetCommand(buffer) abort " note the --source 'BEGIN ...' is to prevent " gawk from attempting to execute the body of the script " it is linting. - return ale#Escape(ale_linters#awk#gawk#GetExecutable(a:buffer)) - \ . " --source 'BEGIN { exit } END { exit 1 }'" + return '%e --source ' . ale#Escape('BEGIN { exit } END { exit 1 }') \ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options')) - \ . ' ' . '-f %t --lint /dev/null' + \ . ' -f %t --lint /dev/null' endfunction call ale#linter#Define('awk', { \ 'name': 'gawk', -\ 'executable_callback': 'ale_linters#awk#gawk#GetExecutable', +\ 'executable_callback': ale#VarFunc('awk_gawk_executable'), \ 'command_callback': 'ale_linters#awk#gawk#GetCommand', \ 'callback': 'ale#handlers#gawk#HandleGawkFormat', \ 'output_stream': 'both' diff --git a/ale_linters/c/clang.vim b/ale_linters/c/clang.vim index 9d49fabb..f1bd675b 100644 --- a/ale_linters/c/clang.vim +++ b/ale_linters/c/clang.vim @@ -4,17 +4,12 @@ call ale#Set('c_clang_executable', 'clang') call ale#Set('c_clang_options', '-std=c11 -Wall') -function! ale_linters#c#clang#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'c_clang_executable') -endfunction - function! ale_linters#c#clang#GetCommand(buffer, output) abort let l:cflags = ale#c#GetCFlags(a:buffer, a:output) " -iquote with the directory the file is in makes #include work for " headers in the same directory. - return ale#Escape(ale_linters#c#clang#GetExecutable(a:buffer)) - \ . ' -S -x c -fsyntax-only' + return '%e -S -x c -fsyntax-only' \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) \ . ale#Pad(l:cflags) \ . ale#Pad(ale#Var(a:buffer, 'c_clang_options')) . ' -' @@ -23,7 +18,7 @@ endfunction call ale#linter#Define('c', { \ 'name': 'clang', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#c#clang#GetExecutable', +\ 'executable_callback': ale#VarFunc('c_clang_executable'), \ 'command_chain': [ \ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'}, \ {'callback': 'ale_linters#c#clang#GetCommand'} diff --git a/ale_linters/c/clangd.vim b/ale_linters/c/clangd.vim index 5aa2e221..2c7c5c13 100644 --- a/ale_linters/c/clangd.vim +++ b/ale_linters/c/clangd.vim @@ -9,21 +9,14 @@ function! ale_linters#c#clangd#GetProjectRoot(buffer) abort return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' endfunction -function! ale_linters#c#clangd#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'c_clangd_executable') -endfunction - function! ale_linters#c#clangd#GetCommand(buffer) abort - let l:executable = ale_linters#c#clangd#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'c_clangd_options') - - return ale#Escape(l:executable) . (!empty(l:options) ? ' ' . l:options : '') + return '%e' . ale#Pad(ale#Var(a:buffer, 'c_clangd_options')) endfunction call ale#linter#Define('c', { \ 'name': 'clangd', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#c#clangd#GetExecutable', +\ 'executable_callback': ale#VarFunc('c_clangd_executable'), \ 'command_callback': 'ale_linters#c#clangd#GetCommand', \ 'project_root_callback': 'ale_linters#c#clangd#GetProjectRoot', \}) diff --git a/ale_linters/c/clangtidy.vim b/ale_linters/c/clangtidy.vim index d456a5a2..84c103e6 100644 --- a/ale_linters/c/clangtidy.vim +++ b/ale_linters/c/clangtidy.vim @@ -16,10 +16,6 @@ call ale#Set('c_clangtidy_checks', ['*']) call ale#Set('c_clangtidy_options', '') call ale#Set('c_build_dir', '') -function! ale_linters#c#clangtidy#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'c_clangtidy_executable') -endfunction - function! s:GetBuildDirectory(buffer) abort " Don't include build directory for header files, as compile_commands.json " files don't consider headers to be translation units, and provide no @@ -47,7 +43,7 @@ function! ale_linters#c#clangtidy#GetCommand(buffer) abort \ ? ale#Var(a:buffer, 'c_clangtidy_options') \ : '' - return ale#Escape(ale_linters#c#clangtidy#GetExecutable(a:buffer)) + return '%e' \ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '') \ . ' %s' \ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '') @@ -57,7 +53,7 @@ endfunction call ale#linter#Define('c', { \ 'name': 'clangtidy', \ 'output_stream': 'stdout', -\ 'executable_callback': 'ale_linters#c#clangtidy#GetExecutable', +\ 'executable_callback': ale#VarFunc('c_clangtidy_executable'), \ 'command_callback': 'ale_linters#c#clangtidy#GetCommand', \ 'callback': 'ale#handlers#gcc#HandleGCCFormat', \ 'lint_file': 1, diff --git a/ale_linters/c/cppcheck.vim b/ale_linters/c/cppcheck.vim index 4db93f74..5e8c7936 100644 --- a/ale_linters/c/cppcheck.vim +++ b/ale_linters/c/cppcheck.vim @@ -4,10 +4,6 @@ call ale#Set('c_cppcheck_executable', 'cppcheck') call ale#Set('c_cppcheck_options', '--enable=style') -function! ale_linters#c#cppcheck#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'c_cppcheck_executable') -endfunction - function! ale_linters#c#cppcheck#GetCommand(buffer) abort " Search upwards from the file for compile_commands.json. " @@ -23,8 +19,7 @@ function! ale_linters#c#cppcheck#GetCommand(buffer) abort \ : '' return l:cd_command - \ . ale#Escape(ale_linters#c#cppcheck#GetExecutable(a:buffer)) - \ . ' -q --language=c ' + \ . '%e -q --language=c ' \ . l:compile_commands_option \ . ale#Var(a:buffer, 'c_cppcheck_options') \ . ' %t' @@ -33,7 +28,7 @@ endfunction call ale#linter#Define('c', { \ 'name': 'cppcheck', \ 'output_stream': 'both', -\ 'executable_callback': 'ale_linters#c#cppcheck#GetExecutable', +\ 'executable_callback': ale#VarFunc('c_cppcheck_executable'), \ 'command_callback': 'ale_linters#c#cppcheck#GetCommand', \ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat', \}) diff --git a/ale_linters/c/cquery.vim b/ale_linters/c/cquery.vim index 208c226f..7daf9f76 100644 --- a/ale_linters/c/cquery.vim +++ b/ale_linters/c/cquery.vim @@ -9,15 +9,6 @@ function! ale_linters#c#cquery#GetProjectRoot(buffer) abort return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' endfunction -function! ale_linters#c#cquery#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'c_cquery_executable') -endfunction - -function! ale_linters#c#cquery#GetCommand(buffer) abort - let l:executable = ale_linters#c#cquery#GetExecutable(a:buffer) - return ale#Escape(l:executable) -endfunction - function! ale_linters#c#cquery#GetInitializationOptions(buffer) abort return {'cacheDirectory': ale#Var(a:buffer, 'c_cquery_cache_directory')} endfunction @@ -25,8 +16,8 @@ endfunction call ale#linter#Define('c', { \ 'name': 'cquery', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#c#cquery#GetExecutable', -\ 'command_callback': 'ale_linters#c#cquery#GetCommand', +\ 'executable_callback': ale#VarFunc('c_cquery_executable'), +\ 'command': '%e', \ 'project_root_callback': 'ale_linters#c#cquery#GetProjectRoot', \ 'initialization_options_callback': 'ale_linters#c#cquery#GetInitializationOptions', \}) diff --git a/ale_linters/c/flawfinder.vim b/ale_linters/c/flawfinder.vim index df6fbebe..7e1f6769 100644 --- a/ale_linters/c/flawfinder.vim +++ b/ale_linters/c/flawfinder.vim @@ -6,18 +6,12 @@ call ale#Set('c_flawfinder_options', '') call ale#Set('c_flawfinder_minlevel', 1) call ale#Set('c_flawfinder_error_severity', 6) -function! ale_linters#c#flawfinder#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'c_flawfinder_executable') -endfunction - function! ale_linters#c#flawfinder#GetCommand(buffer) abort - " Set the minimum vulnerability level for flawfinder to bother with let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'c_flawfinder_minlevel') - return ale#Escape(ale_linters#c#flawfinder#GetExecutable(a:buffer)) - \ . ' -CDQS' - \ . ale#Var(a:buffer, 'c_flawfinder_options') + return '%e -CDQS' + \ . ale#Pad(ale#Var(a:buffer, 'c_flawfinder_options')) \ . l:minlevel \ . ' %t' endfunction @@ -25,7 +19,7 @@ endfunction call ale#linter#Define('c', { \ 'name': 'flawfinder', \ 'output_stream': 'stdout', -\ 'executable_callback': 'ale_linters#c#flawfinder#GetExecutable', +\ 'executable_callback': ale#VarFunc('c_flawfinder_executable'), \ 'command_callback': 'ale_linters#c#flawfinder#GetCommand', \ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat', \}) diff --git a/ale_linters/c/gcc.vim b/ale_linters/c/gcc.vim index e2dff65d..60ecb712 100644 --- a/ale_linters/c/gcc.vim +++ b/ale_linters/c/gcc.vim @@ -4,17 +4,12 @@ call ale#Set('c_gcc_executable', 'gcc') call ale#Set('c_gcc_options', '-std=c11 -Wall') -function! ale_linters#c#gcc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'c_gcc_executable') -endfunction - function! ale_linters#c#gcc#GetCommand(buffer, output) abort let l:cflags = ale#c#GetCFlags(a:buffer, a:output) " -iquote with the directory the file is in makes #include work for " headers in the same directory. - return ale#Escape(ale_linters#c#gcc#GetExecutable(a:buffer)) - \ . ' -S -x c -fsyntax-only' + return '%e -S -x c -fsyntax-only' \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) \ . ale#Pad(l:cflags) \ . ale#Pad(ale#Var(a:buffer, 'c_gcc_options')) . ' -' @@ -23,7 +18,7 @@ endfunction call ale#linter#Define('c', { \ 'name': 'gcc', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#c#gcc#GetExecutable', +\ 'executable_callback': ale#VarFunc('c_gcc_executable'), \ 'command_chain': [ \ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'}, \ {'callback': 'ale_linters#c#gcc#GetCommand'} diff --git a/ale_linters/chef/foodcritic.vim b/ale_linters/chef/foodcritic.vim index 2c28246c..c86336d6 100644 --- a/ale_linters/chef/foodcritic.vim +++ b/ale_linters/chef/foodcritic.vim @@ -6,17 +6,10 @@ call ale#Set('chef_foodcritic_executable', 'foodcritic') call ale#Set('chef_foodcritic_options', '') -function! ale_linters#chef#foodcritic#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'chef_foodcritic_executable') -endfunction - function! ale_linters#chef#foodcritic#GetCommand(buffer) abort - let l:executable = ale_linters#chef#foodcritic#GetExecutable(a:buffer) let l:options = ale#Var(a:buffer, 'chef_foodcritic_options') - return ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . escape(l:options, '~') : '') - \ . ' %s' + return '%e' . ale#Pad(escape(l:options, '~')) . ' %s' endfunction function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort @@ -41,7 +34,7 @@ endfunction call ale#linter#Define('chef', { \ 'name': 'foodcritic', -\ 'executable_callback': 'ale_linters#chef#foodcritic#GetExecutable', +\ 'executable_callback': ale#VarFunc('chef_foodcritic_executable'), \ 'command_callback': 'ale_linters#chef#foodcritic#GetCommand', \ 'callback': 'ale_linters#chef#foodcritic#Handle', \ 'lint_file': 1, diff --git a/ale_linters/cpp/clang.vim b/ale_linters/cpp/clang.vim index 72793a71..649c5993 100644 --- a/ale_linters/cpp/clang.vim +++ b/ale_linters/cpp/clang.vim @@ -4,17 +4,12 @@ call ale#Set('cpp_clang_executable', 'clang++') call ale#Set('cpp_clang_options', '-std=c++14 -Wall') -function! ale_linters#cpp#clang#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_clang_executable') -endfunction - function! ale_linters#cpp#clang#GetCommand(buffer, output) abort let l:cflags = ale#c#GetCFlags(a:buffer, a:output) " -iquote with the directory the file is in makes #include work for " headers in the same directory. - return ale#Escape(ale_linters#cpp#clang#GetExecutable(a:buffer)) - \ . ' -S -x c++ -fsyntax-only' + return '%e -S -x c++ -fsyntax-only' \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) \ . ale#Pad(l:cflags) \ . ale#Pad(ale#Var(a:buffer, 'cpp_clang_options')) . ' -' @@ -23,7 +18,7 @@ endfunction call ale#linter#Define('cpp', { \ 'name': 'clang', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#cpp#clang#GetExecutable', +\ 'executable_callback': ale#VarFunc('cpp_clang_executable'), \ 'command_chain': [ \ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'}, \ {'callback': 'ale_linters#cpp#clang#GetCommand'}, diff --git a/ale_linters/cpp/clangcheck.vim b/ale_linters/cpp/clangcheck.vim index 687991bd..c66d6702 100644 --- a/ale_linters/cpp/clangcheck.vim +++ b/ale_linters/cpp/clangcheck.vim @@ -5,10 +5,6 @@ call ale#Set('cpp_clangcheck_executable', 'clang-check') call ale#Set('cpp_clangcheck_options', '') call ale#Set('c_build_dir', '') -function! ale_linters#cpp#clangcheck#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_clangcheck_executable') -endfunction - function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort let l:user_options = ale#Var(a:buffer, 'cpp_clangcheck_options') @@ -22,17 +18,16 @@ function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort " The extra arguments in the command are used to prevent .plist files from " being generated. These are only added if no build directory can be " detected. - return ale#Escape(ale_linters#cpp#clangcheck#GetExecutable(a:buffer)) - \ . ' -analyze %s' + return '%e -analyze %s' \ . (empty(l:build_dir) ? ' -extra-arg -Xclang -extra-arg -analyzer-output=text' : '') - \ . (!empty(l:user_options) ? ' ' . l:user_options : '') + \ . ale#Pad(l:user_options) \ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '') endfunction call ale#linter#Define('cpp', { \ 'name': 'clangcheck', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#cpp#clangcheck#GetExecutable', +\ 'executable_callback': ale#VarFunc('cpp_clangcheck_executable'), \ 'command_callback': 'ale_linters#cpp#clangcheck#GetCommand', \ 'callback': 'ale#handlers#gcc#HandleGCCFormat', \ 'lint_file': 1, diff --git a/ale_linters/cpp/clangtidy.vim b/ale_linters/cpp/clangtidy.vim index d683327f..930087a8 100644 --- a/ale_linters/cpp/clangtidy.vim +++ b/ale_linters/cpp/clangtidy.vim @@ -10,10 +10,6 @@ call ale#Set('cpp_clangtidy_checks', ['*']) call ale#Set('cpp_clangtidy_options', '') call ale#Set('c_build_dir', '') -function! ale_linters#cpp#clangtidy#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_clangtidy_executable') -endfunction - function! s:GetBuildDirectory(buffer) abort " Don't include build directory for header files, as compile_commands.json " files don't consider headers to be translation units, and provide no @@ -41,7 +37,7 @@ function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort \ ? ale#Var(a:buffer, 'cpp_clangtidy_options') \ : '' - return ale#Escape(ale_linters#cpp#clangtidy#GetExecutable(a:buffer)) + return '%e' \ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '') \ . ' %s' \ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '') @@ -51,7 +47,7 @@ endfunction call ale#linter#Define('cpp', { \ 'name': 'clangtidy', \ 'output_stream': 'stdout', -\ 'executable_callback': 'ale_linters#cpp#clangtidy#GetExecutable', +\ 'executable_callback': ale#VarFunc('cpp_clangtidy_executable'), \ 'command_callback': 'ale_linters#cpp#clangtidy#GetCommand', \ 'callback': 'ale#handlers#gcc#HandleGCCFormat', \ 'lint_file': 1, diff --git a/ale_linters/cpp/cppcheck.vim b/ale_linters/cpp/cppcheck.vim index 8b2aa802..229d6133 100644 --- a/ale_linters/cpp/cppcheck.vim +++ b/ale_linters/cpp/cppcheck.vim @@ -4,10 +4,6 @@ call ale#Set('cpp_cppcheck_executable', 'cppcheck') call ale#Set('cpp_cppcheck_options', '--enable=style') -function! ale_linters#cpp#cppcheck#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_cppcheck_executable') -endfunction - function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort " Search upwards from the file for compile_commands.json. " @@ -23,8 +19,7 @@ function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort \ : '' return l:cd_command - \ . ale#Escape(ale_linters#cpp#cppcheck#GetExecutable(a:buffer)) - \ . ' -q --language=c++ ' + \ . '%e -q --language=c++ ' \ . l:compile_commands_option \ . ale#Var(a:buffer, 'cpp_cppcheck_options') \ . ' %t' @@ -33,7 +28,7 @@ endfunction call ale#linter#Define('cpp', { \ 'name': 'cppcheck', \ 'output_stream': 'both', -\ 'executable_callback': 'ale_linters#cpp#cppcheck#GetExecutable', +\ 'executable_callback': ale#VarFunc('cpp_cppcheck_executable'), \ 'command_callback': 'ale_linters#cpp#cppcheck#GetCommand', \ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat', \}) diff --git a/ale_linters/cpp/cpplint.vim b/ale_linters/cpp/cpplint.vim index 346ac815..d135fa79 100644 --- a/ale_linters/cpp/cpplint.vim +++ b/ale_linters/cpp/cpplint.vim @@ -4,22 +4,16 @@ call ale#Set('cpp_cpplint_executable', 'cpplint') call ale#Set('cpp_cpplint_options', '') -function! ale_linters#cpp#cpplint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_cpplint_executable') -endfunction - function! ale_linters#cpp#cpplint#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'cpp_cpplint_options') - return ale#Escape(ale_linters#cpp#cpplint#GetExecutable(a:buffer)) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %s' + return '%e' . ale#Pad(l:options) . ' %s' endfunction call ale#linter#Define('cpp', { \ 'name': 'cpplint', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#cpp#cpplint#GetExecutable', +\ 'executable_callback': ale#VarFunc('cpp_cpplint_executable'), \ 'command_callback': 'ale_linters#cpp#cpplint#GetCommand', \ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat', \ 'lint_file': 1, diff --git a/ale_linters/cpp/cquery.vim b/ale_linters/cpp/cquery.vim index 7997c843..39eebce3 100644 --- a/ale_linters/cpp/cquery.vim +++ b/ale_linters/cpp/cquery.vim @@ -10,15 +10,6 @@ function! ale_linters#cpp#cquery#GetProjectRoot(buffer) abort return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' endfunction -function! ale_linters#cpp#cquery#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_cquery_executable') -endfunction - -function! ale_linters#cpp#cquery#GetCommand(buffer) abort - let l:executable = ale_linters#cpp#cquery#GetExecutable(a:buffer) - return ale#Escape(l:executable) -endfunction - function! ale_linters#cpp#cquery#GetInitializationOptions(buffer) abort return {'cacheDirectory': ale#Var(a:buffer, 'cpp_cquery_cache_directory')} endfunction @@ -26,8 +17,8 @@ endfunction call ale#linter#Define('cpp', { \ 'name': 'cquery', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#cpp#cquery#GetExecutable', -\ 'command_callback': 'ale_linters#cpp#cquery#GetCommand', +\ 'executable_callback': ale#VarFunc('cpp_cquery_executable'), +\ 'command': '%e', \ 'project_root_callback': 'ale_linters#cpp#cquery#GetProjectRoot', \ 'initialization_options_callback': 'ale_linters#cpp#cquery#GetInitializationOptions', \}) diff --git a/ale_linters/cpp/flawfinder.vim b/ale_linters/cpp/flawfinder.vim index 5a7092cf..4f669bff 100644 --- a/ale_linters/cpp/flawfinder.vim +++ b/ale_linters/cpp/flawfinder.vim @@ -6,17 +6,11 @@ call ale#Set('cpp_flawfinder_options', '') call ale#Set('cpp_flawfinder_minlevel', 1) call ale#Set('c_flawfinder_error_severity', 6) -function! ale_linters#cpp#flawfinder#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_flawfinder_executable') -endfunction - function! ale_linters#cpp#flawfinder#GetCommand(buffer) abort - " Set the minimum vulnerability level for flawfinder to bother with let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'cpp_flawfinder_minlevel') - return ale#Escape(ale_linters#cpp#flawfinder#GetExecutable(a:buffer)) - \ . ' -CDQS' + return '%e -CDQS' \ . ale#Var(a:buffer, 'cpp_flawfinder_options') \ . l:minlevel \ . ' %t' @@ -25,7 +19,7 @@ endfunction call ale#linter#Define('cpp', { \ 'name': 'flawfinder', \ 'output_stream': 'stdout', -\ 'executable_callback': 'ale_linters#cpp#flawfinder#GetExecutable', +\ 'executable_callback': ale#VarFunc('cpp_flawfinder_executable'), \ 'command_callback': 'ale_linters#cpp#flawfinder#GetCommand', \ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat', \}) diff --git a/ale_linters/cpp/gcc.vim b/ale_linters/cpp/gcc.vim index 17f5acf5..9935b0bb 100644 --- a/ale_linters/cpp/gcc.vim +++ b/ale_linters/cpp/gcc.vim @@ -4,17 +4,12 @@ call ale#Set('cpp_gcc_executable', 'gcc') call ale#Set('cpp_gcc_options', '-std=c++14 -Wall') -function! ale_linters#cpp#gcc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cpp_gcc_executable') -endfunction - function! ale_linters#cpp#gcc#GetCommand(buffer, output) abort let l:cflags = ale#c#GetCFlags(a:buffer, a:output) " -iquote with the directory the file is in makes #include work for " headers in the same directory. - return ale#Escape(ale_linters#cpp#gcc#GetExecutable(a:buffer)) - \ . ' -S -x c++ -fsyntax-only' + return '%e -S -x c++ -fsyntax-only' \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) \ . ale#Pad(l:cflags) \ . ale#Pad(ale#Var(a:buffer, 'cpp_gcc_options')) . ' -' @@ -24,7 +19,7 @@ call ale#linter#Define('cpp', { \ 'name': 'gcc', \ 'aliases': ['g++'], \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#cpp#gcc#GetExecutable', +\ 'executable_callback': ale#VarFunc('cpp_gcc_executable'), \ 'command_chain': [ \ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'}, \ {'callback': 'ale_linters#cpp#gcc#GetCommand'}, diff --git a/ale_linters/css/stylelint.vim b/ale_linters/css/stylelint.vim index a16dfde2..6f8bef68 100644 --- a/ale_linters/css/stylelint.vim +++ b/ale_linters/css/stylelint.vim @@ -4,21 +4,16 @@ call ale#Set('css_stylelint_executable', 'stylelint') call ale#Set('css_stylelint_options', '') call ale#Set('css_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#css#stylelint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'css_stylelint', [ - \ 'node_modules/.bin/stylelint', - \]) -endfunction - function! ale_linters#css#stylelint#GetCommand(buffer) abort - return ale_linters#css#stylelint#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'css_stylelint_options') + return '%e ' . ale#Pad(ale#Var(a:buffer, 'css_stylelint_options')) \ . ' --stdin-filename %s' endfunction call ale#linter#Define('css', { \ 'name': 'stylelint', -\ 'executable_callback': 'ale_linters#css#stylelint#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('css_stylelint', [ +\ 'node_modules/.bin/stylelint', +\ ]), \ 'command_callback': 'ale_linters#css#stylelint#GetCommand', \ 'callback': 'ale#handlers#css#HandleStyleLintFormat', \}) diff --git a/ale_linters/cuda/nvcc.vim b/ale_linters/cuda/nvcc.vim index 3764fe9d..a3678910 100644 --- a/ale_linters/cuda/nvcc.vim +++ b/ale_linters/cuda/nvcc.vim @@ -4,20 +4,15 @@ call ale#Set('cuda_nvcc_executable', 'nvcc') call ale#Set('cuda_nvcc_options', '-std=c++11') -function! ale_linters#cuda#nvcc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'cuda_nvcc_executable') -endfunction - function! ale_linters#cuda#nvcc#GetCommand(buffer) abort " Unused: use ale#util#nul_file " let l:output_file = ale#util#Tempname() . '.ii' " call ale#engine#ManageFile(a:buffer, l:output_file) - return ale#Escape(ale_linters#cuda#nvcc#GetExecutable(a:buffer)) - \ . ' -cuda ' - \ . ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer)) - \ . ale#Var(a:buffer, 'cuda_nvcc_options') . ' %s' - \ . ' -o ' . g:ale#util#nul_file + return '%e -cuda' + \ . ale#Pad(ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer))) + \ . ale#Pad(ale#Var(a:buffer, 'cuda_nvcc_options')) + \ . ' %s -o ' . g:ale#util#nul_file endfunction function! ale_linters#cuda#nvcc#HandleNVCCFormat(buffer, lines) abort @@ -49,7 +44,7 @@ endfunction call ale#linter#Define('cuda', { \ 'name': 'nvcc', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#cuda#nvcc#GetExecutable', +\ 'executable_callback': ale#VarFunc('cuda_nvcc_executable'), \ 'command_callback': 'ale_linters#cuda#nvcc#GetCommand', \ 'callback': 'ale_linters#cuda#nvcc#HandleNVCCFormat', \ 'lint_file': 1, diff --git a/ale_linters/dart/dartanalyzer.vim b/ale_linters/dart/dartanalyzer.vim index ef33c9d4..26817df5 100644 --- a/ale_linters/dart/dartanalyzer.vim +++ b/ale_linters/dart/dartanalyzer.vim @@ -3,15 +3,10 @@ call ale#Set('dart_dartanalyzer_executable', 'dartanalyzer') -function! ale_linters#dart#dartanalyzer#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'dart_dartanalyzer_executable') -endfunction - function! ale_linters#dart#dartanalyzer#GetCommand(buffer) abort - let l:executable = ale_linters#dart#dartanalyzer#GetExecutable(a:buffer) let l:path = ale#path#FindNearestFile(a:buffer, '.packages') - return ale#Escape(l:executable) + return '%e' \ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '') \ . ' %s' endfunction @@ -34,7 +29,7 @@ endfunction call ale#linter#Define('dart', { \ 'name': 'dartanalyzer', -\ 'executable_callback': 'ale_linters#dart#dartanalyzer#GetExecutable', +\ 'executable_callback': ale#VarFunc('dart_dartanalyzer_executable'), \ 'command_callback': 'ale_linters#dart#dartanalyzer#GetCommand', \ 'callback': 'ale_linters#dart#dartanalyzer#Handle', \ 'lint_file': 1, diff --git a/ale_linters/dart/language_server.vim b/ale_linters/dart/language_server.vim index 2265e37a..14b6ab93 100644 --- a/ale_linters/dart/language_server.vim +++ b/ale_linters/dart/language_server.vim @@ -3,10 +3,6 @@ call ale#Set('dart_language_server_executable', 'dart_language_server') -function! ale_linters#dart#language_server#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'dart_language_server_executable') -endfunction - function! ale_linters#dart#language_server#GetProjectRoot(buffer) abort " Note: pub only looks for pubspec.yaml, there's no point in adding " support for pubspec.yml @@ -18,7 +14,7 @@ endfunction call ale#linter#Define('dart', { \ 'name': 'language_server', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#dart#language_server#GetExecutable', +\ 'executable_callback': ale#VarFunc('dart_language_server_executable'), \ 'command_callback': 'ale_linters#dart#language_server#GetExecutable', \ 'project_root_callback': 'ale_linters#dart#language_server#GetProjectRoot', \}) diff --git a/ale_linters/elm/make.vim b/ale_linters/elm/make.vim index 8231ad47..ddea983f 100644 --- a/ale_linters/elm/make.vim +++ b/ale_linters/elm/make.vim @@ -4,12 +4,6 @@ call ale#Set('elm_make_executable', 'elm') call ale#Set('elm_make_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#elm#make#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'elm_make', [ - \ 'node_modules/.bin/elm', - \]) -endfunction - function! ale_linters#elm#make#Handle(buffer, lines) abort let l:output = [] let l:unparsed_lines = [] @@ -147,7 +141,6 @@ endfunction " If it doesn't, then this will fail when imports are needed. function! ale_linters#elm#make#GetCommand(buffer) abort let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json') - let l:elm_exe = ale_linters#elm#make#GetExecutable(a:buffer) if empty(l:elm_json) " Fallback to Elm 0.18 @@ -165,18 +158,15 @@ function! ale_linters#elm#make#GetCommand(buffer) abort " a sort of flag to tell the compiler not to generate an output file, " which is why this is hard coded here. " Source: https://github.com/elm-lang/elm-compiler/blob/19d5a769b30ec0b2fc4475985abb4cd94cd1d6c3/builder/src/Generate/Output.hs#L253 - let l:elm_cmd = ale#Escape(l:elm_exe) - \ . ' make' - \ . ' --report=json' - \ . ' --output=/dev/null' - - return l:dir_set_cmd . ' ' . l:elm_cmd . ' %t' + return l:dir_set_cmd . '%e make --report=json --output=/dev/null %t' endfunction call ale#linter#Define('elm', { -\ 'name': 'make', -\ 'executable_callback': 'ale_linters#elm#make#GetExecutable', -\ 'output_stream': 'both', -\ 'command_callback': 'ale_linters#elm#make#GetCommand', -\ 'callback': 'ale_linters#elm#make#Handle' +\ 'name': 'make', +\ 'executable_callback': ale#node#FindExecutableFunc('elm_make', [ +\ 'node_modules/.bin/elm', +\ ]), +\ 'output_stream': 'both', +\ 'command_callback': 'ale_linters#elm#make#GetCommand', +\ 'callback': 'ale_linters#elm#make#Handle' \}) diff --git a/ale_linters/erlang/syntaxerl.vim b/ale_linters/erlang/syntaxerl.vim index 46ecdcb7..5b679743 100644 --- a/ale_linters/erlang/syntaxerl.vim +++ b/ale_linters/erlang/syntaxerl.vim @@ -3,24 +3,12 @@ call ale#Set('erlang_syntaxerl_executable', 'syntaxerl') - -function! ale_linters#erlang#syntaxerl#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'erlang_syntaxerl_executable') -endfunction - - -function! ale_linters#erlang#syntaxerl#FeatureCheck(buffer) abort - return s:GetEscapedExecutable(a:buffer) . ' -h' -endfunction - - function! ale_linters#erlang#syntaxerl#GetCommand(buffer, output) abort let l:use_b_option = match(a:output, '\C\V-b, --base\>') > -1 - return s:GetEscapedExecutable(a:buffer) . (l:use_b_option ? ' -b %s %t' : ' %t') + return '%e' . (l:use_b_option ? ' -b %s %t' : ' %t') endfunction - function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort let l:pattern = '\v\C:(\d+):( warning:)? (.+)' let l:loclist = [] @@ -36,17 +24,11 @@ function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort return l:loclist endfunction - -function! s:GetEscapedExecutable(buffer) abort - return ale#Escape(ale_linters#erlang#syntaxerl#GetExecutable(a:buffer)) -endfunction - - call ale#linter#Define('erlang', { \ 'name': 'syntaxerl', -\ 'executable_callback': 'ale_linters#erlang#syntaxerl#GetExecutable', +\ 'executable_callback': ale#VarFunc('erlang_syntaxerl_executable'), \ 'command_chain': [ -\ {'callback': 'ale_linters#erlang#syntaxerl#FeatureCheck'}, +\ {'callback': {-> '%e -h'}}, \ {'callback': 'ale_linters#erlang#syntaxerl#GetCommand'}, \ ], \ 'callback': 'ale_linters#erlang#syntaxerl#Handle', diff --git a/ale_linters/fortran/gcc.vim b/ale_linters/fortran/gcc.vim index 5f2ac018..f1595789 100644 --- a/ale_linters/fortran/gcc.vim +++ b/ale_linters/fortran/gcc.vim @@ -2,18 +2,10 @@ " Description: gcc for Fortran files " This option can be set to 0 to use -ffixed-form -if !exists('g:ale_fortran_gcc_use_free_form') - let g:ale_fortran_gcc_use_free_form = 1 -endif - -if !exists('g:ale_fortran_gcc_executable') - let g:ale_fortran_gcc_executable = 'gcc' -endif - +call ale#Set('fortran_gcc_use_free_form', 1) +call ale#Set('fortran_gcc_executable', 'gcc') " Set this option to change the GCC options for warnings for Fortran. -if !exists('g:ale_fortran_gcc_options') - let g:ale_fortran_gcc_options = '-Wall' -endif +call ale#Set('fortran_gcc_options', '-Wall') function! ale_linters#fortran#gcc#Handle(buffer, lines) abort " We have to match a starting line and a later ending line together, @@ -61,26 +53,20 @@ function! ale_linters#fortran#gcc#Handle(buffer, lines) abort return l:output endfunction -function! ale_linters#fortran#gcc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'fortran_gcc_executable') -endfunction - function! ale_linters#fortran#gcc#GetCommand(buffer) abort let l:layout_option = ale#Var(a:buffer, 'fortran_gcc_use_free_form') \ ? '-ffree-form' \ : '-ffixed-form' - return ale_linters#fortran#gcc#GetExecutable(a:buffer) - \ . ' -S -x f95 -fsyntax-only ' - \ . l:layout_option . ' ' - \ . ale#Var(a:buffer, 'fortran_gcc_options') . ' ' - \ . '-' + return '%e -S -x f95 -fsyntax-only ' . l:layout_option + \ . ale#Pad(ale#Var(a:buffer, 'fortran_gcc_options')) + \ . ' -' endfunction call ale#linter#Define('fortran', { \ 'name': 'gcc', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#fortran#gcc#GetExecutable', +\ 'executable_callback': ale#VarFunc('fortran_gcc_executable'), \ 'command_callback': 'ale_linters#fortran#gcc#GetCommand', \ 'callback': 'ale_linters#fortran#gcc#Handle', \}) diff --git a/ale_linters/fortran/language_server.vim b/ale_linters/fortran/language_server.vim index fd763fcf..4e5f5dc4 100644 --- a/ale_linters/fortran/language_server.vim +++ b/ale_linters/fortran/language_server.vim @@ -4,14 +4,6 @@ call ale#Set('fortran_language_server_executable', 'fortls') call ale#Set('fortran_language_server_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#fortran#language_server#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'fortran_language_server_executable') -endfunction - -function! ale_linters#fortran#language_server#GetCommand(buffer) abort - return ale#Escape(ale_linters#fortran#language_server#GetExecutable(a:buffer)) -endfunction - function! ale_linters#fortran#language_server#GetProjectRoot(buffer) abort let l:fortls_file = ale#path#FindNearestFile(a:buffer, '.fortls') @@ -21,7 +13,7 @@ endfunction call ale#linter#Define('fortran', { \ 'name': 'language_server', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#fortran#language_server#GetExecutable', -\ 'command_callback': 'ale_linters#fortran#language_server#GetCommand', +\ 'executable_callback': ale#VarFunc('fortran_language_server_executable'), +\ 'command': '%e', \ 'project_root_callback': 'ale_linters#fortran#language_server#GetProjectRoot', \}) diff --git a/ale_linters/fuse/fusionlint.vim b/ale_linters/fuse/fusionlint.vim index cf20e1b4..ab8f143b 100644 --- a/ale_linters/fuse/fusionlint.vim +++ b/ale_linters/fuse/fusionlint.vim @@ -4,13 +4,8 @@ call ale#Set('fuse_fusionlint_executable', 'fusion-lint') call ale#Set('fuse_fusionlint_options', '') -function! ale_linters#fuse#fusionlint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'fuse_fusionlint_executable') -endfunction - function! ale_linters#fuse#fusionlint#GetCommand(buffer) abort - return ale#Escape(ale_linters#fuse#fusionlint#GetExecutable(a:buffer)) - \ . ale#Pad(ale#Var(a:buffer, 'fuse_fusionlint_options')) + return '%e' . ale#Pad(ale#Var(a:buffer, 'fuse_fusionlint_options')) \ . ' --filename %s -i' endfunction @@ -32,7 +27,7 @@ endfunction call ale#linter#Define('fuse', { \ 'name': 'fusionlint', -\ 'executable_callback': 'ale_linters#fuse#fusionlint#GetExecutable', +\ 'executable_callback': ale#VarFunc('fuse_fusionlint_executable'), \ 'command_callback': 'ale_linters#fuse#fusionlint#GetCommand', \ 'callback': 'ale_linters#fuse#fusionlint#Handle', \}) diff --git a/ale_linters/gitcommit/gitlint.vim b/ale_linters/gitcommit/gitlint.vim index 64731055..ec3bfb0b 100644 --- a/ale_linters/gitcommit/gitlint.vim +++ b/ale_linters/gitcommit/gitlint.vim @@ -1,11 +1,9 @@ " Author: Nick Yamane " Description: gitlint for git commit message files -let g:ale_gitcommit_gitlint_executable = -\ get(g:, 'ale_gitcommit_gitlint_executable', 'gitlint') -let g:ale_gitcommit_gitlint_options = get(g:, 'ale_gitcommit_gitlint_options', '') -let g:ale_gitcommit_gitlint_use_global = get(g:, 'ale_gitcommit_gitlint_use_global', get(g:, 'ale_use_global_executables', 0)) - +call ale#Set('gitcommit_gitlint_executable', 'gitlint') +call ale#Set('gitcommit_gitlint_options', '') +call ale#Set('gitcommit_gitlint_use_global', get(g:, 'ale_use_global_executables', 0)) function! ale_linters#gitcommit#gitlint#GetExecutable(buffer) abort return ale#python#FindExecutable(a:buffer, 'gitcommit_gitlint', ['gitlint']) @@ -13,12 +11,9 @@ endfunction function! ale_linters#gitcommit#gitlint#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'gitcommit_gitlint_options') - let l:executable = ale_linters#gitcommit#gitlint#GetExecutable(a:buffer) - return ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' lint' -endfunction + return '%e' . ale#Pad(l:options) . ' lint' +endfunction function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort " Matches patterns line the following: @@ -45,7 +40,6 @@ function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort return l:output endfunction - call ale#linter#Define('gitcommit', { \ 'name': 'gitlint', \ 'output_stream': 'stderr', @@ -53,4 +47,3 @@ call ale#linter#Define('gitcommit', { \ 'command_callback': 'ale_linters#gitcommit#gitlint#GetCommand', \ 'callback': 'ale_linters#gitcommit#gitlint#Handle', \}) - diff --git a/ale_linters/glsl/glslang.vim b/ale_linters/glsl/glslang.vim index d494df0e..d55a5e7c 100644 --- a/ale_linters/glsl/glslang.vim +++ b/ale_linters/glsl/glslang.vim @@ -4,17 +4,11 @@ " TODO: Once https://github.com/KhronosGroup/glslang/pull/1047 is accepted, " we can use stdin. -let g:ale_glsl_glslang_executable = -\ get(g:, 'ale_glsl_glslang_executable', 'glslangValidator') - -let g:ale_glsl_glslang_options = get(g:, 'ale_glsl_glslang_options', '') - -function! ale_linters#glsl#glslang#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'glsl_glslang_executable') -endfunction +call ale#Set('glsl_glslang_executable', 'glslangValidator') +call ale#Set('glsl_glslang_options', '') function! ale_linters#glsl#glslang#GetCommand(buffer) abort - return ale#Escape(ale_linters#glsl#glslang#GetExecutable(a:buffer)) + return '%e' \ . ale#Pad(ale#Var(a:buffer, 'glsl_glslang_options')) \ . ' -C %t' endfunction @@ -40,7 +34,7 @@ endfunction call ale#linter#Define('glsl', { \ 'name': 'glslang', -\ 'executable_callback': 'ale_linters#glsl#glslang#GetExecutable', +\ 'executable_callback': ale#VarFunc('glsl_glslang_executable'), \ 'command_callback': 'ale_linters#glsl#glslang#GetCommand', \ 'callback': 'ale_linters#glsl#glslang#Handle', \}) diff --git a/ale_linters/glsl/glslls.vim b/ale_linters/glsl/glslls.vim index 77e30f9c..8c6d9bd9 100644 --- a/ale_linters/glsl/glslls.vim +++ b/ale_linters/glsl/glslls.vim @@ -4,18 +4,15 @@ call ale#Set('glsl_glslls_executable', 'glslls') call ale#Set('glsl_glslls_logfile', '') -function! ale_linters#glsl#glslls#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'glsl_glslls_executable') -endfunction - function! ale_linters#glsl#glslls#GetCommand(buffer) abort - let l:executable = ale_linters#glsl#glslls#GetExecutable(a:buffer) let l:logfile = ale#Var(a:buffer, 'glsl_glslls_logfile') let l:logfile_args = '' + if l:logfile isnot# '' let l:logfile_args = ' --verbose -l ' . l:logfile endif - return ale#Escape(l:executable) . l:logfile_args . ' --stdin' + + return '%e' . l:logfile_args . ' --stdin' endfunction function! ale_linters#glsl#glslls#GetProjectRoot(buffer) abort @@ -27,7 +24,7 @@ endfunction call ale#linter#Define('glsl', { \ 'name': 'glslls', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#glsl#glslls#GetExecutable', +\ 'executable_callback': ale#VarFunc('glsl_glslls_executable'), \ 'command_callback': 'ale_linters#glsl#glslls#GetCommand', \ 'project_root_callback': 'ale_linters#glsl#glslls#GetProjectRoot', \}) diff --git a/ale_linters/go/gometalinter.vim b/ale_linters/go/gometalinter.vim index 375a8b0f..d005e1d2 100644 --- a/ale_linters/go/gometalinter.vim +++ b/ale_linters/go/gometalinter.vim @@ -5,12 +5,7 @@ call ale#Set('go_gometalinter_options', '') call ale#Set('go_gometalinter_executable', 'gometalinter') call ale#Set('go_gometalinter_lint_package', 0) -function! ale_linters#go#gometalinter#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'go_gometalinter_executable') -endfunction - function! ale_linters#go#gometalinter#GetCommand(buffer) abort - let l:executable = ale_linters#go#gometalinter#GetExecutable(a:buffer) let l:filename = expand('#' . a:buffer . ':t') let l:options = ale#Var(a:buffer, 'go_gometalinter_options') let l:lint_package = ale#Var(a:buffer, 'go_gometalinter_lint_package') @@ -19,12 +14,12 @@ 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#Escape(l:executable) + \ . '%e' \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' endif return ale#path#BufferCdString(a:buffer) - \ . ale#Escape(l:executable) + \ . '%e' \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename)) \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' endfunction @@ -55,7 +50,7 @@ endfunction call ale#linter#Define('go', { \ 'name': 'gometalinter', -\ 'executable_callback': 'ale_linters#go#gometalinter#GetExecutable', +\ 'executable_callback': ale#VarFunc('go_gometalinter_executable'), \ 'command_callback': 'ale_linters#go#gometalinter#GetCommand', \ 'callback': 'ale_linters#go#gometalinter#Handler', \ 'lint_file': 1, diff --git a/ale_linters/handlebars/embertemplatelint.vim b/ale_linters/handlebars/embertemplatelint.vim index 162a033c..4fc0f20d 100644 --- a/ale_linters/handlebars/embertemplatelint.vim +++ b/ale_linters/handlebars/embertemplatelint.vim @@ -4,17 +4,6 @@ call ale#Set('handlebars_embertemplatelint_executable', 'ember-template-lint') call ale#Set('handlebars_embertemplatelint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#handlebars#embertemplatelint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'handlebars_embertemplatelint', [ - \ 'node_modules/.bin/ember-template-lint', - \]) -endfunction - -function! ale_linters#handlebars#embertemplatelint#GetCommand(buffer) abort - return ale_linters#handlebars#embertemplatelint#GetExecutable(a:buffer) - \ . ' --json %t' -endfunction - function! ale_linters#handlebars#embertemplatelint#Handle(buffer, lines) abort let l:output = [] let l:json = ale#util#FuzzyJSONDecode(a:lines, {}) @@ -42,7 +31,9 @@ endfunction call ale#linter#Define('handlebars', { \ 'name': 'ember-template-lint', -\ 'executable_callback': 'ale_linters#handlebars#embertemplatelint#GetExecutable', -\ 'command_callback': 'ale_linters#handlebars#embertemplatelint#GetCommand', +\ 'executable_callback': ale#node#FindExecutableFunc('handlebars_embertemplatelint', [ +\ 'node_modules/.bin/ember-template-lint', +\ ]), +\ 'command': '%e --json %t', \ 'callback': 'ale_linters#handlebars#embertemplatelint#Handle', \}) diff --git a/ale_linters/haskell/hdevtools.vim b/ale_linters/haskell/hdevtools.vim index dc902152..fbd5278e 100644 --- a/ale_linters/haskell/hdevtools.vim +++ b/ale_linters/haskell/hdevtools.vim @@ -4,19 +4,14 @@ call ale#Set('haskell_hdevtools_executable', 'hdevtools') call ale#Set('haskell_hdevtools_options', get(g:, 'hdevtools_options', '-g -Wall')) -function! ale_linters#haskell#hdevtools#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'haskell_hdevtools_executable') -endfunction - function! ale_linters#haskell#hdevtools#GetCommand(buffer) abort - return ale#Escape(ale_linters#haskell#hdevtools#GetExecutable(a:buffer)) - \ . ' check ' . ale#Var(a:buffer, 'haskell_hdevtools_options') - \ . ' -p %s %t' + return '%e check' . ale#Pad(ale#Var(a:buffer, 'haskell_hdevtools_options')) + \ . ' -p %s %t' endfunction call ale#linter#Define('haskell', { \ 'name': 'hdevtools', -\ 'executable_callback': 'ale_linters#haskell#hdevtools#GetExecutable', +\ 'executable_callback': ale#VarFunc('haskell_hdevtools_executable'), \ 'command_callback': 'ale_linters#haskell#hdevtools#GetCommand', \ 'callback': 'ale#handlers#haskell#HandleGHCFormat', \}) diff --git a/ale_linters/html/htmlhint.vim b/ale_linters/html/htmlhint.vim index caa15bbb..234c1176 100644 --- a/ale_linters/html/htmlhint.vim +++ b/ale_linters/html/htmlhint.vim @@ -5,12 +5,6 @@ call ale#Set('html_htmlhint_options', '') call ale#Set('html_htmlhint_executable', 'htmlhint') call ale#Set('html_htmlhint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#html#htmlhint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'html_htmlhint', [ - \ 'node_modules/.bin/htmlhint', - \]) -endfunction - function! ale_linters#html#htmlhint#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'html_htmlhint_options') let l:config = l:options !~# '--config' @@ -25,14 +19,14 @@ function! ale_linters#html#htmlhint#GetCommand(buffer) abort let l:options = substitute(l:options, '--format=unix', '', '') endif - return ale#Escape(ale_linters#html#htmlhint#GetExecutable(a:buffer)) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --format=unix %t' + return '%e' . ale#Pad(l:options) . ' --format=unix %t' endfunction call ale#linter#Define('html', { \ 'name': 'htmlhint', -\ 'executable_callback': 'ale_linters#html#htmlhint#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('html_htmlhint', [ +\ 'node_modules/.bin/htmlhint', +\ ]), \ 'command_callback': 'ale_linters#html#htmlhint#GetCommand', \ 'callback': 'ale#handlers#unix#HandleAsError', \}) diff --git a/ale_linters/html/tidy.vim b/ale_linters/html/tidy.vim index 913cdade..cab8bc24 100644 --- a/ale_linters/html/tidy.vim +++ b/ale_linters/html/tidy.vim @@ -37,10 +37,6 @@ function! ale_linters#html#tidy#GetCommand(buffer) abort \) endfunction -function! ale_linters#html#tidy#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'html_tidy_executable') -endfunction - function! ale_linters#html#tidy#Handle(buffer, lines) abort " Matches patterns lines like the following: " line 7 column 5 - Warning: missing before @@ -67,7 +63,7 @@ endfunction call ale#linter#Define('html', { \ 'name': 'tidy', -\ 'executable_callback': 'ale_linters#html#tidy#GetExecutable', +\ 'executable_callback': ale#VarFunc('html_tidy_executable'), \ 'output_stream': 'stderr', \ 'command_callback': 'ale_linters#html#tidy#GetCommand', \ 'callback': 'ale_linters#html#tidy#Handle', diff --git a/ale_linters/idris/idris.vim b/ale_linters/idris/idris.vim index 115d04fc..b3275b40 100644 --- a/ale_linters/idris/idris.vim +++ b/ale_linters/idris/idris.vim @@ -4,16 +4,10 @@ call ale#Set('idris_idris_executable', 'idris') call ale#Set('idris_idris_options', '--total --warnpartial --warnreach --warnipkg') -function! ale_linters#idris#idris#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'idris_idris_executable') -endfunction - function! ale_linters#idris#idris#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'idris_idris_options') - return ale#Escape(ale_linters#idris#idris#GetExecutable(a:buffer)) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --check %s' + return '%e' . ale#Pad(l:options) . ' --check %s' endfunction function! ale_linters#idris#idris#Handle(buffer, lines) abort @@ -80,8 +74,7 @@ endfunction call ale#linter#Define('idris', { \ 'name': 'idris', -\ 'executable_callback': 'ale_linters#idris#idris#GetExecutable', +\ 'executable_callback': ale#VarFunc('idris_idris_executable'), \ 'command_callback': 'ale_linters#idris#idris#GetCommand', \ 'callback': 'ale_linters#idris#idris#Handle', \}) - diff --git a/ale_linters/java/javac.vim b/ale_linters/java/javac.vim index d7a39aa7..76445c18 100644 --- a/ale_linters/java/javac.vim +++ b/ale_linters/java/javac.vim @@ -36,10 +36,6 @@ function! s:BuildClassPathOption(buffer, import_paths) abort \ : '' endfunction -function! ale_linters#java#javac#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'java_javac_executable') -endfunction - function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort let l:cp_option = s:BuildClassPathOption(a:buffer, a:import_paths) let l:sp_option = '' @@ -77,13 +73,11 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort " Create .class files in a temporary directory, which we will delete later. let l:class_file_directory = ale#engine#CreateDirectory(a:buffer) - let l:executable = ale_linters#java#javac#GetExecutable(a:buffer) " Always run javac from the directory the file is in, so we can resolve " relative paths correctly. return ale#path#BufferCdString(a:buffer) - \ . ale#Escape(l:executable) - \ . ' -Xlint' + \ . '%e -Xlint' \ . ale#Pad(l:cp_option) \ . ale#Pad(l:sp_option) \ . ' -d ' . ale#Escape(l:class_file_directory) @@ -126,7 +120,7 @@ endfunction call ale#linter#Define('java', { \ 'name': 'javac', -\ 'executable_callback': 'ale_linters#java#javac#GetExecutable', +\ 'executable_callback': ale#VarFunc('java_javac_executable'), \ 'command_chain': [ \ {'callback': 'ale_linters#java#javac#GetImportPaths', 'output_stream': 'stdout'}, \ {'callback': 'ale_linters#java#javac#GetCommand', 'output_stream': 'stderr'}, diff --git a/ale_linters/javascript/flow_ls.vim b/ale_linters/javascript/flow_ls.vim index 20fc2217..75377183 100644 --- a/ale_linters/javascript/flow_ls.vim +++ b/ale_linters/javascript/flow_ls.vim @@ -6,18 +6,6 @@ call ale#Set('javascript_flow_ls_use_global', \ get(g:, 'ale_use_global_executables', 0) \) -function! ale_linters#javascript#flow_ls#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'javascript_flow_ls', [ - \ 'node_modules/.bin/flow', - \]) -endfunction - -function! ale_linters#javascript#flow_ls#GetCommand(buffer) abort - let l:executable = ale_linters#javascript#flow_ls#GetExecutable(a:buffer) - - return ale#Escape(l:executable) . ' lsp --from ale-lsp' -endfunction - function! ale_linters#javascript#flow_ls#FindProjectRoot(buffer) abort let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig') @@ -31,8 +19,10 @@ endfunction call ale#linter#Define('javascript', { \ 'name': 'flow-language-server', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#javascript#flow_ls#GetExecutable', -\ 'command_callback': 'ale_linters#javascript#flow_ls#GetCommand', +\ 'executable_callback': ale#node#FindExecutableFunc('javascript_flow_ls', [ +\ 'node_modules/.bin/flow', +\ ]), +\ 'command': '%e lsp --from ale-lsp', \ 'project_root_callback': 'ale_linters#javascript#flow_ls#FindProjectRoot', \ 'language': 'javascript', \}) diff --git a/ale_linters/javascript/jscs.vim b/ale_linters/javascript/jscs.vim index 60044037..a38766a6 100644 --- a/ale_linters/javascript/jscs.vim +++ b/ale_linters/javascript/jscs.vim @@ -4,12 +4,6 @@ call ale#Set('javascript_jscs_executable', 'jscs') call ale#Set('javascript_jscs_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#javascript#jscs#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'javascript_jscs', [ - \ 'node_modules/.bin/jscs', - \]) -endfunction - function! ale_linters#javascript#jscs#GetCommand(buffer) abort " Search for a local JShint config locaation, and default to a global one. let l:jscs_config = ale#path#ResolveLocalPath( @@ -18,8 +12,7 @@ function! ale_linters#javascript#jscs#GetCommand(buffer) abort \ get(g:, 'ale_jscs_config_loc', '') \) - let l:command = ale#Escape(ale_linters#javascript#jscs#GetExecutable(a:buffer)) - let l:command .= ' --reporter inline --no-colors' + let l:command = '%e --reporter inline --no-colors' if !empty(l:jscs_config) let l:command .= ' --config ' . ale#Escape(l:jscs_config) @@ -60,8 +53,9 @@ endfunction call ale#linter#Define('javascript', { \ 'name': 'jscs', -\ 'executable_callback': 'ale_linters#javascript#jscs#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('javascript_jscs', [ +\ 'node_modules/.bin/jscs', +\ ]), \ 'command_callback': 'ale_linters#javascript#jscs#GetCommand', \ 'callback': 'ale_linters#javascript#jscs#Handle', \}) - diff --git a/ale_linters/javascript/jshint.vim b/ale_linters/javascript/jshint.vim index 2e9bb9fd..83909fa4 100644 --- a/ale_linters/javascript/jshint.vim +++ b/ale_linters/javascript/jshint.vim @@ -4,12 +4,6 @@ call ale#Set('javascript_jshint_executable', 'jshint') call ale#Set('javascript_jshint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#javascript#jshint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'javascript_jshint', [ - \ 'node_modules/.bin/jshint', - \]) -endfunction - function! ale_linters#javascript#jshint#GetCommand(buffer) abort " Search for a local JShint config locaation, and default to a global one. let l:jshint_config = ale#path#ResolveLocalPath( @@ -18,8 +12,7 @@ function! ale_linters#javascript#jshint#GetCommand(buffer) abort \ get(g:, 'ale_jshint_config_loc', '') \) - let l:command = ale#Escape(ale_linters#javascript#jshint#GetExecutable(a:buffer)) - let l:command .= ' --reporter unix --extract auto' + let l:command = '%e --reporter unix --extract auto' if !empty(l:jshint_config) let l:command .= ' --config ' . ale#Escape(l:jshint_config) @@ -32,7 +25,9 @@ endfunction call ale#linter#Define('javascript', { \ 'name': 'jshint', -\ 'executable_callback': 'ale_linters#javascript#jshint#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('javascript_jshint', [ +\ 'node_modules/.bin/jshint', +\ ]), \ 'command_callback': 'ale_linters#javascript#jshint#GetCommand', \ 'callback': 'ale#handlers#unix#HandleAsError', \}) diff --git a/ale_linters/kotlin/languageserver.vim b/ale_linters/kotlin/languageserver.vim index 0ab673ec..08f1c055 100644 --- a/ale_linters/kotlin/languageserver.vim +++ b/ale_linters/kotlin/languageserver.vim @@ -3,15 +3,6 @@ call ale#Set('kotlin_languageserver_executable', 'kotlin-language-server') -function! ale_linters#kotlin#languageserver#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'kotlin_languageserver_executable') -endfunction - -function! ale_linters#kotlin#languageserver#GetCommand(buffer) abort - let l:executable = ale_linters#kotlin#languageserver#GetExecutable(a:buffer) - return ale#Escape(l:executable) -endfunction - function! ale_linters#kotlin#languageserver#GetProjectRoot(buffer) abort let l:gradle_root = ale#gradle#FindProjectRoot(a:buffer) @@ -31,8 +22,8 @@ endfunction call ale#linter#Define('kotlin', { \ 'name': 'languageserver', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#kotlin#languageserver#GetExecutable', -\ 'command_callback': 'ale_linters#kotlin#languageserver#GetCommand', +\ 'executable_callback': ale#VarFunc('kotlin_languageserver_executable'), +\ 'command_callback': '%e', \ 'language': 'kotlin', \ 'project_root_callback': 'ale_linters#kotlin#languageserver#GetProjectRoot', \}) diff --git a/ale_linters/less/lessc.vim b/ale_linters/less/lessc.vim index 5fd9a383..37600649 100755 --- a/ale_linters/less/lessc.vim +++ b/ale_linters/less/lessc.vim @@ -5,21 +5,10 @@ call ale#Set('less_lessc_executable', 'lessc') call ale#Set('less_lessc_options', '') call ale#Set('less_lessc_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#less#lessc#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'less_lessc', [ - \ 'node_modules/.bin/lessc', - \]) -endfunction - function! ale_linters#less#lessc#GetCommand(buffer) abort - let l:executable = ale_linters#less#lessc#GetExecutable(a:buffer) - let l:dir = expand('#' . a:buffer . ':p:h') - let l:options = ale#Var(a:buffer, 'less_lessc_options') - - return ale#Escape(l:executable) - \ . ' --no-color --lint' - \ . ' --include-path=' . ale#Escape(l:dir) - \ . (!empty(l:options) ? ' ' . l:options : '') + return '%e --no-color --lint' + \ . ' --include-path=' . ale#Escape(expand('#' . a:buffer . ':p:h')) + \ . ale#Pad(ale#Var(a:buffer, 'less_lessc_options')) \ . ' -' endfunction @@ -49,7 +38,9 @@ endfunction call ale#linter#Define('less', { \ 'name': 'lessc', -\ 'executable_callback': 'ale_linters#less#lessc#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('less_lessc', [ +\ 'node_modules/.bin/lessc', +\ ]), \ 'command_callback': 'ale_linters#less#lessc#GetCommand', \ 'callback': 'ale_linters#less#lessc#Handle', \ 'output_stream': 'stderr', diff --git a/ale_linters/less/stylelint.vim b/ale_linters/less/stylelint.vim index 8e16a098..479808c2 100644 --- a/ale_linters/less/stylelint.vim +++ b/ale_linters/less/stylelint.vim @@ -4,24 +4,17 @@ call ale#Set('less_stylelint_executable', 'stylelint') call ale#Set('less_stylelint_options', '') call ale#Set('less_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#less#stylelint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'less_stylelint', [ - \ 'node_modules/.bin/stylelint', - \]) -endfunction - function! ale_linters#less#stylelint#GetCommand(buffer) abort - let l:executable = ale_linters#less#stylelint#GetExecutable(a:buffer) let l:options = ale#Var(a:buffer, 'less_stylelint_options') - return ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --stdin-filename %s' + return '%e' . ale#Pad(l:options) . ' --stdin-filename %s' endfunction call ale#linter#Define('less', { \ 'name': 'stylelint', -\ 'executable_callback': 'ale_linters#less#stylelint#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('less_stylelint', [ +\ 'node_modules/.bin/stylelint', +\ ]), \ 'command_callback': 'ale_linters#less#stylelint#GetCommand', \ 'callback': 'ale#handlers#css#HandleStyleLintFormat', \}) diff --git a/ale_linters/llvm/llc.vim b/ale_linters/llvm/llc.vim index 15201cbe..044f8c44 100644 --- a/ale_linters/llvm/llc.vim +++ b/ale_linters/llvm/llc.vim @@ -3,21 +3,11 @@ call ale#Set('llvm_llc_executable', 'llc') -function! ale_linters#llvm#llc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'llvm_llc_executable') -endfunction - -function! ale_linters#llvm#llc#GetCommand(buffer) abort - return ale#Escape(ale_linters#llvm#llc#GetExecutable(a:buffer)) - \ . ' -filetype=null -o=' . g:ale#util#nul_file -endfunction - function! ale_linters#llvm#llc#HandleErrors(buffer, lines) abort " Handle '{path}: {file}:{line}:{col}: error: {message}' format let l:pattern = '\v^[a-zA-Z]?:?[^:]+: [^:]+:(\d+):(\d+): (.+)$' - let l:matches = ale#util#GetMatches(a:lines, l:pattern) - return map(l:matches, "{ + return map(ale#util#GetMatches(a:lines, l:pattern), "{ \ 'lnum': str2nr(v:val[1]), \ 'col': str2nr(v:val[2]), \ 'text': v:val[3], @@ -27,8 +17,8 @@ endfunction call ale#linter#Define('llvm', { \ 'name': 'llc', -\ 'executable_callback': 'ale_linters#llvm#llc#GetExecutable', +\ 'executable_callback': ale#VarFunc('llvm_llc_executable'), \ 'output_stream': 'stderr', -\ 'command_callback': 'ale_linters#llvm#llc#GetCommand', +\ 'command_callback': {-> '%e -filetype=null -o=' . g:ale#util#nul_file}, \ 'callback': 'ale_linters#llvm#llc#HandleErrors', \}) diff --git a/ale_linters/lua/luac.vim b/ale_linters/lua/luac.vim index 4a6bb403..bca2cd8d 100644 --- a/ale_linters/lua/luac.vim +++ b/ale_linters/lua/luac.vim @@ -3,15 +3,6 @@ call ale#Set('lua_luac_executable', 'luac') -function! ale_linters#lua#luac#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'lua_luac_executable') -endfunction - -function! ale_linters#lua#luac#GetCommand(buffer) abort - let l:executable = ale_linters#lua#luac#GetExecutable(a:buffer) - return ale#Escape(l:executable) . ' -p - ' -endfunction - function! ale_linters#lua#luac#Handle(buffer, lines) abort " Matches patterns line the following: " @@ -33,8 +24,8 @@ endfunction call ale#linter#Define('lua', { \ 'name': 'luac', -\ 'executable_callback': 'ale_linters#lua#luac#GetExecutable', -\ 'command_callback': 'ale_linters#lua#luac#GetCommand', +\ 'executable_callback': ale#VarFunc('lua_luac_executable'), +\ 'command': '%e -p -', \ 'output_stream': 'stderr', \ 'callback': 'ale_linters#lua#luac#Handle', \}) diff --git a/ale_linters/lua/luacheck.vim b/ale_linters/lua/luacheck.vim index 725153c6..669103b8 100644 --- a/ale_linters/lua/luacheck.vim +++ b/ale_linters/lua/luacheck.vim @@ -1,19 +1,11 @@ " Author: Sol Bekic https://github.com/s-ol " Description: luacheck linter for lua files -let g:ale_lua_luacheck_executable = -\ get(g:, 'ale_lua_luacheck_executable', 'luacheck') - -let g:ale_lua_luacheck_options = -\ get(g:, 'ale_lua_luacheck_options', '') - -function! ale_linters#lua#luacheck#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'lua_luacheck_executable') -endfunction +call ale#Set('lua_luacheck_executable', 'luacheck') +call ale#Set('lua_luacheck_options', '') function! ale_linters#lua#luacheck#GetCommand(buffer) abort - return ale#Escape(ale_linters#lua#luacheck#GetExecutable(a:buffer)) - \ . ' ' . ale#Var(a:buffer, 'lua_luacheck_options') + return '%e' . ale#Pad(ale#Var(a:buffer, 'lua_luacheck_options')) \ . ' --formatter plain --codes --filename %s -' endfunction @@ -46,7 +38,7 @@ endfunction call ale#linter#Define('lua', { \ 'name': 'luacheck', -\ 'executable_callback': 'ale_linters#lua#luacheck#GetExecutable', +\ 'executable_callback': ale#VarFunc('lua_luacheck_executable'), \ 'command_callback': 'ale_linters#lua#luacheck#GetCommand', \ 'callback': 'ale_linters#lua#luacheck#Handle', \}) diff --git a/ale_linters/markdown/remark_lint.vim b/ale_linters/markdown/remark_lint.vim index d9c2efb6..88dfb9dd 100644 --- a/ale_linters/markdown/remark_lint.vim +++ b/ale_linters/markdown/remark_lint.vim @@ -5,19 +5,10 @@ call ale#Set('markdown_remark_lint_executable', 'remark') call ale#Set('markdown_remark_lint_use_global', get(g:, 'ale_use_global_executables', 0)) call ale#Set('markdown_remark_lint_options', '') -function! ale_linters#markdown#remark_lint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'markdown_remark_lint', [ - \ 'node_modules/.bin/remark', - \]) -endfunction - function! ale_linters#markdown#remark_lint#GetCommand(buffer) abort - let l:executable = ale_linters#markdown#remark_lint#GetExecutable(a:buffer) let l:options = ale#Var(a:buffer, 'markdown_remark_lint_options') - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --no-stdout --no-color' + return '%e' . ale#Pad(l:options) . ' --no-stdout --no-color' endfunction function! ale_linters#markdown#remark_lint#Handle(buffer, lines) abort @@ -46,7 +37,9 @@ endfunction call ale#linter#Define('markdown', { \ 'name': 'remark_lint', \ 'aliases': ['remark-lint'], -\ 'executable_callback': 'ale_linters#markdown#remark_lint#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('markdown_remark_lint', [ +\ 'node_modules/.bin/remark', +\ ]), \ 'command_callback': 'ale_linters#markdown#remark_lint#GetCommand', \ 'callback': 'ale_linters#markdown#remark_lint#Handle', \ 'output_stream': 'stderr', diff --git a/ale_linters/matlab/mlint.vim b/ale_linters/matlab/mlint.vim index 32766334..3435045e 100644 --- a/ale_linters/matlab/mlint.vim +++ b/ale_linters/matlab/mlint.vim @@ -1,18 +1,7 @@ " Author: awlayton " Description: mlint for MATLAB files -let g:ale_matlab_mlint_executable = -\ get(g:, 'ale_matlab_mlint_executable', 'mlint') - -function! ale_linters#matlab#mlint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'matlab_mlint_executable') -endfunction - -function! ale_linters#matlab#mlint#GetCommand(buffer) abort - let l:executable = ale_linters#matlab#mlint#GetExecutable(a:buffer) - - return l:executable . ' -id %t' -endfunction +call ale#Set('matlab_mlint_executable', 'mlint') function! ale_linters#matlab#mlint#Handle(buffer, lines) abort " Matches patterns like the following: @@ -48,8 +37,8 @@ endfunction call ale#linter#Define('matlab', { \ 'name': 'mlint', -\ 'executable_callback': 'ale_linters#matlab#mlint#GetExecutable', -\ 'command_callback': 'ale_linters#matlab#mlint#GetCommand', +\ 'executable_callback': ale#VarFunc('matlab_mlint_executable'), +\ 'command': '%e -id %t', \ 'output_stream': 'stderr', \ 'callback': 'ale_linters#matlab#mlint#Handle', \}) diff --git a/ale_linters/mercury/mmc.vim b/ale_linters/mercury/mmc.vim index c7bfc59d..76d357f0 100644 --- a/ale_linters/mercury/mmc.vim +++ b/ale_linters/mercury/mmc.vim @@ -4,16 +4,11 @@ call ale#Set('mercury_mmc_executable', 'mmc') call ale#Set('mercury_mmc_options', '--make --output-compile-error-lines 100') -function! ale_linters#mercury#mmc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'mercury_mmc_executable') -endfunction - function! ale_linters#mercury#mmc#GetCommand(buffer) abort let l:module_name = expand('#' . a:buffer . ':t:r') return ale#path#BufferCdString(a:buffer) - \ . ale_linters#mercury#mmc#GetExecutable(a:buffer) - \ . ' --errorcheck-only ' + \ . '%e --errorcheck-only ' \ . ale#Var(a:buffer, 'mercury_mmc_options') \ . ' ' . l:module_name endfunction @@ -38,7 +33,7 @@ endfunction call ale#linter#Define('mercury', { \ 'name': 'mmc', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#mercury#mmc#GetExecutable', +\ 'executable_callback': ale#VarFunc('mercury_mmc_executable'), \ 'command_callback': 'ale_linters#mercury#mmc#GetCommand', \ 'callback': 'ale_linters#mercury#mmc#Handle', \ 'lint_file': 1, diff --git a/ale_linters/nasm/nasm.vim b/ale_linters/nasm/nasm.vim index 77d57e18..29d19e62 100644 --- a/ale_linters/nasm/nasm.vim +++ b/ale_linters/nasm/nasm.vim @@ -4,25 +4,13 @@ call ale#Set('nasm_nasm_executable', 'nasm') call ale#Set('nasm_nasm_options', '') -function! ale_linters#nasm#nasm#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'nasm_nasm_executable') -endfunction - -function! ale_linters#nasm#nasm#GetOptions(buffer) abort - return ale#Var(a:buffer, 'nasm_nasm_options') -endfunction - function! ale_linters#nasm#nasm#GetCommand(buffer) abort - " Note that NASM require a trailing slash to the -I option. - let l:executable = ale#Escape(ale_linters#nasm#nasm#GetExecutable(a:buffer)) + " Note that NASM requires a trailing slash for the -I option. let l:separator = has('win32') ? '\' : '/' - let l:path = ale#Escape(fnamemodify(bufname(a:buffer), ':p:h') . l:separator) - let l:options = ale_linters#nasm#nasm#GetOptions(a:buffer) + let l:path = fnamemodify(bufname(a:buffer), ':p:h') . l:separator - return l:executable - \ . ' -X gnu' - \ . ' -I ' . l:path - \ . ' ' . l:options + return '%e -X gnu -I ' . ale#Escape(l:path) + \ . ale#Pad(ale#Var(a:buffer, 'nasm_nasm_options')) \ . ' %s' endfunction @@ -30,6 +18,7 @@ function! ale_linters#nasm#nasm#Handle(buffer, lines) abort " Note that we treat 'fatal' as errors. let l:pattern = '^.\+:\(\d\+\): \([^:]\+\): \(.\+\)$' let l:output = [] + for l:match in ale#util#GetMatches(a:lines, l:pattern) call add(l:output, { \ 'lnum': l:match[1] + 0, @@ -37,6 +26,7 @@ function! ale_linters#nasm#nasm#Handle(buffer, lines) abort \ 'text': l:match[3], \}) endfor + return l:output endfunction @@ -44,7 +34,7 @@ call ale#linter#Define('nasm', { \ 'name': 'nasm', \ 'output_stream': 'stderr', \ 'lint_file': 1, -\ 'executable_callback': 'ale_linters#nasm#nasm#GetExecutable', +\ 'executable_callback': ale#VarFunc('nasm_nasm_executable'), \ 'command_callback': 'ale_linters#nasm#nasm#GetCommand', \ 'callback': 'ale_linters#nasm#nasm#Handle', \}) diff --git a/ale_linters/perl/perl.vim b/ale_linters/perl/perl.vim index 1b9aa95e..d1dcbc9c 100644 --- a/ale_linters/perl/perl.vim +++ b/ale_linters/perl/perl.vim @@ -1,20 +1,11 @@ " Author: Vincent Lequertier " Description: This file adds support for checking perl syntax -let g:ale_perl_perl_executable = -\ get(g:, 'ale_perl_perl_executable', 'perl') - -let g:ale_perl_perl_options = -\ get(g:, 'ale_perl_perl_options', '-c -Mwarnings -Ilib') - -function! ale_linters#perl#perl#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'perl_perl_executable') -endfunction +call ale#Set('perl_perl_executable', 'perl') +call ale#Set('perl_perl_options', '-c -Mwarnings -Ilib') function! ale_linters#perl#perl#GetCommand(buffer) abort - return ale#Escape(ale_linters#perl#perl#GetExecutable(a:buffer)) - \ . ' ' . ale#Var(a:buffer, 'perl_perl_options') - \ . ' %t' + return '%e' . ale#Pad(ale#Var(a:buffer, 'perl_perl_options')) . ' %t' endfunction let s:begin_failed_skip_pattern = '\v' . join([ @@ -61,7 +52,7 @@ endfunction call ale#linter#Define('perl', { \ 'name': 'perl', -\ 'executable_callback': 'ale_linters#perl#perl#GetExecutable', +\ 'executable_callback': ale#VarFunc('perl_perl_executable'), \ 'output_stream': 'both', \ 'command_callback': 'ale_linters#perl#perl#GetCommand', \ 'callback': 'ale_linters#perl#perl#Handle', diff --git a/ale_linters/perl/perlcritic.vim b/ale_linters/perl/perlcritic.vim index e91c8a03..8619a404 100644 --- a/ale_linters/perl/perlcritic.vim +++ b/ale_linters/perl/perlcritic.vim @@ -1,21 +1,10 @@ " Author: Vincent Lequertier , Chris Weyl " Description: This file adds support for checking perl with perl critic -let g:ale_perl_perlcritic_executable = -\ get(g:, 'ale_perl_perlcritic_executable', 'perlcritic') - -let g:ale_perl_perlcritic_profile = -\ get(g:, 'ale_perl_perlcritic_profile', '.perlcriticrc') - -let g:ale_perl_perlcritic_options = -\ get(g:, 'ale_perl_perlcritic_options', '') - -let g:ale_perl_perlcritic_showrules = -\ get(g:, 'ale_perl_perlcritic_showrules', 0) - -function! ale_linters#perl#perlcritic#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'perl_perlcritic_executable') -endfunction +call ale#Set('perl_perlcritic_executable', 'perlcritic') +call ale#Set('perl_perlcritic_profile', '.perlcriticrc') +call ale#Set('perl_perlcritic_options', '') +call ale#Set('perl_perlcritic_showrules', 0) function! ale_linters#perl#perlcritic#GetProfile(buffer) abort " first see if we've been overridden @@ -39,11 +28,11 @@ function! ale_linters#perl#perlcritic#GetCommand(buffer) abort let l:profile = ale_linters#perl#perlcritic#GetProfile(a:buffer) let l:options = ale#Var(a:buffer, 'perl_perlcritic_options') - return ale#Escape(ale_linters#perl#perlcritic#GetExecutable(a:buffer)) + return '%e' \ . ' --verbose ' . ale#Escape(l:critic_verbosity) \ . ' --nocolor' \ . (!empty(l:profile) ? ' --profile ' . ale#Escape(l:profile) : '') - \ . (!empty(l:options) ? ' ' . l:options : '') + \ . ale#Pad(l:options) endfunction @@ -66,7 +55,7 @@ endfunction call ale#linter#Define('perl', { \ 'name': 'perlcritic', \ 'output_stream': 'stdout', -\ 'executable_callback': 'ale_linters#perl#perlcritic#GetExecutable', +\ 'executable_callback': ale#VarFunc('perl_perlcritic_executable'), \ 'command_callback': 'ale_linters#perl#perlcritic#GetCommand', \ 'callback': 'ale_linters#perl#perlcritic#Handle', \}) diff --git a/ale_linters/php/langserver.vim b/ale_linters/php/langserver.vim index 38b42df9..ca91db4c 100644 --- a/ale_linters/php/langserver.vim +++ b/ale_linters/php/langserver.vim @@ -4,16 +4,6 @@ call ale#Set('php_langserver_executable', 'php-language-server.php') call ale#Set('php_langserver_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#php#langserver#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'php_langserver', [ - \ 'vendor/bin/php-language-server.php', - \]) -endfunction - -function! ale_linters#php#langserver#GetCommand(buffer) abort - return 'php ' . ale#Escape(ale_linters#php#langserver#GetExecutable(a:buffer)) -endfunction - function! ale_linters#php#langserver#GetProjectRoot(buffer) abort let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') @@ -23,7 +13,9 @@ endfunction call ale#linter#Define('php', { \ 'name': 'langserver', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#php#langserver#GetExecutable', -\ 'command_callback': 'ale_linters#php#langserver#GetCommand', +\ 'executable_callback': ale#node#FindExecutableFunc('php_langserver', [ +\ 'vendor/bin/php-language-server.php', +\ ]), +\ 'command': 'php %e', \ 'project_root_callback': 'ale_linters#php#langserver#GetProjectRoot', \}) diff --git a/ale_linters/php/phpcs.vim b/ale_linters/php/phpcs.vim index faf8ad55..25e53714 100644 --- a/ale_linters/php/phpcs.vim +++ b/ale_linters/php/phpcs.vim @@ -6,23 +6,13 @@ let g:ale_php_phpcs_standard = get(g:, 'ale_php_phpcs_standard', '') call ale#Set('php_phpcs_executable', 'phpcs') call ale#Set('php_phpcs_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#php#phpcs#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'php_phpcs', [ - \ 'vendor/bin/phpcs', - \ 'phpcs' - \]) -endfunction - function! ale_linters#php#phpcs#GetCommand(buffer) abort - let l:executable = ale_linters#php#phpcs#GetExecutable(a:buffer) - let l:standard = ale#Var(a:buffer, 'php_phpcs_standard') let l:standard_option = !empty(l:standard) \ ? '--standard=' . l:standard \ : '' - return ale#Escape(l:executable) - \ . ' -s --report=emacs --stdin-path=%s ' . l:standard_option + return '%e -s --report=emacs --stdin-path=%s' . ale#Pad(l:standard_option) endfunction function! ale_linters#php#phpcs#Handle(buffer, lines) abort @@ -50,7 +40,10 @@ endfunction call ale#linter#Define('php', { \ 'name': 'phpcs', -\ 'executable_callback': 'ale_linters#php#phpcs#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('php_phpcs', [ +\ 'vendor/bin/phpcs', +\ 'phpcs' +\ ]), \ 'command_callback': 'ale_linters#php#phpcs#GetCommand', \ 'callback': 'ale_linters#php#phpcs#Handle', \}) diff --git a/ale_linters/php/phpmd.vim b/ale_linters/php/phpmd.vim index e9450752..65f1cc3c 100644 --- a/ale_linters/php/phpmd.vim +++ b/ale_linters/php/phpmd.vim @@ -6,16 +6,9 @@ let g:ale_php_phpmd_executable = get(g:, 'ale_php_phpmd_executable', 'phpmd') " Set to change the ruleset let g:ale_php_phpmd_ruleset = get(g:, 'ale_php_phpmd_ruleset', 'cleancode,codesize,controversial,design,naming,unusedcode') -function! ale_linters#php#phpmd#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'php_phpmd_executable') -endfunction - function! ale_linters#php#phpmd#GetCommand(buffer) abort - let l:executable = ale_linters#php#phpmd#GetExecutable(a:buffer) - - return ale#Escape(l:executable) - \ . ' %s text ' - \ . ale#Var(a:buffer, 'php_phpmd_ruleset') + return '%e %s text' + \ . ale#Pad(ale#Var(a:buffer, 'php_phpmd_ruleset')) \ . ' --ignore-violations-on-exit %t' endfunction @@ -39,7 +32,7 @@ endfunction call ale#linter#Define('php', { \ 'name': 'phpmd', -\ 'executable_callback': 'ale_linters#php#phpmd#GetExecutable', +\ 'executable_callback': ale#VarFunc('php_phpmd_executable'), \ 'command_callback': 'ale_linters#php#phpmd#GetCommand', \ 'callback': 'ale_linters#php#phpmd#Handle', \}) diff --git a/ale_linters/php/phpstan.vim b/ale_linters/php/phpstan.vim index 24762086..b3875216 100644 --- a/ale_linters/php/phpstan.vim +++ b/ale_linters/php/phpstan.vim @@ -6,20 +6,13 @@ let g:ale_php_phpstan_executable = get(g:, 'ale_php_phpstan_executable', 'phpsta let g:ale_php_phpstan_level = get(g:, 'ale_php_phpstan_level', '4') let g:ale_php_phpstan_configuration = get(g:, 'ale_php_phpstan_configuration', '') -function! ale_linters#php#phpstan#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'php_phpstan_executable') -endfunction - function! ale_linters#php#phpstan#GetCommand(buffer) abort - let l:executable = ale_linters#php#phpstan#GetExecutable(a:buffer) - let l:configuration = ale#Var(a:buffer, 'php_phpstan_configuration') let l:configuration_option = !empty(l:configuration) \ ? ' -c ' . l:configuration \ : '' - return ale#Escape(l:executable) - \ . ' analyze -l' + return '%e analyze -l' \ . ale#Var(a:buffer, 'php_phpstan_level') \ . ' --errorFormat raw' \ . l:configuration_option @@ -47,7 +40,7 @@ endfunction call ale#linter#Define('php', { \ 'name': 'phpstan', -\ 'executable_callback': 'ale_linters#php#phpstan#GetExecutable', +\ 'executable_callback': ale#VarFunc('php_phpstan_executable'), \ 'command_callback': 'ale_linters#php#phpstan#GetCommand', \ 'callback': 'ale_linters#php#phpstan#Handle', \}) diff --git a/ale_linters/pony/ponyc.vim b/ale_linters/pony/ponyc.vim index b3329053..19e7e828 100644 --- a/ale_linters/pony/ponyc.vim +++ b/ale_linters/pony/ponyc.vim @@ -3,19 +3,14 @@ call ale#Set('pony_ponyc_executable', 'ponyc') call ale#Set('pony_ponyc_options', '--pass paint') -function! ale_linters#pony#ponyc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'pony_ponyc_executable') -endfunction - function! ale_linters#pony#ponyc#GetCommand(buffer) abort - return ale#Escape(ale_linters#pony#ponyc#GetExecutable(a:buffer)) - \ . ' ' . ale#Var(a:buffer, 'pony_ponyc_options') + return '%e' . ale#Pad(ale#Var(a:buffer, 'pony_ponyc_options')) endfunction call ale#linter#Define('pony', { \ 'name': 'ponyc', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#pony#ponyc#GetExecutable', +\ 'executable_callback': ale#VarFunc('pony_ponyc_executable'), \ 'command_callback': 'ale_linters#pony#ponyc#GetCommand', \ 'callback': 'ale#handlers#pony#HandlePonycFormat', \}) diff --git a/ale_linters/pug/puglint.vim b/ale_linters/pug/puglint.vim index 165e68b7..63208986 100644 --- a/ale_linters/pug/puglint.vim +++ b/ale_linters/pug/puglint.vim @@ -5,12 +5,6 @@ call ale#Set('pug_puglint_options', '') call ale#Set('pug_puglint_executable', 'pug-lint') call ale#Set('pug_puglint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#pug#puglint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'pug_puglint', [ - \ 'node_modules/.bin/pug-lint', - \]) -endfunction - function! s:FindConfig(buffer) abort for l:filename in [ \ '.pug-lintrc', @@ -29,19 +23,19 @@ function! s:FindConfig(buffer) abort endfunction function! ale_linters#pug#puglint#GetCommand(buffer) abort - let l:executable = ale_linters#pug#puglint#GetExecutable(a:buffer) let l:options = ale#Var(a:buffer, 'pug_puglint_options') let l:config = s:FindConfig(a:buffer) - return ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') + return '%e' . ale#Pad(l:options) \ . (!empty(l:config) ? ' -c ' . ale#Escape(l:config) : '') \ . ' -r inline %t' endfunction call ale#linter#Define('pug', { \ 'name': 'puglint', -\ 'executable_callback': 'ale_linters#pug#puglint#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('pug_puglint', [ +\ 'node_modules/.bin/pug-lint', +\ ]), \ 'output_stream': 'stderr', \ 'command_callback': 'ale_linters#pug#puglint#GetCommand', \ 'callback': 'ale#handlers#unix#HandleAsError', diff --git a/ale_linters/puppet/languageserver.vim b/ale_linters/puppet/languageserver.vim index 52880f32..a08b7653 100644 --- a/ale_linters/puppet/languageserver.vim +++ b/ale_linters/puppet/languageserver.vim @@ -3,16 +3,6 @@ call ale#Set('puppet_languageserver_executable', 'puppet-languageserver') -function! ale_linters#puppet#languageserver#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'puppet_languageserver_executable') -endfunction - -function! ale_linters#puppet#languageserver#GetCommand(buffer) abort - let l:exe = ale#Escape(ale_linters#puppet#languageserver#GetExecutable(a:buffer)) - - return l:exe . ' --stdio' -endfunction - function! ale_linters#puppet#languageserver#GetProjectRoot(buffer) abort " Note: The metadata.json file is recommended for Puppet 4+ modules, but " there's no requirement to have it, so fall back to the other possible @@ -38,8 +28,8 @@ endfunction call ale#linter#Define('puppet', { \ 'name': 'languageserver', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#puppet#languageserver#GetExecutable', -\ 'command_callback': 'ale_linters#puppet#languageserver#GetCommand', +\ 'executable_callback': ale#VarFunc('puppet_languageserver_executable'), +\ 'command': '%e --stdio', \ 'language': 'puppet', \ 'project_root_callback': 'ale_linters#puppet#languageserver#GetProjectRoot', \}) diff --git a/ale_linters/puppet/puppetlint.vim b/ale_linters/puppet/puppetlint.vim index 13da511b..c9c16f5e 100644 --- a/ale_linters/puppet/puppetlint.vim +++ b/ale_linters/puppet/puppetlint.vim @@ -1,26 +1,18 @@ " Author: Alexander Olofsson , Robert Flechtner " Description: puppet-lint for puppet files -let g:ale_puppet_puppetlint_executable = -\ get(g:, 'ale_puppet_puppetlint_executable', 'puppet-lint') - -let g:ale_puppet_puppetlint_options = -\ get(g:, 'ale_puppet_puppetlint_options', '--no-autoloader_layout-check') - -function! ale_linters#puppet#puppetlint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'puppet_puppetlint_executable') -endfunction +call ale#Set('puppet_puppetlint_executable', 'puppet-lint') +call ale#Set('puppet_puppetlint_options', '--no-autoloader_layout-check') function! ale_linters#puppet#puppetlint#GetCommand(buffer) abort - return ale_linters#puppet#puppetlint#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'puppet_puppetlint_options') + return '%e' . ale#Pad(ale#Var(a:buffer, 'puppet_puppetlint_options')) \ . ' --log-format "-:%{line}:%{column}: %{kind}: [%{check}] %{message}"' \ . ' %t' endfunction call ale#linter#Define('puppet', { \ 'name': 'puppetlint', -\ 'executable_callback': 'ale_linters#puppet#puppetlint#GetExecutable', +\ 'executable_callback': ale#VarFunc('puppet_puppetlint_executable'), \ 'command_callback': 'ale_linters#puppet#puppetlint#GetCommand', \ 'callback': 'ale#handlers#gcc#HandleGCCFormat', \}) diff --git a/ale_linters/pyrex/cython.vim b/ale_linters/pyrex/cython.vim index 9b6b39d7..d260698c 100644 --- a/ale_linters/pyrex/cython.vim +++ b/ale_linters/pyrex/cython.vim @@ -5,16 +5,11 @@ call ale#Set('pyrex_cython_executable', 'cython') call ale#Set('pyrex_cython_options', '--warning-extra') -function! ale_linters#pyrex#cython#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'pyrex_cython_executable') -endfunction - function! ale_linters#pyrex#cython#GetCommand(buffer) abort let l:local_dir = ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - return ale#Escape(ale_linters#pyrex#cython#GetExecutable(a:buffer)) - \ . ' --working ' . l:local_dir . ' --include-dir ' . l:local_dir - \ . ' ' . ale#Var(a:buffer, 'pyrex_cython_options') + return '%e --working ' . l:local_dir . ' --include-dir ' . l:local_dir + \ . ale#Pad(ale#Var(a:buffer, 'pyrex_cython_options')) \ . ' --output-file ' . g:ale#util#nul_file . ' %t' endfunction @@ -37,7 +32,7 @@ endfunction call ale#linter#Define('pyrex', { \ 'name': 'cython', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#pyrex#cython#GetExecutable', +\ 'executable_callback': ale#VarFunc('pyrex_cython_executable'), \ 'command_callback': 'ale_linters#pyrex#cython#GetCommand', \ 'callback': 'ale_linters#pyrex#cython#Handle', \}) diff --git a/ale_linters/qml/qmlfmt.vim b/ale_linters/qml/qmlfmt.vim index 85b131fd..12f3e97b 100644 --- a/ale_linters/qml/qmlfmt.vim +++ b/ale_linters/qml/qmlfmt.vim @@ -1,40 +1,25 @@ " Author: pylipp (www.github.com/pylipp) " Description: qmlfmt for QML files -let g:ale_qml_qmlfmt_executable = get(g:, 'ale_qml_qmlfmt_executable', 'qmlfmt') - -function! ale_linters#qml#qmlfmt#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'qml_qmlfmt_executable') -endfunction - -function! ale_linters#qml#qmlfmt#GetCommand(buffer) abort - return ale#Escape(ale_linters#qml#qmlfmt#GetExecutable(a:buffer)) - \ . ' -e' -endfunction +call ale#Set('qml_qmlfmt_executable', 'qmlfmt') " Find lines like " Error:11:1: Expected token `}' function! ale_linters#qml#qmlfmt#Handle(buffer, lines) abort let l:pattern = '\v^(Error|Warning):(\d+):(\d+): (.+)$' - let l:output = [] - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'type': l:match[1] is# 'Warning' ? 'W' : 'E', - \} - call add(l:output, l:item) - endfor - - return l:output + return map(ale#util#GetMatches(a:lines, l:pattern), "{ + \ 'lnum': v:val[2] + 0, + \ 'col': v:val[3] + 0, + \ 'text': v:val[4], + \ 'type': v:val[1] is# 'Warning' ? 'W' : 'E', + \}") endfunction call ale#linter#Define('qml', { \ 'name': 'qmlfmt', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#qml#qmlfmt#GetExecutable', -\ 'command_callback': 'ale_linters#qml#qmlfmt#GetCommand', +\ 'executable_callback': ale#VarFunc('qml_qmlfmt_executable'), +\ 'command': '%e -e', \ 'callback': 'ale_linters#qml#qmlfmt#Handle', \}) diff --git a/ale_linters/ruby/ruby.vim b/ale_linters/ruby/ruby.vim index 1aa88851..2bc4ec4b 100644 --- a/ale_linters/ruby/ruby.vim +++ b/ale_linters/ruby/ruby.vim @@ -3,20 +3,10 @@ call ale#Set('ruby_ruby_executable', 'ruby') -function! ale_linters#ruby#ruby#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'ruby_ruby_executable') -endfunction - -function! ale_linters#ruby#ruby#GetCommand(buffer) abort - let l:executable = ale_linters#ruby#ruby#GetExecutable(a:buffer) - - return ale#Escape(l:executable) . ' -w -c -T1 %t' -endfunction - call ale#linter#Define('ruby', { \ 'name': 'ruby', -\ 'executable_callback': 'ale_linters#ruby#ruby#GetExecutable', -\ 'command_callback': 'ale_linters#ruby#ruby#GetCommand', +\ 'executable_callback': ale#VarFunc('ruby_ruby_executable'), +\ 'command': '%e -w -c -T1 %t', \ 'output_stream': 'stderr', \ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors', \}) diff --git a/ale_linters/rust/rls.vim b/ale_linters/rust/rls.vim index cd13291d..60dd3667 100644 --- a/ale_linters/rust/rls.vim +++ b/ale_linters/rust/rls.vim @@ -4,19 +4,10 @@ call ale#Set('rust_rls_executable', 'rls') call ale#Set('rust_rls_toolchain', 'nightly') -function! ale_linters#rust#rls#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'rust_rls_executable') -endfunction - function! ale_linters#rust#rls#GetCommand(buffer) abort - let l:executable = ale_linters#rust#rls#GetExecutable(a:buffer) let l:toolchain = ale#Var(a:buffer, 'rust_rls_toolchain') - if empty(l:toolchain) - return ale#Escape(l:executable) - else - return ale#Escape(l:executable) . ' +' . ale#Escape(l:toolchain) - endif + return '%e' . (!empty(l:toolchain) ? ' +' . ale#Escape(l:toolchain) : '') endfunction function! ale_linters#rust#rls#GetProjectRoot(buffer) abort @@ -28,7 +19,7 @@ endfunction call ale#linter#Define('rust', { \ 'name': 'rls', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#rust#rls#GetExecutable', +\ 'executable_callback': ale#VarFunc('rust_rls_executable'), \ 'command_callback': 'ale_linters#rust#rls#GetCommand', \ 'project_root_callback': 'ale_linters#rust#rls#GetProjectRoot', \}) diff --git a/ale_linters/sass/stylelint.vim b/ale_linters/sass/stylelint.vim index fe941d6a..b6286f18 100644 --- a/ale_linters/sass/stylelint.vim +++ b/ale_linters/sass/stylelint.vim @@ -3,20 +3,11 @@ call ale#Set('sass_stylelint_executable', 'stylelint') call ale#Set('sass_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#sass#stylelint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'sass_stylelint', [ - \ 'node_modules/.bin/stylelint', - \]) -endfunction - -function! ale_linters#sass#stylelint#GetCommand(buffer) abort - return ale_linters#sass#stylelint#GetExecutable(a:buffer) - \ . ' --stdin-filename %s' -endfunction - call ale#linter#Define('sass', { \ 'name': 'stylelint', -\ 'executable_callback': 'ale_linters#sass#stylelint#GetExecutable', -\ 'command_callback': 'ale_linters#sass#stylelint#GetCommand', +\ 'executable_callback': ale#node#FindExecutableFunc('sass_stylelint', [ +\ 'node_modules/.bin/stylelint', +\ ]), +\ 'command': '%e --stdin-filename %s', \ 'callback': 'ale#handlers#css#HandleStyleLintFormat', \}) diff --git a/ale_linters/scala/fsc.vim b/ale_linters/scala/fsc.vim index 17b26f0b..fbdce20e 100644 --- a/ale_linters/scala/fsc.vim +++ b/ale_linters/scala/fsc.vim @@ -1,29 +1,14 @@ " Author: Nils Leuzinger - https://github.com/PawkyPenguin " Description: Basic scala support using fsc -" -function! ale_linters#scala#fsc#GetExecutable(buffer) abort - if index(split(getbufvar(a:buffer, '&filetype'), '\.'), 'sbt') >= 0 - " Don't check sbt files - return '' - endif - return 'fsc' -endfunction - -function! ale_linters#scala#fsc#GetCommand(buffer) abort - let l:executable = ale_linters#scala#fsc#GetExecutable(a:buffer) - - if empty(l:executable) - return '' - endif - - return ale#Escape(l:executable) . ' -Ystop-after:parser %t' +function! s:IsSbt(buffer) abort + return index(split(getbufvar(a:buffer, '&filetype'), '\.'), 'sbt') >= 0 endfunction call ale#linter#Define('scala', { \ 'name': 'fsc', -\ 'executable_callback': 'ale_linters#scala#fsc#GetExecutable', -\ 'command_callback': 'ale_linters#scala#fsc#GetCommand', +\ 'executable_callback': {buf -> s:IsSbt(buf) ? '' : 'fsc'}, +\ 'command': '%e -Ystop-after:parser %t', \ 'callback': 'ale#handlers#scala#HandleScalacLintFormat', \ 'output_stream': 'stderr', \}) diff --git a/ale_linters/scala/scalac.vim b/ale_linters/scala/scalac.vim index 551284af..3dbdd925 100644 --- a/ale_linters/scala/scalac.vim +++ b/ale_linters/scala/scalac.vim @@ -2,29 +2,14 @@ " w0rp " Description: Basic scala support using scalac -function! ale_linters#scala#scalac#GetExecutable(buffer) abort - if index(split(getbufvar(a:buffer, '&filetype'), '\.'), 'sbt') >= 0 - " Don't check sbt files - return '' - endif - - return 'scalac' -endfunction - -function! ale_linters#scala#scalac#GetCommand(buffer) abort - let l:executable = ale_linters#scala#scalac#GetExecutable(a:buffer) - - if empty(l:executable) - return '' - endif - - return ale#Escape(l:executable) . ' -Ystop-after:parser %t' +function! s:IsSbt(buffer) abort + return index(split(getbufvar(a:buffer, '&filetype'), '\.'), 'sbt') >= 0 endfunction call ale#linter#Define('scala', { \ 'name': 'scalac', -\ 'executable_callback': 'ale_linters#scala#scalac#GetExecutable', -\ 'command_callback': 'ale_linters#scala#scalac#GetCommand', +\ 'executable_callback': {buf -> s:IsSbt(buf) ? '' : 'scalac'}, +\ 'command': '%e -Ystop-after:parser %t', \ 'callback': 'ale#handlers#scala#HandleScalacLintFormat', \ 'output_stream': 'stderr', \}) diff --git a/ale_linters/scss/stylelint.vim b/ale_linters/scss/stylelint.vim index 6bfdd09a..6d183b4a 100644 --- a/ale_linters/scss/stylelint.vim +++ b/ale_linters/scss/stylelint.vim @@ -3,20 +3,11 @@ call ale#Set('scss_stylelint_executable', 'stylelint') call ale#Set('scss_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#scss#stylelint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'scss_stylelint', [ - \ 'node_modules/.bin/stylelint', - \]) -endfunction - -function! ale_linters#scss#stylelint#GetCommand(buffer) abort - return ale_linters#scss#stylelint#GetExecutable(a:buffer) - \ . ' --stdin-filename %s' -endfunction - call ale#linter#Define('scss', { \ 'name': 'stylelint', -\ 'executable_callback': 'ale_linters#scss#stylelint#GetExecutable', -\ 'command_callback': 'ale_linters#scss#stylelint#GetCommand', +\ 'executable_callback': ale#node#FindExecutableFunc('scss_stylelint', [ +\ 'node_modules/.bin/stylelint', +\ ]), +\ 'command': '%e --stdin-filename %s', \ 'callback': 'ale#handlers#css#HandleStyleLintFormat', \}) diff --git a/ale_linters/sh/shellcheck.vim b/ale_linters/sh/shellcheck.vim index 27c74531..0f68e62c 100644 --- a/ale_linters/sh/shellcheck.vim +++ b/ale_linters/sh/shellcheck.vim @@ -6,14 +6,9 @@ " codes to exclude from shellcheck. For example: " " let g:ale_sh_shellcheck_exclusions = 'SC2002,SC2004' -let g:ale_sh_shellcheck_exclusions = -\ get(g:, 'ale_sh_shellcheck_exclusions', get(g:, 'ale_linters_sh_shellcheck_exclusions', '')) - -let g:ale_sh_shellcheck_executable = -\ get(g:, 'ale_sh_shellcheck_executable', 'shellcheck') - -let g:ale_sh_shellcheck_options = -\ get(g:, 'ale_sh_shellcheck_options', '') +call ale#Set('sh_shellcheck_exclusions', get(g:, 'ale_linters_sh_shellcheck_exclusions', '')) +call ale#Set('sh_shellcheck_executable', 'shellcheck') +call ale#Set('sh_shellcheck_options', '') function! ale_linters#sh#shellcheck#GetExecutable(buffer) abort return ale#Var(a:buffer, 'sh_shellcheck_executable') diff --git a/ale_linters/spec/rpmlint.vim b/ale_linters/spec/rpmlint.vim index f5308af6..486bef1e 100644 --- a/ale_linters/spec/rpmlint.vim +++ b/ale_linters/spec/rpmlint.vim @@ -26,19 +26,12 @@ " And this is always output at the end and should just be ignored: " 0 packages and 1 specfiles checked; 4 errors, 0 warnings. -let g:ale_spec_rpmlint_executable = -\ get(g:, 'ale_spec_rpmlint_executable', 'rpmlint') - -let g:ale_spec_rpmlint_options = -\ get(g:, 'ale_spec_rpmlint_options', '') - -function! ale_linters#spec#rpmlint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'spec_rpmlint_executable') -endfunction +call ale#Set('spec_rpmlint_executable', 'rpmlint') +call ale#Set('spec_rpmlint_options', '') function! ale_linters#spec#rpmlint#GetCommand(buffer) abort - return ale_linters#spec#rpmlint#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'spec_rpmlint_options') + return '%e' + \ . ale#Pad(ale#Var(a:buffer, 'spec_rpmlint_options')) \ . ' -o "NetworkEnabled False"' \ . ' -v' \ . ' %t' @@ -79,7 +72,7 @@ endfunction call ale#linter#Define('spec', { \ 'name': 'rpmlint', -\ 'executable_callback': 'ale_linters#spec#rpmlint#GetExecutable', +\ 'executable_callback': ale#VarFunc('spec_rpmlint_executable'), \ 'command_callback': 'ale_linters#spec#rpmlint#GetCommand', \ 'callback': 'ale_linters#spec#rpmlint#Handle', \}) diff --git a/ale_linters/stylus/stylelint.vim b/ale_linters/stylus/stylelint.vim index 1562692a..2256f3c0 100644 --- a/ale_linters/stylus/stylelint.vim +++ b/ale_linters/stylus/stylelint.vim @@ -4,21 +4,17 @@ call ale#Set('stylus_stylelint_executable', 'stylelint') call ale#Set('stylus_stylelint_options', '') call ale#Set('stylus_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#stylus#stylelint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'stylus_stylelint', [ - \ 'node_modules/.bin/stylelint', - \]) -endfunction - function! ale_linters#stylus#stylelint#GetCommand(buffer) abort - return ale_linters#stylus#stylelint#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'stylus_stylelint_options') + return '%e' + \ . ale#Pad(ale#Var(a:buffer, 'stylus_stylelint_options')) \ . ' --stdin-filename %s' endfunction call ale#linter#Define('stylus', { \ 'name': 'stylelint', -\ 'executable_callback': 'ale_linters#stylus#stylelint#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('stylus_stylelint', [ +\ 'node_modules/.bin/stylelint', +\ ]), \ 'command_callback': 'ale_linters#stylus#stylelint#GetCommand', \ 'callback': 'ale#handlers#css#HandleStyleLintFormat', \}) diff --git a/ale_linters/tcl/nagelfar.vim b/ale_linters/tcl/nagelfar.vim index 13b7a549..183ea9e7 100644 --- a/ale_linters/tcl/nagelfar.vim +++ b/ale_linters/tcl/nagelfar.vim @@ -4,16 +4,10 @@ call ale#Set('tcl_nagelfar_executable', 'nagelfar.tcl') call ale#Set('tcl_nagelfar_options', '') -function! ale_linters#tcl#nagelfar#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'tcl_nagelfar_executable') -endfunction - function! ale_linters#tcl#nagelfar#GetCommand(buffer) abort let l:options = ale#Var(a:buffer, 'tcl_nagelfar_options') - return ale#Escape(ale_linters#tcl#nagelfar#GetExecutable(a:buffer)) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %s' + return '%e' . ale#Pad(l:options) . ' %s' endfunction function! ale_linters#tcl#nagelfar#Handle(buffer, lines) abort @@ -39,7 +33,7 @@ endfunction call ale#linter#Define('tcl', { \ 'name': 'nagelfar', \ 'output_stream': 'stdout', -\ 'executable_callback': 'ale_linters#tcl#nagelfar#GetExecutable', +\ 'executable_callback': ale#VarFunc('tcl_nagelfar_executable'), \ 'command_callback': 'ale_linters#tcl#nagelfar#GetCommand', \ 'callback': 'ale_linters#tcl#nagelfar#Handle', \ 'lint_file': 1, diff --git a/ale_linters/terraform/tflint.vim b/ale_linters/terraform/tflint.vim index 93966ff3..b8e9c96d 100644 --- a/ale_linters/terraform/tflint.vim +++ b/ale_linters/terraform/tflint.vim @@ -30,14 +30,11 @@ function! ale_linters#terraform#tflint#Handle(buffer, lines) abort return l:output endfunction -function! ale_linters#terraform#tflint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'terraform_tflint_executable') -endfunction - function! ale_linters#terraform#tflint#GetCommand(buffer) abort - let l:cmd = ale#Escape(ale#Var(a:buffer, 'terraform_tflint_executable')) + let l:cmd = '%e' let l:config_file = ale#path#FindNearestFile(a:buffer, '.tflint.hcl') + if !empty(l:config_file) let l:cmd .= ' --config ' . ale#Escape(l:config_file) endif @@ -54,9 +51,7 @@ endfunction call ale#linter#Define('terraform', { \ 'name': 'tflint', -\ 'executable_callback': 'ale_linters#terraform#tflint#GetExecutable', +\ 'executable_callback': ale#VarFunc('terraform_tflint_executable'), \ 'command_callback': 'ale_linters#terraform#tflint#GetCommand', \ 'callback': 'ale_linters#terraform#tflint#Handle', \}) - -" vim:sw=4 diff --git a/ale_linters/tex/lacheck.vim b/ale_linters/tex/lacheck.vim index e5a9632b..38135b85 100644 --- a/ale_linters/tex/lacheck.vim +++ b/ale_linters/tex/lacheck.vim @@ -1,16 +1,7 @@ " Author: Andrew Balmos - " Description: lacheck for LaTeX files -let g:ale_tex_lacheck_executable = -\ get(g:, 'ale_tex_lacheck_executable', 'lacheck') - -function! ale_linters#tex#lacheck#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'tex_lacheck_executable') -endfunction - -function! ale_linters#tex#lacheck#GetCommand(buffer) abort - return ale#Var(a:buffer, 'tex_lacheck_executable') . ' %t' -endfunction +call ale#Set('tex_lacheck_executable', 'lacheck') function! ale_linters#tex#lacheck#Handle(buffer, lines) abort " Mattes lines like: @@ -41,7 +32,7 @@ endfunction call ale#linter#Define('tex', { \ 'name': 'lacheck', -\ 'executable_callback': 'ale_linters#tex#lacheck#GetExecutable', -\ 'command_callback': 'ale_linters#tex#lacheck#GetCommand', +\ 'executable_callback': ale#VarFunc('tex_lacheck_executable'), +\ 'command': '%e %t', \ 'callback': 'ale_linters#tex#lacheck#Handle' \}) diff --git a/ale_linters/thrift/thrift.vim b/ale_linters/thrift/thrift.vim index a8fe10b6..ac1f69fc 100644 --- a/ale_linters/thrift/thrift.vim +++ b/ale_linters/thrift/thrift.vim @@ -5,10 +5,6 @@ call ale#Set('thrift_thrift_generators', ['cpp']) call ale#Set('thrift_thrift_includes', []) call ale#Set('thrift_thrift_options', '-strict') -function! ale_linters#thrift#thrift#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'thrift_thrift_executable') -endfunction - function! ale_linters#thrift#thrift#GetCommand(buffer) abort let l:generators = ale#Var(a:buffer, 'thrift_thrift_generators') let l:includes = ale#Var(a:buffer, 'thrift_thrift_includes') @@ -22,7 +18,7 @@ function! ale_linters#thrift#thrift#GetCommand(buffer) abort let l:output_dir = ale#engine#CreateDirectory(a:buffer) - return ale#Escape(ale_linters#thrift#thrift#GetExecutable(a:buffer)) + return '%e' \ . ale#Pad(join(map(copy(l:generators), "'--gen ' . v:val"))) \ . ale#Pad(join(map(copy(l:includes), "'-I ' . v:val"))) \ . ale#Pad(ale#Var(a:buffer, 'thrift_thrift_options')) @@ -83,7 +79,7 @@ call ale#linter#Define('thrift', { \ 'name': 'thrift', \ 'executable': 'thrift', \ 'output_stream': 'both', -\ 'executable_callback': 'ale_linters#thrift#thrift#GetExecutable', +\ 'executable_callback': ale#VarFunc('thrift_thrift_executable'), \ 'command_callback': 'ale_linters#thrift#thrift#GetCommand', \ 'callback': 'ale_linters#thrift#thrift#Handle', \}) diff --git a/ale_linters/typescript/tsserver.vim b/ale_linters/typescript/tsserver.vim index 08bd0f41..0ad35d37 100644 --- a/ale_linters/typescript/tsserver.vim +++ b/ale_linters/typescript/tsserver.vim @@ -5,22 +5,13 @@ call ale#Set('typescript_tsserver_executable', 'tsserver') call ale#Set('typescript_tsserver_config_path', '') call ale#Set('typescript_tsserver_use_global', get(g:, 'ale_use_global_executables', 0)) -" These functions need to be defined just to comply with the API for LSP. -function! ale_linters#typescript#tsserver#GetProjectRoot(buffer) abort - return '' -endfunction - -function! ale_linters#typescript#tsserver#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'typescript_tsserver', [ - \ 'node_modules/.bin/tsserver', - \]) -endfunction - call ale#linter#Define('typescript', { \ 'name': 'tsserver', \ 'lsp': 'tsserver', -\ 'executable_callback': 'ale_linters#typescript#tsserver#GetExecutable', +\ 'executable_callback': ale#node#FindExecutableFunc('typescript_tsserver', [ +\ 'node_modules/.bin/tsserver', +\ ]), \ 'command_callback': 'ale_linters#typescript#tsserver#GetExecutable', -\ 'project_root_callback': 'ale_linters#typescript#tsserver#GetProjectRoot', +\ 'project_root_callback': {-> ''}, \ 'language': '', \}) diff --git a/ale_linters/vue/vls.vim b/ale_linters/vue/vls.vim index 0d4bf9f6..7116128b 100644 --- a/ale_linters/vue/vls.vim +++ b/ale_linters/vue/vls.vim @@ -4,18 +4,6 @@ call ale#Set('vue_vls_executable', 'vls') call ale#Set('vue_vls_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#vue#vls#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'vue_vls', [ - \ 'node_modules/.bin/vls', - \]) -endfunction - -function! ale_linters#vue#vls#GetCommand(buffer) abort - let l:exe = ale#Escape(ale_linters#vue#vls#GetExecutable(a:buffer)) - - return l:exe . ' --stdio' -endfunction - function! ale_linters#vue#vls#GetProjectRoot(buffer) abort let l:package_path = ale#path#FindNearestFile(a:buffer, 'package.json') @@ -25,8 +13,10 @@ endfunction call ale#linter#Define('vue', { \ 'name': 'vls', \ 'lsp': 'stdio', -\ 'executable_callback': 'ale_linters#vue#vls#GetExecutable', -\ 'command_callback': 'ale_linters#vue#vls#GetCommand', +\ 'executable_callback': ale#node#FindExecutableFunc('vue_vls', [ +\ 'node_modules/.bin/vls', +\ ]), +\ 'command': '%e --stdio', \ 'language': 'vue', \ 'project_root_callback': 'ale_linters#vue#vls#GetProjectRoot', \}) diff --git a/ale_linters/xml/xmllint.vim b/ale_linters/xml/xmllint.vim index 9d79438e..a0f97c3a 100644 --- a/ale_linters/xml/xmllint.vim +++ b/ale_linters/xml/xmllint.vim @@ -5,12 +5,8 @@ let g:ale_xml_xmllint_executable = get(g:, 'ale_xml_xmllint_executable', 'xmllint') let g:ale_xml_xmllint_options = get(g:, 'ale_xml_xmllint_options', '') -function! ale_linters#xml#xmllint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'xml_xmllint_executable') -endfunction - function! ale_linters#xml#xmllint#GetCommand(buffer) abort - return ale#Escape(ale_linters#xml#xmllint#GetExecutable(a:buffer)) + return '%e' \ . ale#Pad(ale#Var(a:buffer, 'xml_xmllint_options')) \ . ' --noout -' endfunction @@ -63,7 +59,7 @@ endfunction call ale#linter#Define('xml', { \ 'name': 'xmllint', \ 'output_stream': 'stderr', -\ 'executable_callback': 'ale_linters#xml#xmllint#GetExecutable', +\ 'executable_callback': ale#VarFunc('xml_xmllint_executable'), \ 'command_callback': 'ale_linters#xml#xmllint#GetCommand', \ 'callback': 'ale_linters#xml#xmllint#Handle', \ }) diff --git a/ale_linters/yaml/swaglint.vim b/ale_linters/yaml/swaglint.vim index 4a22c70f..7362536e 100644 --- a/ale_linters/yaml/swaglint.vim +++ b/ale_linters/yaml/swaglint.vim @@ -4,17 +4,6 @@ call ale#Set('yaml_swaglint_executable', 'swaglint') call ale#Set('yaml_swaglint_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#yaml#swaglint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'yaml_swaglint', [ - \ 'node_modules/.bin/swaglint', - \]) -endfunction - -function! ale_linters#yaml#swaglint#GetCommand(buffer) abort - return ale_linters#yaml#swaglint#GetExecutable(a:buffer) - \ . ' -r compact --stdin' -endfunction - function! ale_linters#yaml#swaglint#Handle(buffer, lines) abort let l:pattern = ': \([^\s]\+\) @ \(\d\+\):\(\d\+\) - \(.\+\)$' let l:output = [] @@ -43,7 +32,9 @@ endfunction call ale#linter#Define('yaml', { \ 'name': 'swaglint', -\ 'executable_callback': 'ale_linters#yaml#swaglint#GetExecutable', -\ 'command_callback': 'ale_linters#yaml#swaglint#GetCommand', +\ 'executable_callback': ale#node#FindExecutableFunc('yaml_swaglint', [ +\ 'node_modules/.bin/swaglint', +\ ]), +\ 'command': '%e -r compact --stdin', \ 'callback': 'ale_linters#yaml#swaglint#Handle', \}) diff --git a/ale_linters/yaml/yamllint.vim b/ale_linters/yaml/yamllint.vim index f100667e..9d2cc7c2 100644 --- a/ale_linters/yaml/yamllint.vim +++ b/ale_linters/yaml/yamllint.vim @@ -1,18 +1,10 @@ " Author: KabbAmine -let g:ale_yaml_yamllint_executable = -\ get(g:, 'ale_yaml_yamllint_executable', 'yamllint') - -let g:ale_yaml_yamllint_options = -\ get(g:, 'ale_yaml_yamllint_options', '') - -function! ale_linters#yaml#yamllint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'yaml_yamllint_executable') -endfunction +call ale#Set('yaml_yamllint_executable', 'yamllint') +call ale#Set('yaml_yamllint_options', '') function! ale_linters#yaml#yamllint#GetCommand(buffer) abort - return ale_linters#yaml#yamllint#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'yaml_yamllint_options') + return '%e' . ale#Pad(ale#Var(a:buffer, 'yaml_yamllint_options')) \ . ' -f parsable %t' endfunction @@ -52,7 +44,7 @@ endfunction call ale#linter#Define('yaml', { \ 'name': 'yamllint', -\ 'executable_callback': 'ale_linters#yaml#yamllint#GetExecutable', +\ 'executable_callback': ale#VarFunc('yaml_yamllint_executable'), \ 'command_callback': 'ale_linters#yaml#yamllint#GetCommand', \ 'callback': 'ale_linters#yaml#yamllint#Handle', \}) diff --git a/autoload/ale.vim b/autoload/ale.vim index ee32a9a6..51c0ce83 100644 --- a/autoload/ale.vim +++ b/autoload/ale.vim @@ -197,6 +197,11 @@ function! ale#Var(buffer, variable_name) abort return get(l:vars, l:full_name, g:[l:full_name]) endfunction +" As above, but curry the arguments so only the buffer number is required. +function! ale#VarFunc(variable_name) abort + return {buf -> ale#Var(buf, a:variable_name)} +endfunction + " Initialize a variable with a default value, if it isn't already set. " " Every variable name will be prefixed with 'ale_'. diff --git a/autoload/ale/assert.vim b/autoload/ale/assert.vim index a6753a1a..87798520 100644 --- a/autoload/ale/assert.vim +++ b/autoload/ale/assert.vim @@ -54,9 +54,14 @@ function! ale#assert#Linter(expected_executable, expected_command) abort endif else let l:command = ale#linter#GetCommand(l:buffer, l:linter) + endif + + if type(l:command) is v:t_string " Replace %e with the escaped executable, so tests keep passing after " linters are changed to use %e. let l:command = substitute(l:command, '%e', '\=ale#Escape(l:executable)', 'g') + else + call map(l:command, 'substitute(v:val, ''%e'', ''\=ale#Escape(l:executable)'', ''g'')') endif AssertEqual @@ -126,7 +131,9 @@ function! ale#assert#SetUpLinterTest(filetype, name) abort execute 'runtime ale_linters/' . a:filetype . '/' . a:name . '.vim' - call ale#test#SetDirectory('/testplugin/test/command_callback') + if !exists('g:dir') + call ale#test#SetDirectory('/testplugin/test/command_callback') + endif command! -nargs=+ WithChainResults :call ale#assert#WithChainResults() command! -nargs=+ AssertLinter :call ale#assert#Linter() @@ -140,14 +147,33 @@ function! ale#assert#TearDownLinterTest() abort unlet! g:ale_create_dummy_temporary_file let s:chain_results = [] - delcommand WithChainResults - delcommand AssertLinter - delcommand AssertLinterNotExecuted - delcommand AssertLSPOptions - delcommand AssertLSPLanguage - delcommand AssertLSPProject + if exists(':WithChainResults') + delcommand WithChainResults + endif - call ale#test#RestoreDirectory() + if exists(':AssertLinter') + delcommand AssertLinter + endif + + if exists(':AssertLinterNotExecuted') + delcommand AssertLinterNotExecuted + endif + + if exists(':AssertLSPOptions') + delcommand AssertLSPOptions + endif + + if exists(':AssertLSPLanguage') + delcommand AssertLSPLanguage + endif + + if exists(':AssertLSPProject') + delcommand AssertLSPProject + endif + + if exists('g:dir') + call ale#test#RestoreDirectory() + endif Restore diff --git a/autoload/ale/c.vim b/autoload/ale/c.vim index d4207e76..ae428692 100644 --- a/autoload/ale/c.vim +++ b/autoload/ale/c.vim @@ -256,7 +256,7 @@ function! ale#c#IncludeOptions(include_paths) abort return '' endif - return ' ' . join(l:option_list) . ' ' + return join(l:option_list) endfunction let g:ale_c_build_dir_names = get(g:, 'ale_c_build_dir_names', [ diff --git a/autoload/ale/node.vim b/autoload/ale/node.vim index f75280b7..5c579c75 100644 --- a/autoload/ale/node.vim +++ b/autoload/ale/node.vim @@ -23,6 +23,11 @@ function! ale#node#FindExecutable(buffer, base_var_name, path_list) abort return ale#Var(a:buffer, a:base_var_name . '_executable') endfunction +" As above, but curry the arguments so only the buffer number is required. +function! ale#node#FindExecutableFunc(base_var_name, path_list) abort + return {buf -> ale#node#FindExecutable(buf, a:base_var_name, a:path_list)} +endfunction + " Create a executable string which executes a Node.js script command with a " Node.js executable if needed. " diff --git a/test/command_callback/test_c_flawfinder_command_callbacks.vader b/test/command_callback/test_c_flawfinder_command_callbacks.vader index 44573ff5..38385e2b 100644 --- a/test/command_callback/test_c_flawfinder_command_callbacks.vader +++ b/test/command_callback/test_c_flawfinder_command_callbacks.vader @@ -13,7 +13,7 @@ Execute(The minlevel of flawfinder should be configurable): AssertLinter 'flawfinder', ale#Escape('flawfinder') . ' -CDQS --minlevel=8 %t' Execute(Additional flawfinder options should be configurable): - let b:ale_c_flawfinder_options = ' --foobar' + let b:ale_c_flawfinder_options = '--foobar' AssertLinter 'flawfinder', \ ale#Escape('flawfinder') . ' -CDQS --foobar --minlevel=1 %t' diff --git a/test/command_callback/test_c_import_paths.vader b/test/command_callback/test_c_import_paths.vader new file mode 100644 index 00000000..80fff57b --- /dev/null +++ b/test/command_callback/test_c_import_paths.vader @@ -0,0 +1,223 @@ +Before: + " Make sure the c.vim file is loaded first. + call ale#c#FindProjectRoot(bufnr('')) + + Save g:ale_c_parse_makefile + Save g:__ale_c_project_filenames + + let g:original_project_filenames = g:__ale_c_project_filenames + + " Remove the .git/HEAD dir for C import paths for these tests. + " The tests run inside of a git repo. + let g:__ale_c_project_filenames = filter( + \ copy(g:__ale_c_project_filenames), + \ 'v:val isnot# ''.git/HEAD''' + \) + + let g:ale_c_parse_makefile = 0 + +After: + unlet! g:original_project_filenames + + call ale#assert#TearDownLinterTest() + +Execute(The C GCC handler should include 'include' directories for projects with a Makefile): + call ale#assert#SetUpLinterTest('c', 'gcc') + call ale#test#SetFilename('../test_c_projects/makefile_project/subdir/file.c') + let g:ale_c_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c -fsyntax-only' + \ . ' -iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/include')) + \ . ' -' + +Execute(The C GCC handler should include 'include' directories for projects with a configure file): + call ale#assert#SetUpLinterTest('c', 'gcc') + call ale#test#SetFilename('../test_c_projects/configure_project/subdir/file.c') + let g:ale_c_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/configure_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/configure_project/include')) + \ . ' -' + +Execute(The C GCC handler should include root directories for projects with .h files in them): + call ale#assert#SetUpLinterTest('c', 'gcc') + call ale#test#SetFilename('../test_c_projects/h_file_project/subdir/file.c') + let g:ale_c_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project')) + \ . ' -' + +Execute(The C GCC handler should include root directories for projects with .hpp files in them): + call ale#assert#SetUpLinterTest('c', 'gcc') + call ale#test#SetFilename('../test_c_projects/hpp_file_project/subdir/file.c') + let g:ale_c_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project')) + \ . ' -' + +Execute(The C Clang handler should include 'include' directories for projects with a Makefile): + call ale#assert#SetUpLinterTest('c', 'clang') + call ale#test#SetFilename('../test_c_projects/makefile_project/subdir/file.c') + let g:ale_c_clang_options = '' + + AssertLinter 'clang', + \ ale#Escape('clang') + \ . ' -S -x c -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/include')) + \ . ' -' + +Execute(The C Clang handler should include 'include' directories for projects with a configure file): + call ale#assert#SetUpLinterTest('c', 'clang') + call ale#test#SetFilename('../test_c_projects/h_file_project/subdir/file.c') + let g:ale_c_clang_options = '' + + AssertLinter 'clang', + \ ale#Escape('clang') + \ . ' -S -x c -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project')) + \ . ' -' + +Execute(The C Clang handler should include root directories for projects with .h files in them): + call ale#assert#SetUpLinterTest('c', 'clang') + call ale#test#SetFilename('../test_c_projects/h_file_project/subdir/file.c') + let g:ale_c_clang_options = '' + + AssertLinter 'clang', + \ ale#Escape('clang') + \ . ' -S -x c -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project')) + \ . ' -' + +Execute(The C Clang handler should include root directories for projects with .hpp files in them): + call ale#assert#SetUpLinterTest('c', 'clang') + call ale#test#SetFilename('../test_c_projects/hpp_file_project/subdir/file.c') + let g:ale_c_clang_options = '' + + AssertLinter 'clang', + \ ale#Escape('clang') + \ . ' -S -x c -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project')) + \ . ' -' + +Execute(The C++ GCC handler should include 'include' directories for projects with a Makefile): + call ale#assert#SetUpLinterTest('cpp', 'gcc') + call ale#test#SetFilename('../test_c_projects/makefile_project/subdir/file.cpp') + let g:ale_cpp_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/include')) + \ . ' -' + +Execute(The C++ GCC handler should include 'include' directories for projects with a configure file): + call ale#assert#SetUpLinterTest('cpp', 'gcc') + call ale#test#SetFilename('../test_c_projects/configure_project/subdir/file.cpp') + let g:ale_cpp_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/configure_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/configure_project/include')) + \ . ' -' + +Execute(The C++ GCC handler should include root directories for projects with .h files in them): + call ale#assert#SetUpLinterTest('cpp', 'gcc') + call ale#test#SetFilename('../test_c_projects/h_file_project/subdir/file.cpp') + let g:ale_cpp_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project')) + \ . ' -' + +Execute(The C++ GCC handler should include root directories for projects with .hpp files in them): + call ale#assert#SetUpLinterTest('cpp', 'gcc') + call ale#test#SetFilename('../test_c_projects/hpp_file_project/subdir/file.cpp') + let g:ale_cpp_gcc_options = '' + + AssertLinter 'gcc', + \ ale#Escape('gcc') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project')) + \ . ' -' + +Execute(The C++ Clang handler should include 'include' directories for projects with a Makefile): + call ale#assert#SetUpLinterTest('cpp', 'clang') + call ale#test#SetFilename('../test_c_projects/makefile_project/subdir/file.cpp') + let g:ale_cpp_clang_options = '' + + AssertLinter 'clang++', + \ ale#Escape('clang++') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/makefile_project/include')) + \ . ' -' + +Execute(The C++ Clang handler should include 'include' directories for projects with a configure file): + call ale#assert#SetUpLinterTest('cpp', 'clang') + call ale#test#SetFilename('../test_c_projects/configure_project/subdir/file.cpp') + let g:ale_cpp_clang_options = '' + + AssertLinter 'clang++', + \ ale#Escape('clang++') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/configure_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/configure_project/include')) + \ . ' -' + +Execute(The C++ Clang handler should include root directories for projects with .h files in them): + call ale#assert#SetUpLinterTest('cpp', 'clang') + call ale#test#SetFilename('../test_c_projects/h_file_project/subdir/file.cpp') + let g:ale_cpp_clang_options = '' + + AssertLinter 'clang++', + \ ale#Escape('clang++') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/h_file_project')) + \ . ' -' + +Execute(The C++ Clang handler should include root directories for projects with .hpp files in them): + call ale#assert#SetUpLinterTest('cpp', 'clang') + call ale#test#SetFilename('../test_c_projects/hpp_file_project/subdir/file.cpp') + let g:ale_cpp_clang_options = '' + + AssertLinter 'clang++', + \ ale#Escape('clang++') + \ . ' -S -x c++ -fsyntax-only ' + \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project/subdir')) + \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/hpp_file_project')) + \ . ' -' + +Execute(The C++ ClangTidy handler should include json folders for projects with suitable build directory in them): + call ale#assert#SetUpLinterTest('cpp', 'clangtidy') + call ale#test#SetFilename('../test_c_projects/json_project/subdir/file.cpp') + + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') + \ . ' -checks=' . ale#Escape('*') . ' %s ' + \ . '-p ' . ale#Escape(ale#path#Simplify(g:dir . '/../test_c_projects/json_project/build')) diff --git a/test/command_callback/test_cuda_nvcc_command_callbacks.vader b/test/command_callback/test_cuda_nvcc_command_callbacks.vader index 9e2b5ac6..4578d052 100644 --- a/test/command_callback/test_cuda_nvcc_command_callbacks.vader +++ b/test/command_callback/test_cuda_nvcc_command_callbacks.vader @@ -12,3 +12,9 @@ Execute(The executable should be configurable): AssertLinter 'foobar', \ ale#Escape('foobar') . ' -cuda -std=c++11 %s -o ' . g:ale#util#nul_file + +Execute(The options should be configurable): + let g:ale_cuda_nvcc_options = '--foobar' + + AssertLinter 'nvcc', + \ ale#Escape('nvcc') . ' -cuda --foobar %s -o ' . g:ale#util#nul_file diff --git a/test/command_callback/test_elm_make_command_callback.vader b/test/command_callback/test_elm_make_command_callback.vader new file mode 100644 index 00000000..6d95676f --- /dev/null +++ b/test/command_callback/test_elm_make_command_callback.vader @@ -0,0 +1,32 @@ +Before: + call ale#assert#SetUpLinterTest('elm', 'make') + +After: + unlet! g:executable + + call ale#assert#TearDownLinterTest() + +Execute(should get valid executable with default params): + call ale#test#SetFilename('../elm-test-files/app/testfile.elm') + + let g:executable = ale#path#Simplify(g:dir . '/../elm-test-files/app/node_modules/.bin/elm') + + AssertLinter g:executable, + \ ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' + +Execute(should get valid executable with 'use_global' params): + let g:ale_elm_make_use_global = 1 + + call ale#test#SetFilename('../elm-test-files/app/testfile.elm') + + AssertLinter 'elm', + \ ale#Escape('elm') . ' make --report=json --output=/dev/null %t' + +Execute(should get valid executable with 'use_global' and 'executable' params): + let g:ale_elm_make_executable = 'other-elm' + let g:ale_elm_make_use_global = 1 + + call ale#test#SetFilename('../elm-test-files/app/testfile.elm') + + AssertLinter 'other-elm', + \ ale#Escape('other-elm') . ' make --report=json --output=/dev/null %t' diff --git a/test/command_callback/test_fsc_command_callback.vader b/test/command_callback/test_fsc_command_callback.vader index 5fb5e7fa..278e7c16 100644 --- a/test/command_callback/test_fsc_command_callback.vader +++ b/test/command_callback/test_fsc_command_callback.vader @@ -10,4 +10,4 @@ Execute(The default executable and command should be correct): Given scala.sbt(An empty SBT file): Execute(fsc should not be run for sbt files): - AssertLinter '', '' + AssertLinterNotExecuted diff --git a/test/command_callback/test_gfortran_command_callback.vader b/test/command_callback/test_gfortran_command_callback.vader index a6ab50cd..3e6ef951 100644 --- a/test/command_callback/test_gfortran_command_callback.vader +++ b/test/command_callback/test_gfortran_command_callback.vader @@ -5,20 +5,20 @@ After: call ale#assert#TearDownLinterTest() Execute(The fortran gcc command callback should return the correct default string): - AssertLinter 'gcc', 'gcc -S -x f95 -fsyntax-only -ffree-form -Wall -' + AssertLinter 'gcc', ale#Escape('gcc') . ' -S -x f95 -fsyntax-only -ffree-form -Wall -' Execute(The fortran gcc command callback should let you set options): let g:ale_fortran_gcc_options = '-Wotherthings' - AssertLinter 'gcc', 'gcc -S -x f95 -fsyntax-only -ffree-form -Wotherthings -' + AssertLinter 'gcc', ale#Escape('gcc') . ' -S -x f95 -fsyntax-only -ffree-form -Wotherthings -' Execute(The fortran gcc command callback should let you use -ffixed-form): let g:ale_fortran_gcc_use_free_form = 0 - AssertLinter 'gcc', 'gcc -S -x f95 -fsyntax-only -ffixed-form -Wall -' + AssertLinter 'gcc', ale#Escape('gcc') . ' -S -x f95 -fsyntax-only -ffixed-form -Wall -' Execute(The fortran executable should be configurable): let g:ale_fortran_gcc_executable = 'gfortran' AssertLinter 'gfortran', - \ 'gfortran -S -x f95 -fsyntax-only -ffree-form -Wall -' + \ ale#Escape('gfortran') . ' -S -x f95 -fsyntax-only -ffree-form -Wall -' diff --git a/test/command_callback/test_luac_command_callback.vader b/test/command_callback/test_luac_command_callback.vader index 8a2345ec..55f39cba 100644 --- a/test/command_callback/test_luac_command_callback.vader +++ b/test/command_callback/test_luac_command_callback.vader @@ -5,9 +5,9 @@ After: call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertLinter 'luac', ale#Escape('luac') . ' -p - ' + AssertLinter 'luac', ale#Escape('luac') . ' -p -' Execute(The luac executable should be configurable): let g:ale_lua_luac_executable = 'luac.sh' - AssertLinter 'luac.sh', ale#Escape('luac.sh') . ' -p - ' + AssertLinter 'luac.sh', ale#Escape('luac.sh') . ' -p -' diff --git a/test/command_callback/test_luacheck_command_callback.vader b/test/command_callback/test_luacheck_command_callback.vader index 58d0cdc0..f0ef221c 100644 --- a/test/command_callback/test_luacheck_command_callback.vader +++ b/test/command_callback/test_luacheck_command_callback.vader @@ -6,7 +6,7 @@ After: Execute(The lua luacheck command callback should return the correct default string): AssertLinter 'luacheck', - \ ale#Escape('luacheck') . ' --formatter plain --codes --filename %s -' + \ ale#Escape('luacheck') . ' --formatter plain --codes --filename %s -' Execute(The lua luacheck command callback should let you set options): let g:ale_lua_luacheck_options = '--config filename' @@ -20,4 +20,4 @@ Execute(The luacheck executable should be configurable): let g:ale_lua_luacheck_executable = 'luacheck.sh' AssertLinter 'luacheck.sh', - \ ale#Escape('luacheck.sh') . ' --formatter plain --codes --filename %s -' + \ ale#Escape('luacheck.sh') . ' --formatter plain --codes --filename %s -' diff --git a/test/command_callback/test_mercury_mmc_command_callback.vader b/test/command_callback/test_mercury_mmc_command_callback.vader index 2948e799..ab61fddf 100644 --- a/test/command_callback/test_mercury_mmc_command_callback.vader +++ b/test/command_callback/test_mercury_mmc_command_callback.vader @@ -8,18 +8,18 @@ After: Execute(The default command should be correct): AssertLinter 'mmc', \ ale#path#BufferCdString(bufnr('')) - \ . 'mmc --errorcheck-only --make --output-compile-error-lines 100 dummy' + \ . ale#Escape('mmc') . ' --errorcheck-only --make --output-compile-error-lines 100 dummy' Execute(The executable should be configurable): let b:ale_mercury_mmc_executable = 'foo' AssertLinter 'foo', \ ale#path#BufferCdString(bufnr('')) - \ . 'foo --errorcheck-only --make --output-compile-error-lines 100 dummy' + \ . ale#Escape('foo') . ' --errorcheck-only --make --output-compile-error-lines 100 dummy' Execute(The options should be configurable): let b:ale_mercury_mmc_options = '--bar' AssertLinter 'mmc', \ ale#path#BufferCdString(bufnr('')) - \ . 'mmc --errorcheck-only --bar dummy' + \ . ale#Escape('mmc') . ' --errorcheck-only --bar dummy' diff --git a/test/command_callback/test_nasm_nasm_command_callbacks.vader b/test/command_callback/test_nasm_nasm_command_callbacks.vader index 4e0cf608..0d3e572a 100644 --- a/test/command_callback/test_nasm_nasm_command_callbacks.vader +++ b/test/command_callback/test_nasm_nasm_command_callbacks.vader @@ -2,7 +2,7 @@ Before: call ale#assert#SetUpLinterTest('nasm', 'nasm') let b:command_tail = - \ ' -X gnu -I ' . ale#Escape(getcwd() . (has('win32') ? '\' : '/')) . ' %s' + \ ' -X gnu -I ' . ale#Escape(getcwd() . (has('win32') ? '\' : '/')) . ' %s' let b:command_tail_opt = \ ' -X gnu -I ' . ale#Escape(getcwd() . (has('win32') ? '\' : '/')) . ' -w+orphan-labels %s' diff --git a/test/command_callback/test_phpcs_command_callback.vader b/test/command_callback/test_phpcs_command_callback.vader new file mode 100644 index 00000000..941a92d6 --- /dev/null +++ b/test/command_callback/test_phpcs_command_callback.vader @@ -0,0 +1,29 @@ +Before: + call ale#assert#SetUpLinterTest('php', 'phpcs') + +After: + unlet! g:executable + + call ale#assert#TearDownLinterTest() + +Execute(The local phpcs executable should be used): + call ale#test#SetFilename('../phpcs-test-files/project-with-phpcs/foo/test.php') + + let g:executable = ale#path#Simplify(g:dir . '/../phpcs-test-files/project-with-phpcs/vendor/bin/phpcs') + + AssertLinter g:executable, + \ ale#Escape(g:executable) . ' -s --report=emacs --stdin-path=%s' + +Execute(use_global should override local executable detection): + let g:ale_php_phpcs_use_global = 1 + + call ale#test#SetFilename('../phpcs-test-files/project-with-phpcs/foo/test.php') + + AssertLinter 'phpcs', + \ ale#Escape('phpcs') . ' -s --report=emacs --stdin-path=%s' + +Execute(Projects without local executables should use the global one): + call ale#test#SetFilename('../phpcs-test-files/project-without-phpcs/foo/test.php') + + AssertLinter 'phpcs', + \ ale#Escape('phpcs') . ' -s --report=emacs --stdin-path=%s' diff --git a/test/command_callback/test_scalac_command_callback.vader b/test/command_callback/test_scalac_command_callback.vader index 115731b3..ea5ae109 100644 --- a/test/command_callback/test_scalac_command_callback.vader +++ b/test/command_callback/test_scalac_command_callback.vader @@ -10,4 +10,4 @@ Execute(The default executable and command should be correct): Given scala.sbt(An empty SBT file): Execute(scalac should not be run for sbt files): - AssertLinter '', '' + AssertLinterNotExecuted diff --git a/test/command_callback/test_swaglint_command_callback.vader b/test/command_callback/test_swaglint_command_callback.vader index fe8fb722..68fb1406 100644 --- a/test/command_callback/test_swaglint_command_callback.vader +++ b/test/command_callback/test_swaglint_command_callback.vader @@ -5,25 +5,25 @@ After: call ale#assert#TearDownLinterTest() Execute(The yaml swaglint command callback should return the correct default string): - AssertLinter 'swaglint', 'swaglint -r compact --stdin' + AssertLinter 'swaglint', ale#Escape('swaglint') . ' -r compact --stdin' Execute(The yaml swaglint command callback should be configurable): let g:ale_yaml_swaglint_executable = '~/.local/bin/swaglint' AssertLinter '~/.local/bin/swaglint', - \ '~/.local/bin/swaglint -r compact --stdin' + \ ale#Escape('~/.local/bin/swaglint') . ' -r compact --stdin' Execute(The yaml swaglint command callback should allow a global installation to be used): let g:ale_yaml_swaglint_executable = '/usr/local/bin/swaglint' let g:ale_yaml_swaglint_use_global = 1 AssertLinter '/usr/local/bin/swaglint', - \ '/usr/local/bin/swaglint -r compact --stdin' + \ ale#Escape('/usr/local/bin/swaglint') . ' -r compact --stdin' Execute(The yaml swaglint command callback should allow a local installation to be used): call ale#test#SetFilename('swaglint_paths/docs/swagger.yaml') AssertLinter \ ale#path#Simplify(g:dir . '/swaglint_paths/node_modules/.bin/swaglint'), - \ ale#path#Simplify(g:dir . '/swaglint_paths/node_modules/.bin/swaglint') + \ ale#Escape(ale#path#Simplify(g:dir . '/swaglint_paths/node_modules/.bin/swaglint')) \ . ' -r compact --stdin' diff --git a/test/command_callback/test_terraform_tflint_command_callback.vader b/test/command_callback/test_terraform_tflint_command_callback.vader index c32d9bcf..0cef0176 100644 --- a/test/command_callback/test_terraform_tflint_command_callback.vader +++ b/test/command_callback/test_terraform_tflint_command_callback.vader @@ -17,3 +17,12 @@ Execute(Overriding options should work): let g:ale_terraform_tflint_options = '--whatever' AssertLinter 'fnord', ale#Escape('fnord') . ' --whatever -f json %t' + +Execute(Configuration files should be found): + call ale#test#SetFilename('../tflint-test-files/foo/bar.tf') + + AssertLinter 'tflint', + \ ale#Escape('tflint') + \ . ' --config ' + \ . ale#Escape(ale#path#Simplify(g:dir . '/../tflint-test-files/foo/.tflint.hcl')) + \ . ' -f json %t' diff --git a/test/test_c_import_paths.vader b/test/test_c_import_paths.vader deleted file mode 100644 index 70b25070..00000000 --- a/test/test_c_import_paths.vader +++ /dev/null @@ -1,254 +0,0 @@ -Before: - " Make sure the c.vim file is loaded first. - call ale#c#FindProjectRoot(bufnr('')) - - Save g:ale_c_parse_makefile - Save g:ale_c_gcc_options - Save g:ale_c_clang_options - Save g:ale_cpp_gcc_options - Save g:ale_cpp_clang_options - Save g:__ale_c_project_filenames - - let g:original_project_filenames = g:__ale_c_project_filenames - - " Remove the .git/HEAD dir for C import paths for these tests. - " The tests run inside of a git repo. - let g:__ale_c_project_filenames = filter( - \ copy(g:__ale_c_project_filenames), - \ 'v:val isnot# ''.git/HEAD''' - \) - - call ale#test#SetDirectory('/testplugin/test') - - let g:ale_c_parse_makefile = 0 - let g:ale_c_gcc_options = '' - let g:ale_c_clang_options = '' - let g:ale_cpp_gcc_options = '' - let g:ale_cpp_clang_options = '' - -After: - Restore - - unlet! g:original_project_filenames - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The C GCC handler should include 'include' directories for projects with a Makefile): - runtime! ale_linters/c/gcc.vim - - call ale#test#SetFilename('test_c_projects/makefile_project/subdir/file.c') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' ' - \ . ' -' - \ , ale_linters#c#gcc#GetCommand(bufnr(''), []) - -Execute(The C GCC handler should include 'include' directories for projects with a configure file): - runtime! ale_linters/c/gcc.vim - - call ale#test#SetFilename('test_c_projects/configure_project/subdir/file.c') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/include')) . ' ' - \ . ' -' - \ , ale_linters#c#gcc#GetCommand(bufnr(''), []) - -Execute(The C GCC handler should include root directories for projects with .h files in them): - runtime! ale_linters/c/gcc.vim - - call ale#test#SetFilename('test_c_projects/h_file_project/subdir/file.c') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' ' - \ . ' -' - \ , ale_linters#c#gcc#GetCommand(bufnr(''), []) - -Execute(The C GCC handler should include root directories for projects with .hpp files in them): - runtime! ale_linters/c/gcc.vim - - call ale#test#SetFilename('test_c_projects/hpp_file_project/subdir/file.c') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' ' - \ . ' -' - \ , ale_linters#c#gcc#GetCommand(bufnr(''), []) - -Execute(The C Clang handler should include 'include' directories for projects with a Makefile): - runtime! ale_linters/c/clang.vim - - call ale#test#SetFilename('test_c_projects/makefile_project/subdir/file.c') - - AssertEqual - \ ale#Escape('clang') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' ' - \ . ' -' - \ , ale_linters#c#clang#GetCommand(bufnr(''), []) - -Execute(The C Clang handler should include 'include' directories for projects with a configure file): - runtime! ale_linters/c/clang.vim - - call ale#test#SetFilename('test_c_projects/h_file_project/subdir/file.c') - - AssertEqual - \ ale#Escape('clang') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' ' - \ . ' -' - \ , ale_linters#c#clang#GetCommand(bufnr(''), []) - -Execute(The C Clang handler should include root directories for projects with .h files in them): - runtime! ale_linters/c/clang.vim - - call ale#test#SetFilename('test_c_projects/h_file_project/subdir/file.c') - - AssertEqual - \ ale#Escape('clang') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' ' - \ . ' -' - \ , ale_linters#c#clang#GetCommand(bufnr(''), []) - -Execute(The C Clang handler should include root directories for projects with .hpp files in them): - runtime! ale_linters/c/clang.vim - - call ale#test#SetFilename('test_c_projects/hpp_file_project/subdir/file.c') - - AssertEqual - \ ale#Escape('clang') - \ . ' -S -x c -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' ' - \ . ' -' - \ , ale_linters#c#clang#GetCommand(bufnr(''), []) - -Execute(The C++ GCC handler should include 'include' directories for projects with a Makefile): - runtime! ale_linters/cpp/gcc.vim - - call ale#test#SetFilename('test_c_projects/makefile_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' ' - \ . ' -' - \ , ale_linters#cpp#gcc#GetCommand(bufnr(''), []) - -Execute(The C++ GCC handler should include 'include' directories for projects with a configure file): - runtime! ale_linters/cpp/gcc.vim - - call ale#test#SetFilename('test_c_projects/configure_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/include')) . ' ' - \ . ' -' - \ , ale_linters#cpp#gcc#GetCommand(bufnr(''), []) - -Execute(The C++ GCC handler should include root directories for projects with .h files in them): - runtime! ale_linters/cpp/gcc.vim - - call ale#test#SetFilename('test_c_projects/h_file_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' ' - \ . ' -' - \ , ale_linters#cpp#gcc#GetCommand(bufnr(''), []) - -Execute(The C++ GCC handler should include root directories for projects with .hpp files in them): - runtime! ale_linters/cpp/gcc.vim - - call ale#test#SetFilename('test_c_projects/hpp_file_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('gcc') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' ' - \ . ' -' - \ , ale_linters#cpp#gcc#GetCommand(bufnr(''), []) - -Execute(The C++ Clang handler should include 'include' directories for projects with a Makefile): - runtime! ale_linters/cpp/clang.vim - - call ale#test#SetFilename('test_c_projects/makefile_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('clang++') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' ' - \ . ' -' - \ , ale_linters#cpp#clang#GetCommand(bufnr(''), []) - -Execute(The C++ Clang handler should include 'include' directories for projects with a configure file): - runtime! ale_linters/cpp/clang.vim - - call ale#test#SetFilename('test_c_projects/configure_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('clang++') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/include')) . ' ' - \ . ' -' - \ , ale_linters#cpp#clang#GetCommand(bufnr(''), []) - -Execute(The C++ Clang handler should include root directories for projects with .h files in them): - runtime! ale_linters/cpp/clang.vim - - call ale#test#SetFilename('test_c_projects/h_file_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('clang++') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' ' - \ . ' -' - \ , ale_linters#cpp#clang#GetCommand(bufnr(''), []) - -Execute(The C++ Clang handler should include root directories for projects with .hpp files in them): - runtime! ale_linters/cpp/clang.vim - - call ale#test#SetFilename('test_c_projects/hpp_file_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('clang++') - \ . ' -S -x c++ -fsyntax-only ' - \ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' ' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' ' - \ . ' -' - \ , ale_linters#cpp#clang#GetCommand(bufnr(''), []) - -Execute(The C++ ClangTidy handler should include json folders for projects with suitable build directory in them): - runtime! ale_linters/cpp/clangtidy.vim - - call ale#test#SetFilename('test_c_projects/json_project/subdir/file.cpp') - - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s ' - \ . '-p ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/json_project/build')) - \ , ale_linters#cpp#clangtidy#GetCommand(bufnr('')) diff --git a/test/test_elm_executable_detection.vader b/test/test_elm_executable_detection.vader deleted file mode 100644 index 9146eea6..00000000 --- a/test/test_elm_executable_detection.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/elm/make.vim - -After: - unlet! g:ale_elm_make_use_global - unlet! g:ale_elm_make_executable - - call ale#test#RestoreDirectory() - -Execute(should get valid executable with default params): - call ale#test#SetFilename('elm-test-files/app/testfile.elm') - - AssertEqual - \ ale#path#Simplify(g:dir . '/elm-test-files/app/node_modules/.bin/elm'), - \ ale_linters#elm#make#GetExecutable(bufnr('')) - -Execute(should get valid executable with 'use_global' params): - let g:ale_elm_make_use_global = 1 - - call ale#test#SetFilename('elm-test-files/app/testfile.elm') - - AssertEqual - \ 'elm', - \ ale_linters#elm#make#GetExecutable(bufnr('')) - -Execute(should get valid executable with 'use_global' and 'executable' params): - let g:ale_elm_make_executable = 'other-elm' - let g:ale_elm_make_use_global = 1 - - call ale#test#SetFilename('elm-test-files/app/testfile.elm') - - AssertEqual - \ 'other-elm', - \ ale_linters#elm#make#GetExecutable(bufnr('')) - diff --git a/test/test_phpcs_executable_detection.vader b/test/test_phpcs_executable_detection.vader deleted file mode 100644 index 020bfac3..00000000 --- a/test/test_phpcs_executable_detection.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - Save g:ale_php_phpcs_executable - Save g:ale_php_phpcs_use_global - - let g:ale_php_phpcs_executable = 'phpcs_test' - let g:ale_php_phpcs_use_global = 0 - - call ale#test#SetDirectory('/testplugin/test') - - runtime ale_linters/php/phpcs.vim - -After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(project with phpcs should use local by default): - call ale#test#SetFilename('phpcs-test-files/project-with-phpcs/foo/test.php') - - AssertEqual - \ ale#path#Simplify(g:dir . '/phpcs-test-files/project-with-phpcs/vendor/bin/phpcs'), - \ ale_linters#php#phpcs#GetExecutable(bufnr('')) - -Execute(use-global should override local detection): - let g:ale_php_phpcs_use_global = 1 - - call ale#test#SetFilename('phpcs-test-files/project-with-phpcs/foo/test.php') - - AssertEqual - \ 'phpcs_test', - \ ale_linters#php#phpcs#GetExecutable(bufnr('')) - -Execute(project without phpcs should use global): - call ale#test#SetFilename('phpcs-test-files/project-without-phpcs/foo/test.php') - - AssertEqual - \ 'phpcs_test', - \ ale_linters#php#phpcs#GetExecutable(bufnr('')) diff --git a/test/test_tflint_config_detection.vader b/test/test_tflint_config_detection.vader deleted file mode 100644 index 3500869b..00000000 --- a/test/test_tflint_config_detection.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/terraform/tflint.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(adjacent config file should be found): - call ale#test#SetFilename('tflint-test-files/foo/bar.tf') - AssertEqual - \ ( - \ ale#Escape('tflint') - \ . ' --config ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/tflint-test-files/foo/.tflint.hcl')) - \ . ' -f json %t' - \ ), - \ ale_linters#terraform#tflint#GetCommand(bufnr(''))