diff --git a/my_configs.vim b/my_configs.vim index da482ebc..aa165879 100644 --- a/my_configs.vim +++ b/my_configs.vim @@ -1,5 +1,13 @@ " Python +" + +" For pylint (make sure to pip3 install pylint) +" au BufRead *.py set makeprg=pylint\ --reports=n\ --output-format=parseable\ %:p +" au BufRead *.py set errorformat=%f:%l:\ %m + +autocmd FileType python set makeprg=pylint\ --reports=n\ --msg-template=\"{path}:{line}:\ {msg_id}\ {symbol},\ {obj}\ {msg}\"\ %:p +autocmd FileType python set errorformat=%f:%l:\ %m highlight BadWhitespace ctermbg=red guibg=red diff --git a/sources_non_forked/ale/ale_linters/asm/gcc.vim b/sources_non_forked/ale/ale_linters/asm/gcc.vim index 4ac876f8..fdd0ee83 100644 --- a/sources_non_forked/ale/ale_linters/asm/gcc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/awk/gawk.vim b/sources_non_forked/ale/ale_linters/awk/gawk.vim index 8b60815f..eb92e45e 100644 --- a/sources_non_forked/ale/ale_linters/awk/gawk.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/c/clang.vim b/sources_non_forked/ale/ale_linters/c/clang.vim index 9d49fabb..f1bd675b 100644 --- a/sources_non_forked/ale/ale_linters/c/clang.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/c/clangd.vim b/sources_non_forked/ale/ale_linters/c/clangd.vim index 5aa2e221..2c7c5c13 100644 --- a/sources_non_forked/ale/ale_linters/c/clangd.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/c/clangtidy.vim b/sources_non_forked/ale/ale_linters/c/clangtidy.vim index d456a5a2..84c103e6 100644 --- a/sources_non_forked/ale/ale_linters/c/clangtidy.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/c/cppcheck.vim b/sources_non_forked/ale/ale_linters/c/cppcheck.vim index 4db93f74..5e8c7936 100644 --- a/sources_non_forked/ale/ale_linters/c/cppcheck.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/c/cquery.vim b/sources_non_forked/ale/ale_linters/c/cquery.vim index 208c226f..7daf9f76 100644 --- a/sources_non_forked/ale/ale_linters/c/cquery.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/c/flawfinder.vim b/sources_non_forked/ale/ale_linters/c/flawfinder.vim index df6fbebe..7e1f6769 100644 --- a/sources_non_forked/ale/ale_linters/c/flawfinder.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/c/gcc.vim b/sources_non_forked/ale/ale_linters/c/gcc.vim index e2dff65d..60ecb712 100644 --- a/sources_non_forked/ale/ale_linters/c/gcc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/chef/foodcritic.vim b/sources_non_forked/ale/ale_linters/chef/foodcritic.vim index 2c28246c..c86336d6 100644 --- a/sources_non_forked/ale/ale_linters/chef/foodcritic.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/clang.vim b/sources_non_forked/ale/ale_linters/cpp/clang.vim index 72793a71..649c5993 100644 --- a/sources_non_forked/ale/ale_linters/cpp/clang.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/clangcheck.vim b/sources_non_forked/ale/ale_linters/cpp/clangcheck.vim index 687991bd..c66d6702 100644 --- a/sources_non_forked/ale/ale_linters/cpp/clangcheck.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/clangtidy.vim b/sources_non_forked/ale/ale_linters/cpp/clangtidy.vim index d683327f..930087a8 100644 --- a/sources_non_forked/ale/ale_linters/cpp/clangtidy.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/cppcheck.vim b/sources_non_forked/ale/ale_linters/cpp/cppcheck.vim index 8b2aa802..229d6133 100644 --- a/sources_non_forked/ale/ale_linters/cpp/cppcheck.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/cpplint.vim b/sources_non_forked/ale/ale_linters/cpp/cpplint.vim index 346ac815..d135fa79 100644 --- a/sources_non_forked/ale/ale_linters/cpp/cpplint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/cquery.vim b/sources_non_forked/ale/ale_linters/cpp/cquery.vim index 7997c843..39eebce3 100644 --- a/sources_non_forked/ale/ale_linters/cpp/cquery.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/flawfinder.vim b/sources_non_forked/ale/ale_linters/cpp/flawfinder.vim index 5a7092cf..4f669bff 100644 --- a/sources_non_forked/ale/ale_linters/cpp/flawfinder.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cpp/gcc.vim b/sources_non_forked/ale/ale_linters/cpp/gcc.vim index 17f5acf5..9935b0bb 100644 --- a/sources_non_forked/ale/ale_linters/cpp/gcc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/css/stylelint.vim b/sources_non_forked/ale/ale_linters/css/stylelint.vim index a16dfde2..6f8bef68 100644 --- a/sources_non_forked/ale/ale_linters/css/stylelint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/cuda/nvcc.vim b/sources_non_forked/ale/ale_linters/cuda/nvcc.vim index 3764fe9d..a3678910 100644 --- a/sources_non_forked/ale/ale_linters/cuda/nvcc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/dart/dartanalyzer.vim b/sources_non_forked/ale/ale_linters/dart/dartanalyzer.vim index ef33c9d4..26817df5 100644 --- a/sources_non_forked/ale/ale_linters/dart/dartanalyzer.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/dart/language_server.vim b/sources_non_forked/ale/ale_linters/dart/language_server.vim index 2265e37a..14b6ab93 100644 --- a/sources_non_forked/ale/ale_linters/dart/language_server.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/elm/make.vim b/sources_non_forked/ale/ale_linters/elm/make.vim index 8231ad47..ddea983f 100644 --- a/sources_non_forked/ale/ale_linters/elm/make.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/erlang/syntaxerl.vim b/sources_non_forked/ale/ale_linters/erlang/syntaxerl.vim index 46ecdcb7..5b679743 100644 --- a/sources_non_forked/ale/ale_linters/erlang/syntaxerl.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/fortran/gcc.vim b/sources_non_forked/ale/ale_linters/fortran/gcc.vim index 5f2ac018..f1595789 100644 --- a/sources_non_forked/ale/ale_linters/fortran/gcc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/fortran/language_server.vim b/sources_non_forked/ale/ale_linters/fortran/language_server.vim index fd763fcf..4e5f5dc4 100644 --- a/sources_non_forked/ale/ale_linters/fortran/language_server.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/fuse/fusionlint.vim b/sources_non_forked/ale/ale_linters/fuse/fusionlint.vim index cf20e1b4..ab8f143b 100644 --- a/sources_non_forked/ale/ale_linters/fuse/fusionlint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/gitcommit/gitlint.vim b/sources_non_forked/ale/ale_linters/gitcommit/gitlint.vim index 64731055..ec3bfb0b 100644 --- a/sources_non_forked/ale/ale_linters/gitcommit/gitlint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/glsl/glslang.vim b/sources_non_forked/ale/ale_linters/glsl/glslang.vim index d494df0e..d55a5e7c 100644 --- a/sources_non_forked/ale/ale_linters/glsl/glslang.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/glsl/glslls.vim b/sources_non_forked/ale/ale_linters/glsl/glslls.vim index 77e30f9c..8c6d9bd9 100644 --- a/sources_non_forked/ale/ale_linters/glsl/glslls.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/go/gometalinter.vim b/sources_non_forked/ale/ale_linters/go/gometalinter.vim index 375a8b0f..d005e1d2 100644 --- a/sources_non_forked/ale/ale_linters/go/gometalinter.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/hack/hack.vim b/sources_non_forked/ale/ale_linters/hack/hack.vim new file mode 100644 index 00000000..aea428cc --- /dev/null +++ b/sources_non_forked/ale/ale_linters/hack/hack.vim @@ -0,0 +1,22 @@ +" Author: Fred Emmott +" Description: Hack support via `hack lsp` + +call ale#Set('hack_hack_executable', 'hh_client') + +function! ale_linters#hack#hack#GetProjectRoot(buffer) abort + let l:hhconfig = ale#path#FindNearestFile(a:buffer, '.hhconfig') + + return !empty(l:hhconfig) ? fnamemodify(l:hhconfig, ':h') : '' +endfunction + +function! ale_linters#hack#hack#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'hack_hack_executable') +endfunction + +call ale#linter#Define('hack', { +\ 'name': 'hack', +\ 'lsp': 'stdio', +\ 'executable_callback': 'ale_linters#hack#hack#GetExecutable', +\ 'command': '%e lsp --from vim-ale', +\ 'project_root_callback': 'ale_linters#hack#hack#GetProjectRoot', +\}) diff --git a/sources_non_forked/ale/ale_linters/hack/hhast.vim b/sources_non_forked/ale/ale_linters/hack/hhast.vim new file mode 100644 index 00000000..710b7b25 --- /dev/null +++ b/sources_non_forked/ale/ale_linters/hack/hhast.vim @@ -0,0 +1,40 @@ +" Author: Fred Emmott +" Description: Hack support via `hhast lsp` + +call ale#Set('hack_hhast_executable', 'vendor/bin/hhast-lint') + +function! ale_linters#hack#hhast#GetProjectRoot(buffer) abort + " Find the hack root, then figure out if it's also an HHAST root. + " Don't try to use lint configurations from vendor/foo/bar/hhast-lint.json + let l:hhconfig = ale#path#FindNearestFile(a:buffer, '.hhconfig') + + if empty(l:hhconfig) + return '' + endif + + let l:root = fnamemodify(l:hhconfig, ':h') + let l:hhast_config = findfile('hhast-lint.json', l:root) + + return !empty(l:hhast_config) ? l:root : '' +endfunction + +function! ale_linters#hack#hhast#GetExecutable(buffer) abort + let l:root = ale_linters#hack#hhast#GetProjectRoot(a:buffer) + let l:relative = ale#Var(a:buffer, 'hack_hhast_executable') + let l:absolute = findfile(l:relative, l:root) + + return !empty(l:absolute) ? l:absolute : '' +endfunction + +function! ale_linters#hack#hhast#GetInitializationOptions(buffer) abort + return {'lintMode': 'open-files'} +endfunction + +call ale#linter#Define('hack', { +\ 'name': 'hhast', +\ 'lsp': 'stdio', +\ 'executable_callback': 'ale_linters#hack#hhast#GetExecutable', +\ 'command': '%e --mode lsp --from vim-ale', +\ 'project_root_callback': 'ale_linters#hack#hhast#GetProjectRoot', +\ 'initialization_options_callback': 'ale_linters#hack#hhast#GetInitializationOptions', +\}) diff --git a/sources_non_forked/ale/ale_linters/handlebars/embertemplatelint.vim b/sources_non_forked/ale/ale_linters/handlebars/embertemplatelint.vim index 162a033c..4fc0f20d 100644 --- a/sources_non_forked/ale/ale_linters/handlebars/embertemplatelint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/haskell/hdevtools.vim b/sources_non_forked/ale/ale_linters/haskell/hdevtools.vim index dc902152..fbd5278e 100644 --- a/sources_non_forked/ale/ale_linters/haskell/hdevtools.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/haskell/hie.vim b/sources_non_forked/ale/ale_linters/haskell/hie.vim new file mode 100644 index 00000000..558d36a3 --- /dev/null +++ b/sources_non_forked/ale/ale_linters/haskell/hie.vim @@ -0,0 +1,44 @@ +" Author: Luxed +" Description: A language server for Haskell + +call ale#Set('haskell_hie_executable', 'hie') + +function! ale_linters#haskell#hie#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'haskell_hie_executable') +endfunction + +function! ale_linters#haskell#hie#GetProjectRoot(buffer) abort + " Search for the stack file first + let l:project_file = ale#path#FindNearestFile(a:buffer, 'stack.yaml') + + " If it's empty, search for the cabal file + if empty(l:project_file) + let l:cabal_file = fnamemodify(bufname(a:buffer), ':p:h') + let l:paths = '' + + while empty(matchstr(l:cabal_file, '^\(\/\|\(\w:\\\)\)$')) + let l:cabal_file = fnamemodify(l:cabal_file, ':h') + let l:paths = l:paths . l:cabal_file . ',' + endwhile + + let l:project_file = globpath(l:paths, '*.cabal') + endif + + " Either extract the project directory or take the current working + " directory + if !empty(l:project_file) + let l:project_file = fnamemodify(l:project_file, ':h') + else + let l:project_file = expand('#' . a:buffer . ':p:h') + endif + + return l:project_file +endfunction + +call ale#linter#Define('haskell', { +\ 'name': 'hie', +\ 'lsp': 'stdio', +\ 'command': '%e --lsp', +\ 'executable_callback': 'ale_linters#haskell#hie#GetExecutable', +\ 'project_root_callback': 'ale_linters#haskell#hie#GetProjectRoot', +\}) diff --git a/sources_non_forked/ale/ale_linters/html/htmlhint.vim b/sources_non_forked/ale/ale_linters/html/htmlhint.vim index caa15bbb..234c1176 100644 --- a/sources_non_forked/ale/ale_linters/html/htmlhint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/html/tidy.vim b/sources_non_forked/ale/ale_linters/html/tidy.vim index 913cdade..cab8bc24 100644 --- a/sources_non_forked/ale/ale_linters/html/tidy.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/idris/idris.vim b/sources_non_forked/ale/ale_linters/idris/idris.vim index 115d04fc..b3275b40 100644 --- a/sources_non_forked/ale/ale_linters/idris/idris.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/java/javac.vim b/sources_non_forked/ale/ale_linters/java/javac.vim index d7a39aa7..76445c18 100644 --- a/sources_non_forked/ale/ale_linters/java/javac.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/javascript/flow_ls.vim b/sources_non_forked/ale/ale_linters/javascript/flow_ls.vim index 20fc2217..75377183 100644 --- a/sources_non_forked/ale/ale_linters/javascript/flow_ls.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/javascript/jscs.vim b/sources_non_forked/ale/ale_linters/javascript/jscs.vim index 60044037..a38766a6 100644 --- a/sources_non_forked/ale/ale_linters/javascript/jscs.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/javascript/jshint.vim b/sources_non_forked/ale/ale_linters/javascript/jshint.vim index 2e9bb9fd..83909fa4 100644 --- a/sources_non_forked/ale/ale_linters/javascript/jshint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/kotlin/languageserver.vim b/sources_non_forked/ale/ale_linters/kotlin/languageserver.vim index 0ab673ec..08f1c055 100644 --- a/sources_non_forked/ale/ale_linters/kotlin/languageserver.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/less/lessc.vim b/sources_non_forked/ale/ale_linters/less/lessc.vim index 5fd9a383..37600649 100644 --- a/sources_non_forked/ale/ale_linters/less/lessc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/less/stylelint.vim b/sources_non_forked/ale/ale_linters/less/stylelint.vim index 8e16a098..479808c2 100644 --- a/sources_non_forked/ale/ale_linters/less/stylelint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/llvm/llc.vim b/sources_non_forked/ale/ale_linters/llvm/llc.vim index 15201cbe..044f8c44 100644 --- a/sources_non_forked/ale/ale_linters/llvm/llc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/lua/luac.vim b/sources_non_forked/ale/ale_linters/lua/luac.vim index 4a6bb403..bca2cd8d 100644 --- a/sources_non_forked/ale/ale_linters/lua/luac.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/lua/luacheck.vim b/sources_non_forked/ale/ale_linters/lua/luacheck.vim index 725153c6..669103b8 100644 --- a/sources_non_forked/ale/ale_linters/lua/luacheck.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/markdown/remark_lint.vim b/sources_non_forked/ale/ale_linters/markdown/remark_lint.vim index d9c2efb6..88dfb9dd 100644 --- a/sources_non_forked/ale/ale_linters/markdown/remark_lint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/matlab/mlint.vim b/sources_non_forked/ale/ale_linters/matlab/mlint.vim index 32766334..3435045e 100644 --- a/sources_non_forked/ale/ale_linters/matlab/mlint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/mercury/mmc.vim b/sources_non_forked/ale/ale_linters/mercury/mmc.vim index c7bfc59d..76d357f0 100644 --- a/sources_non_forked/ale/ale_linters/mercury/mmc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/nasm/nasm.vim b/sources_non_forked/ale/ale_linters/nasm/nasm.vim index 77d57e18..29d19e62 100644 --- a/sources_non_forked/ale/ale_linters/nasm/nasm.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/perl/perl.vim b/sources_non_forked/ale/ale_linters/perl/perl.vim index 1b9aa95e..d1dcbc9c 100644 --- a/sources_non_forked/ale/ale_linters/perl/perl.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/perl/perlcritic.vim b/sources_non_forked/ale/ale_linters/perl/perlcritic.vim index e91c8a03..8619a404 100644 --- a/sources_non_forked/ale/ale_linters/perl/perlcritic.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/php/hack.vim b/sources_non_forked/ale/ale_linters/php/hack.vim deleted file mode 100644 index 77d3a588..00000000 --- a/sources_non_forked/ale/ale_linters/php/hack.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: Zefei Xuan -" Description: Hack type checking (http://hacklang.org/) - -function! ale_linters#php#hack#Handle(buffer, lines) abort - let l:pattern = '^\(.*\):\(\d\+\):\(\d\+\),\(\d\+\): \(.\+])\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if a:buffer != bufnr(l:match[1]) - continue - endif - - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('php', { -\ 'name': 'hack', -\ 'executable': 'hh_client', -\ 'command': 'hh_client --retries 0 --retry-if-init false', -\ 'callback': 'ale_linters#php#hack#Handle', -\}) diff --git a/sources_non_forked/ale/ale_linters/php/langserver.vim b/sources_non_forked/ale/ale_linters/php/langserver.vim index 38b42df9..ca91db4c 100644 --- a/sources_non_forked/ale/ale_linters/php/langserver.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/php/phpcs.vim b/sources_non_forked/ale/ale_linters/php/phpcs.vim index faf8ad55..25e53714 100644 --- a/sources_non_forked/ale/ale_linters/php/phpcs.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/php/phpmd.vim b/sources_non_forked/ale/ale_linters/php/phpmd.vim index e9450752..65f1cc3c 100644 --- a/sources_non_forked/ale/ale_linters/php/phpmd.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/php/phpstan.vim b/sources_non_forked/ale/ale_linters/php/phpstan.vim index 24762086..b3875216 100644 --- a/sources_non_forked/ale/ale_linters/php/phpstan.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/pony/ponyc.vim b/sources_non_forked/ale/ale_linters/pony/ponyc.vim index b3329053..19e7e828 100644 --- a/sources_non_forked/ale/ale_linters/pony/ponyc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/pug/puglint.vim b/sources_non_forked/ale/ale_linters/pug/puglint.vim index 165e68b7..63208986 100644 --- a/sources_non_forked/ale/ale_linters/pug/puglint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/puppet/languageserver.vim b/sources_non_forked/ale/ale_linters/puppet/languageserver.vim index 52880f32..a08b7653 100644 --- a/sources_non_forked/ale/ale_linters/puppet/languageserver.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/puppet/puppetlint.vim b/sources_non_forked/ale/ale_linters/puppet/puppetlint.vim index 13da511b..c9c16f5e 100644 --- a/sources_non_forked/ale/ale_linters/puppet/puppetlint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/pyrex/cython.vim b/sources_non_forked/ale/ale_linters/pyrex/cython.vim index 9b6b39d7..d260698c 100644 --- a/sources_non_forked/ale/ale_linters/pyrex/cython.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/qml/qmlfmt.vim b/sources_non_forked/ale/ale_linters/qml/qmlfmt.vim index 85b131fd..12f3e97b 100644 --- a/sources_non_forked/ale/ale_linters/qml/qmlfmt.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/ruby/ruby.vim b/sources_non_forked/ale/ale_linters/ruby/ruby.vim index 1aa88851..2bc4ec4b 100644 --- a/sources_non_forked/ale/ale_linters/ruby/ruby.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/rust/rls.vim b/sources_non_forked/ale/ale_linters/rust/rls.vim index cd13291d..60dd3667 100644 --- a/sources_non_forked/ale/ale_linters/rust/rls.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/sass/stylelint.vim b/sources_non_forked/ale/ale_linters/sass/stylelint.vim index fe941d6a..b6286f18 100644 --- a/sources_non_forked/ale/ale_linters/sass/stylelint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/scala/fsc.vim b/sources_non_forked/ale/ale_linters/scala/fsc.vim index 17b26f0b..fbdce20e 100644 --- a/sources_non_forked/ale/ale_linters/scala/fsc.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/scala/scalac.vim b/sources_non_forked/ale/ale_linters/scala/scalac.vim index 551284af..3dbdd925 100644 --- a/sources_non_forked/ale/ale_linters/scala/scalac.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/scss/stylelint.vim b/sources_non_forked/ale/ale_linters/scss/stylelint.vim index 6bfdd09a..6d183b4a 100644 --- a/sources_non_forked/ale/ale_linters/scss/stylelint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/sh/shellcheck.vim b/sources_non_forked/ale/ale_linters/sh/shellcheck.vim index 27c74531..0f68e62c 100644 --- a/sources_non_forked/ale/ale_linters/sh/shellcheck.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/spec/rpmlint.vim b/sources_non_forked/ale/ale_linters/spec/rpmlint.vim index f5308af6..486bef1e 100644 --- a/sources_non_forked/ale/ale_linters/spec/rpmlint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/stylus/stylelint.vim b/sources_non_forked/ale/ale_linters/stylus/stylelint.vim index 1562692a..2256f3c0 100644 --- a/sources_non_forked/ale/ale_linters/stylus/stylelint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/tcl/nagelfar.vim b/sources_non_forked/ale/ale_linters/tcl/nagelfar.vim index 13b7a549..183ea9e7 100644 --- a/sources_non_forked/ale/ale_linters/tcl/nagelfar.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/terraform/tflint.vim b/sources_non_forked/ale/ale_linters/terraform/tflint.vim index 93966ff3..b8e9c96d 100644 --- a/sources_non_forked/ale/ale_linters/terraform/tflint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/tex/lacheck.vim b/sources_non_forked/ale/ale_linters/tex/lacheck.vim index e5a9632b..38135b85 100644 --- a/sources_non_forked/ale/ale_linters/tex/lacheck.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/thrift/thrift.vim b/sources_non_forked/ale/ale_linters/thrift/thrift.vim index a8fe10b6..ac1f69fc 100644 --- a/sources_non_forked/ale/ale_linters/thrift/thrift.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/typescript/tsserver.vim b/sources_non_forked/ale/ale_linters/typescript/tsserver.vim index 08bd0f41..0ad35d37 100644 --- a/sources_non_forked/ale/ale_linters/typescript/tsserver.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/vim/ale_custom_linting_rules.vim b/sources_non_forked/ale/ale_linters/vim/ale_custom_linting_rules.vim new file mode 100644 index 00000000..f4e111ee --- /dev/null +++ b/sources_non_forked/ale/ale_linters/vim/ale_custom_linting_rules.vim @@ -0,0 +1,57 @@ +" Author: w0rp +" Description: A linter for checking ALE project code itself. + +function! ale_linters#vim#ale_custom_linting_rules#GetExecutable(buffer) abort + let l:filename = expand('#' . a:buffer . ':p') + let l:dir_list = [] + + for l:dir in split(&runtimepath, ',') + if l:filename[:len(l:dir) - 1] is# l:dir + call add(l:dir_list, l:dir) + endif + endfor + + return !empty(l:dir_list) + \ ? findfile('test/script/custom-linting-rules', join(l:dir_list, ',')) + \ : '' +endfunction + +function! s:GetALEProjectDir(buffer) abort + let l:executable = ale_linters#vim#ale_custom_linting_rules#GetExecutable(a:buffer) + + return ale#path#Dirname(ale#path#Dirname(ale#path#Dirname(l:executable))) +endfunction + +function! ale_linters#vim#ale_custom_linting_rules#GetCommand(buffer) abort + let l:dir = s:GetALEProjectDir(a:buffer) + + return ale#path#CdString(l:dir) . '%e .' +endfunction + +function! ale_linters#vim#ale_custom_linting_rules#Handle(buffer, lines) abort + let l:dir = s:GetALEProjectDir(a:buffer) + let l:output = [] + let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+) (.+)$' + + for l:match in ale#util#GetMatches(a:lines, l:pattern) + let l:filename = ale#path#GetAbsPath(l:dir, l:match[1]) + + if bufnr(l:filename) is a:buffer + call add(l:output, { + \ 'lnum': l:match[2], + \ 'text': l:match[3], + \ 'type': 'W', + \}) + endif + endfor + + return l:output +endfunction + +call ale#linter#Define('vim', { +\ 'name': 'ale_custom_linting_rules', +\ 'executable_callback': 'ale_linters#vim#ale_custom_linting_rules#GetExecutable', +\ 'command_callback': 'ale_linters#vim#ale_custom_linting_rules#GetCommand', +\ 'callback': 'ale_linters#vim#ale_custom_linting_rules#Handle', +\ 'lint_file': 1, +\}) diff --git a/sources_non_forked/ale/ale_linters/vue/vls.vim b/sources_non_forked/ale/ale_linters/vue/vls.vim index 0d4bf9f6..7116128b 100644 --- a/sources_non_forked/ale/ale_linters/vue/vls.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/xml/xmllint.vim b/sources_non_forked/ale/ale_linters/xml/xmllint.vim index 9d79438e..a0f97c3a 100644 --- a/sources_non_forked/ale/ale_linters/xml/xmllint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/yaml/swaglint.vim b/sources_non_forked/ale/ale_linters/yaml/swaglint.vim index 4a22c70f..7362536e 100644 --- a/sources_non_forked/ale/ale_linters/yaml/swaglint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/ale_linters/yaml/yamllint.vim b/sources_non_forked/ale/ale_linters/yaml/yamllint.vim index f100667e..9d2cc7c2 100644 --- a/sources_non_forked/ale/ale_linters/yaml/yamllint.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/autoload/ale.vim b/sources_non_forked/ale/autoload/ale.vim index ee32a9a6..51c0ce83 100644 --- a/sources_non_forked/ale/autoload/ale.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/autoload/ale/assert.vim b/sources_non_forked/ale/autoload/ale/assert.vim index a6753a1a..87798520 100644 --- a/sources_non_forked/ale/autoload/ale/assert.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/autoload/ale/c.vim b/sources_non_forked/ale/autoload/ale/c.vim index 19bb0d5e..ae428692 100644 --- a/sources_non_forked/ale/autoload/ale/c.vim +++ b/sources_non_forked/ale/autoload/ale/c.vim @@ -150,12 +150,22 @@ function! s:GetListFromCompileCommandsFile(compile_commands_file) abort endfunction function! ale#c#ParseCompileCommandsFlags(buffer, dir, json_list) abort + " Search for an exact file match first. for l:item in a:json_list if bufnr(l:item.file) is a:buffer return ale#c#ParseCFlags(a:dir, l:item.command) endif endfor + " Look for any file in the same directory if we can't find an exact match. + let l:dir = ale#path#Simplify(expand('#' . a:buffer . ':p:h')) + + for l:item in a:json_list + if ale#path#Simplify(fnamemodify(l:item.file, ':h')) is? l:dir + return ale#c#ParseCFlags(a:dir, l:item.command) + endif + endfor + return '' endfunction @@ -246,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/sources_non_forked/ale/autoload/ale/fix/registry.vim b/sources_non_forked/ale/autoload/ale/fix/registry.vim index dc34e4c5..e60d67b6 100644 --- a/sources_non_forked/ale/autoload/ale/fix/registry.vim +++ b/sources_non_forked/ale/autoload/ale/fix/registry.vim @@ -157,7 +157,7 @@ let s:default_registry = { \ }, \ 'hackfmt': { \ 'function': 'ale#fixers#hackfmt#Fix', -\ 'suggested_filetypes': ['php'], +\ 'suggested_filetypes': ['hack'], \ 'description': 'Fix Hack files with hackfmt.', \ }, \ 'hfmt': { diff --git a/sources_non_forked/ale/autoload/ale/fixers/hackfmt.vim b/sources_non_forked/ale/autoload/ale/fixers/hackfmt.vim index b5bf0dc5..bf2d4f71 100644 --- a/sources_non_forked/ale/autoload/ale/fixers/hackfmt.vim +++ b/sources_non_forked/ale/autoload/ale/fixers/hackfmt.vim @@ -1,12 +1,12 @@ " Author: Sam Howie " Description: Integration of hackfmt with ALE. -call ale#Set('php_hackfmt_executable', 'hackfmt') -call ale#Set('php_hackfmt_options', '') +call ale#Set('hack_hackfmt_executable', 'hackfmt') +call ale#Set('hack_hackfmt_options', '') function! ale#fixers#hackfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'php_hackfmt_executable') - let l:options = ale#Var(a:buffer, 'php_hackfmt_options') + let l:executable = ale#Var(a:buffer, 'hack_hackfmt_executable') + let l:options = ale#Var(a:buffer, 'hack_hackfmt_options') return { \ 'command': ale#Escape(l:executable) diff --git a/sources_non_forked/ale/autoload/ale/fixers/prettier.vim b/sources_non_forked/ale/autoload/ale/fixers/prettier.vim index e8f4e92e..9a4a5d8e 100644 --- a/sources_non_forked/ale/autoload/ale/fixers/prettier.vim +++ b/sources_non_forked/ale/autoload/ale/fixers/prettier.vim @@ -36,12 +36,23 @@ function! ale#fixers#prettier#ApplyFixForVersion(buffer, version_output) abort " Append the --parser flag depending on the current filetype (unless it's " already set in g:javascript_prettier_options). if empty(expand('#' . a:buffer . ':e')) && match(l:options, '--parser') == -1 - let l:prettier_parsers = ['typescript', 'css', 'less', 'scss', 'json', 'json5', 'graphql', 'markdown', 'vue'] - let l:parser = 'babylon' + let l:prettier_parsers = { + \ 'typescript': 'typescript', + \ 'css': 'css', + \ 'less': 'less', + \ 'scss': 'scss', + \ 'json': 'json', + \ 'json5': 'json5', + \ 'graphql': 'graphql', + \ 'markdown': 'markdown', + \ 'vue': 'vue', + \ 'yaml': 'yaml', + \} + let l:parser = '' for l:filetype in split(getbufvar(a:buffer, '&filetype'), '\.') - if index(l:prettier_parsers, l:filetype) > -1 - let l:parser = l:filetype + if has_key(l:prettier_parsers, l:filetype) + let l:parser = l:prettier_parsers[l:filetype] break endif endfor diff --git a/sources_non_forked/ale/autoload/ale/handlers/gcc.vim b/sources_non_forked/ale/autoload/ale/handlers/gcc.vim index b8bac77f..72d639da 100644 --- a/sources_non_forked/ale/autoload/ale/handlers/gcc.vim +++ b/sources_non_forked/ale/autoload/ale/handlers/gcc.vim @@ -92,9 +92,12 @@ function! ale#handlers#gcc#HandleGCCFormat(buffer, lines) abort " the previous error parsed in output if l:match[4] is# 'note' if !empty(l:output) - let l:output[-1]['detail'] = - \ get(l:output[-1], 'detail', '') - \ . s:RemoveUnicodeQuotes(l:match[0]) . "\n" + if !has_key(l:output[-1], 'detail') + let l:output[-1].detail = l:output[-1].text + endif + + let l:output[-1].detail = l:output[-1].detail . "\n" + \ . s:RemoveUnicodeQuotes(l:match[0]) endif continue diff --git a/sources_non_forked/ale/autoload/ale/linter.vim b/sources_non_forked/ale/autoload/ale/linter.vim index 683d506a..ab86d77e 100644 --- a/sources_non_forked/ale/autoload/ale/linter.vim +++ b/sources_non_forked/ale/autoload/ale/linter.vim @@ -26,11 +26,13 @@ let s:default_ale_linter_aliases = { " " Only cargo is enabled for Rust by default. " rpmlint is disabled by default because it can result in code execution. +" hhast is disabled by default because it executes code in the project root. " " NOTE: Update the g:ale_linters documentation when modifying this. let s:default_ale_linters = { \ 'csh': ['shell'], \ 'go': ['gofmt', 'golint', 'go vet'], +\ 'hack': ['hack'], \ 'help': [], \ 'perl': ['perlcritic'], \ 'python': ['flake8', 'mypy', 'pylint'], diff --git a/sources_non_forked/ale/autoload/ale/lsp/response.vim b/sources_non_forked/ale/autoload/ale/lsp/response.vim index 48740ad1..561be62e 100644 --- a/sources_non_forked/ale/autoload/ale/lsp/response.vim +++ b/sources_non_forked/ale/autoload/ale/lsp/response.vim @@ -47,7 +47,12 @@ function! ale#lsp#response#ReadDiagnostics(response) abort endif if has_key(l:diagnostic, 'code') - let l:loclist_item.nr = l:diagnostic.code + if type(l:diagnostic.code) == v:t_string + let l:loclist_item.code = l:diagnostic.code + elseif type(l:diagnostic.code) == v:t_number && l:diagnostic.code != -1 + let l:loclist_item.code = string(l:diagnostic.code) + let l:loclist_item.nr = l:diagnostic.code + endif endif call add(l:loclist, l:loclist_item) @@ -70,7 +75,12 @@ function! ale#lsp#response#ReadTSServerDiagnostics(response) abort \} if has_key(l:diagnostic, 'code') - let l:loclist_item.nr = l:diagnostic.code + if type(l:diagnostic.code) == v:t_string + let l:loclist_item.code = l:diagnostic.code + elseif type(l:diagnostic.code) == v:t_number && l:diagnostic.code != -1 + let l:loclist_item.code = string(l:diagnostic.code) + let l:loclist_item.nr = l:diagnostic.code + endif endif if get(l:diagnostic, 'category') is# 'warning' @@ -110,7 +120,7 @@ function! ale#lsp#response#GetErrorMessage(response) abort if type(l:error_data) is v:t_string let l:message .= "\n" . l:error_data - else + elseif type(l:error_data) is v:t_dict let l:traceback = get(l:error_data, 'traceback', []) if type(l:traceback) is v:t_list && !empty(l:traceback) diff --git a/sources_non_forked/ale/autoload/ale/node.vim b/sources_non_forked/ale/autoload/ale/node.vim index f75280b7..5c579c75 100644 --- a/sources_non_forked/ale/autoload/ale/node.vim +++ b/sources_non_forked/ale/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/sources_non_forked/ale/autoload/ale/python.vim b/sources_non_forked/ale/autoload/ale/python.vim index bc1cc980..1f963431 100644 --- a/sources_non_forked/ale/autoload/ale/python.vim +++ b/sources_non_forked/ale/autoload/ale/python.vim @@ -24,6 +24,7 @@ function! ale#python#FindProjectRootIni(buffer) abort \|| filereadable(l:path . '/mypy.ini') \|| filereadable(l:path . '/pycodestyle.cfg') \|| filereadable(l:path . '/flake8.cfg') + \|| filereadable(l:path . '/.flake8rc') \|| filereadable(l:path . '/Pipfile') \|| filereadable(l:path . '/Pipfile.lock') return l:path diff --git a/sources_non_forked/ale/doc/ale-hack.txt b/sources_non_forked/ale/doc/ale-hack.txt new file mode 100644 index 00000000..4776b8cf --- /dev/null +++ b/sources_non_forked/ale/doc/ale-hack.txt @@ -0,0 +1,51 @@ +=============================================================================== +ALE Hack Integration *ale-hack-options* + *ale-integration-hack* + + HHAST is disabled by default, as it executes code in the project root. + + Currently linters must be enabled globally. HHAST can be enabled with: + +> + let g:ale_linters = {'hack': ['hack', 'hhast']} +< + +=============================================================================== +hack *ale-hack-hack* + +g:ale_hack_hack_executable *g:ale_hack_hack_executable* + *b:ale_hack_hack_executable* + + Type: |String| + Default: `'hh_client'` + + This variable can be set to use a specific executable to interact with the + Hack typechecker. + + +=============================================================================== +hackfmt *ale-hack-hackfmt* + +g:ale_hack_hackfmt_options *g:ale_hack_hackfmt_options* + *b:ale_hack_hackfmt_options* + Type: |String| + Default: `''` + + This variable can be set to pass additional options to the hackfmt fixer. + + +=============================================================================== +hhast *ale-hack-hhast* + +g:ale_hack_hhast_executable *g:ale_hack_hhast_executable* + *b:ale_hack_hhast_executable* + + Type: |String| + Default: `'vendor/bin/hhast-lint'` + + This variable can be set to use a specific executable to interact with the + Hack typechecker. + + +=============================================================================== + vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/sources_non_forked/ale/doc/ale-haskell.txt b/sources_non_forked/ale/doc/ale-haskell.txt index 15d3ce48..379cd987 100644 --- a/sources_non_forked/ale/doc/ale-haskell.txt +++ b/sources_non_forked/ale/doc/ale-haskell.txt @@ -79,5 +79,16 @@ g:ale_haskell_stack_build_options *g:ale_haskell_stack_build_options* programs will be slower unless you separately rebuild them outside of ALE. +=============================================================================== +hie *ale-haskell-hie* + +g:ale_haskell_hie_executable *g:ale_haskell_hie_executable* + *b:ale_haskell_hie_executable* + Type: |String| + Default: `'hie'` + + This variable can be changed to use a different executable for the haskell + ide engine. i.e. `'hie-wrapper'` + =============================================================================== vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/sources_non_forked/ale/doc/ale-php.txt b/sources_non_forked/ale/doc/ale-php.txt index 33796f7c..ba53db89 100644 --- a/sources_non_forked/ale/doc/ale-php.txt +++ b/sources_non_forked/ale/doc/ale-php.txt @@ -1,24 +1,6 @@ =============================================================================== ALE PHP Integration *ale-php-options* - -=============================================================================== -hack *ale-php-hack* - -There are no options for this linter. - - -=============================================================================== -hackfmt *ale-php-hackfmt* - -g:ale_php_hackfmt_options *g:ale_php_hackfmt_options* - *b:ale_php_hackfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the hackfmt fixer. - - =============================================================================== langserver *ale-php-langserver* diff --git a/sources_non_forked/ale/doc/ale-python.txt b/sources_non_forked/ale/doc/ale-python.txt index 093ea758..b5c469b1 100644 --- a/sources_non_forked/ale/doc/ale-python.txt +++ b/sources_non_forked/ale/doc/ale-python.txt @@ -22,6 +22,7 @@ ALE will look for configuration files with the following filenames. > mypy.ini pycodestyle.cfg flake8.cfg + .flake8rc Pipfile Pipfile.lock < diff --git a/sources_non_forked/ale/doc/ale-rust.txt b/sources_non_forked/ale/doc/ale-rust.txt index d61e5b55..a360dce6 100644 --- a/sources_non_forked/ale/doc/ale-rust.txt +++ b/sources_non_forked/ale/doc/ale-rust.txt @@ -5,8 +5,9 @@ ALE Rust Integration *ale-rust-options* =============================================================================== Integration Information - Since Vim does not detect the rust file type out-of-the-box, you need the - runtime files for rust from here: https://github.com/rust-lang/rust.vim + If Vim does not detect the Rust file type out-of-the-box, you need the runtime + files for Rust distributed in Vim >=8.0.0501 or upstream: + https://github.com/rust-lang/rust.vim Note that there are three possible linters for Rust files: diff --git a/sources_non_forked/ale/doc/ale.txt b/sources_non_forked/ale/doc/ale.txt index 15a20469..db060a2b 100644 --- a/sources_non_forked/ale/doc/ale.txt +++ b/sources_non_forked/ale/doc/ale.txt @@ -96,6 +96,10 @@ CONTENTS *ale-contents* eslint..............................|ale-graphql-eslint| gqlint..............................|ale-graphql-gqlint| prettier............................|ale-graphql-prettier| + hack..................................|ale-hack-options| + hack................................|ale-hack-hack| + hackfmt.............................|ale-hack-hackfmt| + hhast...............................|ale-hack-hhast| handlebars............................|ale-handlebars-options| ember-template-lint.................|ale-handlebars-embertemplatelint| haskell...............................|ale-haskell-options| @@ -105,6 +109,7 @@ CONTENTS *ale-contents* hdevtools...........................|ale-haskell-hdevtools| hfmt................................|ale-haskell-hfmt| stack-build.........................|ale-haskell-stack-build| + hie.................................|ale-haskell-hie| html..................................|ale-html-options| htmlhint............................|ale-html-htmlhint| tidy................................|ale-html-tidy| @@ -171,8 +176,6 @@ CONTENTS *ale-contents* perlcritic..........................|ale-perl-perlcritic| perltidy............................|ale-perl-perltidy| php...................................|ale-php-options| - hack................................|ale-php-hack| - hackfmt.............................|ale-php-hackfmt| langserver..........................|ale-php-langserver| phan................................|ale-php-phan| phpcbf..............................|ale-php-phpcbf| @@ -367,9 +370,10 @@ Notes: * GLSL: glslang, `glslls` * Go: `gofmt`, `goimports`, `go vet`!!, `golint`, `gotype`!!, `gometalinter`!!, `go build`!!, `gosimple`!!, `staticcheck`!! * GraphQL: `eslint`, `gqlint`, `prettier` +* Hack: `hack`, `hackfmt`, `hhast` * Haml: `haml-lint` * Handlebars: `ember-template-lint` -* Haskell: `brittany`, `ghc`, `cabal-ghc`, `stack-ghc`, `stack-build`!!, `ghc-mod`, `stack-ghc-mod`, `hlint`, `hdevtools`, `hfmt` +* Haskell: `brittany`, `ghc`, `cabal-ghc`, `stack-ghc`, `stack-build`!!, `ghc-mod`, `stack-ghc-mod`, `hlint`, `hdevtools`, `hfmt`, `hie` * HTML: `alex`!!, `HTMLHint`, `proselint`, `tidy`, `write-good` * Idris: `idris` * Java: `checkstyle`, `javac`, `google-java-format`, `PMD` @@ -393,7 +397,7 @@ Notes: * Objective-C++: `clang` * OCaml: `merlin` (see |ale-ocaml-merlin|), `ols` * Perl: `perl -c`, `perl-critic`, `perltidy` -* PHP: `hack`, `hackfmt`, `langserver`, `phan`, `php -l`, `phpcs`, `phpmd`, `phpstan`, `phpcbf`, `php-cs-fixer` +* PHP: `langserver`, `phan`, `php -l`, `phpcs`, `phpmd`, `phpstan`, `phpcbf`, `php-cs-fixer` * PO: `alex`!!, `msgfmt`, `proselint`, `write-good` * Pod: `alex`!!, `proselint`, `write-good` * Pony: `ponyc` @@ -669,6 +673,16 @@ items can be controlled with |g:ale_completion_max_suggestions|. If you don't like some of the suggestions you see, you can filter them out with |g:ale_completion_excluded_words| or |b:ale_completion_excluded_words|. + *ale-completion-completopt-bug* + +ALE implements completion as you type by temporarily adjusting |completeopt| +before opening the omnicomplete menu with . In some versions of Vim, +the value set for the option will not be respected. If you experience issues +with Vim automatically inserting text while you type, set the following option +in vimrc, and your issues should go away. > + + set completeopt=menu,menuone,preview,noselect,noinsert +< ------------------------------------------------------------------------------- 5.2 Go To Definition *ale-go-to-definition* @@ -1201,6 +1215,7 @@ g:ale_linters *g:ale_linters* { \ 'csh': ['shell'], \ 'go': ['gofmt', 'golint', 'go vet'], + \ 'hack': ['hack'], \ 'help': [], \ 'perl': ['perlcritic'], \ 'python': ['flake8', 'mypy', 'pylint'], @@ -2318,6 +2333,13 @@ ale#linter#Define(filetype, linter) *ale#linter#Define()* `type` - Defaults to `'E'`. `nr` - Defaults to `-1`. + Numeric error code. If `nr` is not `-1`, `code` + likely should contain the string representation of + the same value. + `code` - No default; may be unset. + + Human-readable |String| error code. + `executable` A |String| naming the executable itself which will be run. This value will be used to check if the program requested is installed or not. diff --git a/sources_non_forked/nerdtree/autoload/nerdtree.vim b/sources_non_forked/nerdtree/autoload/nerdtree.vim index b138c21c..bdf3deb7 100644 --- a/sources_non_forked/nerdtree/autoload/nerdtree.vim +++ b/sources_non_forked/nerdtree/autoload/nerdtree.vim @@ -61,7 +61,6 @@ endfunction function! nerdtree#compareNodesBySortKey(n1, n2) let sortKey1 = a:n1.path.getSortKey() let sortKey2 = a:n2.path.getSortKey() - let i = 0 while i < min([len(sortKey1), len(sortKey2)]) " Compare chunks upto common length. @@ -73,9 +72,9 @@ function! nerdtree#compareNodesBySortKey(n1, n2) elseif sortKey1[i] ># sortKey2[i] return 1 endif - elseif sortKey1[i] == type(0) + elseif type(sortKey1[i]) == v:t_number return -1 - elseif sortKey2[i] == type(0) + elseif type(sortKey2[i]) == v:t_number return 1 endif let i = i + 1 diff --git a/sources_non_forked/nerdtree/lib/nerdtree/path.vim b/sources_non_forked/nerdtree/lib/nerdtree/path.vim index 2d8de23c..0aa592e2 100644 --- a/sources_non_forked/nerdtree/lib/nerdtree/path.vim +++ b/sources_non_forked/nerdtree/lib/nerdtree/path.vim @@ -7,10 +7,6 @@ " ============================================================================ -" This constant is used throughout this script for sorting purposes. -let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*') -lockvar s:NERDTreeSortStarIndex - let s:Path = {} let g:NERDTreePath = s:Path @@ -374,7 +370,8 @@ function! s:Path.getSortOrderIndex() endif let i = i + 1 endwhile - return s:NERDTreeSortStarIndex + + return index(g:NERDTreeSortOrder, '*') endfunction " FUNCTION: Path._splitChunks(path) {{{1 @@ -395,7 +392,7 @@ endfunction " FUNCTION: Path.getSortKey() {{{1 " returns a key used in compare function for sorting function! s:Path.getSortKey() - if !exists("self._sortKey") + if !exists("self._sortKey") || g:NERDTreeSortOrder !=# g:NERDTreeOldSortOrder let path = self.getLastPathComponent(1) if !g:NERDTreeSortHiddenFirst let path = substitute(path, '^[._]', '', '') diff --git a/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim b/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim index 03c3545b..30db853f 100644 --- a/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim +++ b/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim @@ -607,8 +607,12 @@ endfunction " FUNCTION: TreeDirNode.sortChildren() {{{1 " Sort "self.children" by alphabetical order and directory priority. function! s:TreeDirNode.sortChildren() + if count(g:NERDTreeSortOrder, '*') < 1 + call add(g:NERDTreeSortOrder, '*') + endif let CompareFunc = function("nerdtree#compareNodesBySortKey") call sort(self.children, CompareFunc) + let g:NERDTreeOldSortOrder = g:NERDTreeSortOrder endfunction " FUNCTION: TreeDirNode.toggleOpen([options]) {{{1 diff --git a/sources_non_forked/nerdtree/plugin/NERD_tree.vim b/sources_non_forked/nerdtree/plugin/NERD_tree.vim index 35b47c38..71d719aa 100644 --- a/sources_non_forked/nerdtree/plugin/NERD_tree.vim +++ b/sources_non_forked/nerdtree/plugin/NERD_tree.vim @@ -81,12 +81,8 @@ call s:initVariable("g:NERDTreeCascadeSingleChildDir", 1) if !exists("g:NERDTreeSortOrder") let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$', '\.bak$', '\~$'] -else - "if there isnt a * in the sort sequence then add one - if count(g:NERDTreeSortOrder, '*') < 1 - call add(g:NERDTreeSortOrder, '*') - endif endif +let g:NERDTreeOldSortOrder = [] call s:initVariable("g:NERDTreeGlyphReadOnly", "RO") diff --git a/sources_non_forked/vim-abolish/README.markdown b/sources_non_forked/vim-abolish/README.markdown index beb696cb..e8dd0d03 100644 --- a/sources_non_forked/vim-abolish/README.markdown +++ b/sources_non_forked/vim-abolish/README.markdown @@ -120,8 +120,7 @@ Want to turn `fooBar` into `foo_bar`? Press `crs` (coerce to snake\_case). MixedCase (`crm`), camelCase (`crc`), snake\_case (`crs`), UPPER\_CASE (`cru`), dash-case (`cr-`), dot.case (`cr.`), space case (`cr`), and Title Case (`crt`) are all just 3 -keystrokes away. These commands support -[repeat.vim](https://github.com/tpope/vim-repeat). +keystrokes away. ## Installation diff --git a/sources_non_forked/vim-fugitive/autoload/fugitive.vim b/sources_non_forked/vim-fugitive/autoload/fugitive.vim index 6dcd5ee7..4123f462 100644 --- a/sources_non_forked/vim-fugitive/autoload/fugitive.vim +++ b/sources_non_forked/vim-fugitive/autoload/fugitive.vim @@ -24,6 +24,21 @@ function! s:gsub(str,pat,rep) abort return substitute(a:str,'\v\C'.a:pat,a:rep,'g') endfunction +function! s:Uniq(list) abort + let i = 0 + let seen = {} + while i < len(a:list) + let str = string(a:list[i]) + if has_key(seen, str) + call remove(a:list, i) + else + let seen[str] = 1 + let i += 1 + endif + endwhile + return a:list +endfunction + function! s:winshell() abort return &shell =~? 'cmd' || exists('+shellslash') && !&shellslash endfunction @@ -66,7 +81,7 @@ function! s:warn(str) abort let v:warningmsg = a:str endfunction -function! s:shellslash(path) abort +function! s:Slash(path) abort if s:winshell() return tr(a:path, '\', '/') else @@ -82,6 +97,15 @@ function! s:PlatformSlash(path) abort endif endfunction +function! s:cpath(path, ...) abort + if exists('+fileignorecase') && &fileignorecase + let path = s:PlatformSlash(tolower(a:path)) + else + let path = s:PlatformSlash(a:path) + endif + return a:0 ? path ==# s:cpath(a:1) : path +endfunction + let s:executables = {} function! s:executable(binary) abort @@ -119,6 +143,28 @@ function! fugitive#GitVersion(...) abort return s:git_versions[g:fugitive_git_executable] endfunction +let s:commondirs = {} +function! fugitive#CommonDir(dir) abort + if empty(a:dir) + return '' + endif + if !has_key(s:commondirs, a:dir) + if getfsize(a:dir . '/HEAD') < 10 + let s:commondirs[a:dir] = '' + elseif filereadable(a:dir . '/commondir') + let dir = get(readfile(a:dir . '/commondir', 1), 0, '') + if dir =~# '^/\|^\a:/' + let s:commondirs[a:dir] = dir + else + let s:commondirs[a:dir] = simplify(a:dir . '/' . dir) + endif + else + let s:commondirs[a:dir] = a:dir + endif + endif + return s:commondirs[a:dir] +endfunction + function! s:Tree(...) abort return FugitiveTreeForGitDir(a:0 ? a:1 : get(b:, 'git_dir', '')) endfunction @@ -129,7 +175,7 @@ function! s:TreeChomp(...) abort let tree = s:Tree(dir) let pre = '' if empty(tree) - let args = ['--git-dir=' . dir] . args + let args = ['--git-dir=' . dir] + args elseif s:cpath(tree) !=# s:cpath(getcwd()) if fugitive#GitVersion() =~# '^[01]\.' let pre = 'cd ' . s:shellesc(tree) . (s:winshell() ? ' & ' : '; ') @@ -179,10 +225,10 @@ function! fugitive#RemoteUrl(...) abort endfunction function! s:recall() abort - let rev = s:sub(s:buffer().rev(), '^/', '') + let rev = s:sub(fugitive#buffer().rev(), '^/', '') if rev ==# ':' return matchstr(getline('.'),'^.\=\t\%([[:alpha:] ]\+: *\)\=\zs.\{-\}\ze\%( ([^()[:digit:]]\+)\)\=$\|^\d\{6} \x\{40\} \d\t\zs.*') - elseif s:buffer().type('tree') + elseif fugitive#buffer().type('tree') let file = matchstr(getline('.'), '\t\zs.*') if empty(file) && line('.') > 2 let file = s:sub(getline('.'), '/$', '') @@ -283,20 +329,25 @@ function! s:repo_bare() dict abort endif endfunction -function! s:repo_translate(spec, ...) dict abort - let rev = a:spec +function! s:repo_translate(object, ...) dict abort + let rev = substitute(a:object, '[:/]\zs\.\%(/\+\|$\)', '', 'g') let dir = self.git_dir let tree = s:Tree(dir) - if rev ==# '.' - let f = empty(tree) ? dir : tree - elseif rev =~# '^/\=\.git$' && empty(tree) + let base = len(tree) ? tree : 'fugitive://' . dir . '//0' + if rev =~# '^/\=\.git$' && empty(tree) let f = dir elseif rev =~# '^/\=\.git/' - let f = dir . s:sub(rev, '^/=\.git', '') - elseif empty(rev) || rev ==# '/.' - return self.tree() - elseif rev =~# '^\.\=/' - let f = self.tree(substitute(rev, '^\.', '', '')) + let f = s:sub(rev, '^/=\.git', '') + let cdir = fugitive#CommonDir(dir) + if cdir !=# dir && (f =~# '^/\%(config\|info\|hooks\|objects\|refs\|worktrees\)' || !filereadable(f) && filereadable(cdir . f)) + let f = cdir . f + else + let f = dir . f + endif + elseif rev ==# '^/\=\.$' + return base + elseif rev =~# '^\.\=\%(/\|$\)' + let f = base . substitute(rev, '^\.', '', '') elseif rev =~# '^:[0-3]:/\@!' let f = 'fugitive://' . dir . '//' . rev[1] . '/' . rev[3:-1] elseif rev ==# ':' @@ -309,14 +360,9 @@ function! s:repo_translate(spec, ...) dict abort let f = 'fugitive://' . dir . '//0/' . rev[1:-1] else if rev =~# 'HEAD\|^refs/' && rev !~# ':' - let refs = dir . '/refs/' - if filereadable(dir . '/commondir') - let refs = simplify(dir . '/' . get(readfile(dir . '/commondir', 1), 0, '')) . '/refs/' - endif - if filereadable(refs . '../' . rev) - let f = simplify(refs . '../' . rev) - elseif filereadable(refs . rev) - let f = refs . rev + let cdir = rev =~# '^refs/' ? fugitive#CommonDir(dir) : dir + if filereadable(cdir . '/' . rev) + let f = simplify(cdir . '/' . rev) endif endif if !exists('f') @@ -329,15 +375,19 @@ function! s:repo_translate(spec, ...) dict abort if len(commit) let f = 'fugitive://' . dir . '//' . commit . file else - let f = self.tree(rev) + let f = base . '/' . rev endif endif endif return a:0 && a:1 ? s:PlatformSlash(f) : f endfunction -function! s:Generate(rev) abort - return fugitive#repo().translate(a:rev, 1) +function! s:Generate(rev, ...) abort + let repo = fugitive#repo(a:0 ? a:1 : b:git_dir) + if a:rev =~# '^\%(\a\+:\)\=/' && getftime(a:rev) >= 0 && getftime(repo.tree() . a:rev) < 0 + return s:PlatformSlash(a:rev) + endif + return repo.translate(a:rev, 1) endfunction function! s:repo_head(...) dict abort @@ -408,7 +458,7 @@ call s:add_methods('repo',['config', 'user']) " Section: Buffer function! s:DirCommitFile(path) abort - let vals = matchlist(s:shellslash(a:path), '\c^fugitive:\%(//\)\=\(.\{-\}\)\%(//\|::\)\(\x\{40\}\|[0-3]\)\(/.*\)\=$') + let vals = matchlist(s:Slash(a:path), '\c^fugitive:\%(//\)\=\(.\{-\}\)\%(//\|::\)\(\x\{40\}\|[0-3]\)\(/.*\)\=$') if empty(vals) return ['', '', ''] endif @@ -437,8 +487,8 @@ function! fugitive#Path(url, ...) abort if !a:0 || empty(a:url) return fugitive#Real(a:url) endif - let url = s:shellslash(fnamemodify(a:url, ':p')) - if url =~# '/$' && s:shellslash(a:url) !~# '/$' + let url = s:Slash(fnamemodify(a:url, ':p')) + if url =~# '/$' && s:Slash(a:url) !~# '/$' let url = url[0:-2] endif let dir = a:0 > 1 ? a:2 : get(b:, 'git_dir', '') @@ -450,15 +500,52 @@ function! fugitive#Path(url, ...) abort let file = '/.git'.url[strlen(dir) : -1] elseif len(tree) && s:cpath(url[0 : len(tree)]) ==# s:cpath(tree . '/') let file = url[len(tree) : -1] - elseif s:cpath(url) ==# s:cpath(tree) + elseif s:cpath(url) ==# s:cpath(tree) || len(argdir) && empty(file) let file = '/' endif if empty(file) && a:1 =~# '^\%([.:]\=/\)\=$' - return s:shellslash(fugitive#Real(a:url)) + return s:Slash(fugitive#Real(a:url)) endif return substitute(file, '^/', a:1, '') endfunction +function! s:RemoveDot(path, ...) abort + if a:path !~# '^\./' + return a:path + endif + let dir = a:0 ? a:1 : get(b:, 'git_dir', '') + let cdir = fugitive#CommonDir(dir) + if len(filter(['', '/tags', '/heads', '/remotes'], 'getftime(cdir . "/refs" . v:val . a:path[1:-1]) >= 0')) || + \ a:path =~# 'HEAD$' && filereadable(dir . a:path[1:-1]) || + \ a:path =~# '^\./refs/' && filereadable(cdir . a:path[1:-1]) + return a:path + endif + return a:path[2:-1] +endfunction + +function! s:Expand(rev, ...) abort + let dir = a:0 ? a:1 : get(b:, 'git_dir', '') + if a:rev =~# '^:[0-3]$' + let file = a:rev . fugitive#Path(@%, a:rev, dir) + elseif a:rev =~# '^-' + let file = 'HEAD^{}' . a:rev[1:-1] . fugitive#Path(@%, ':', dir) + elseif a:rev =~# '^@{' + let file = 'HEAD'.a:rev. fugitive#Path(@%, ':', dir) + elseif a:rev =~# '^[~^]' + let commit = substitute(s:DirCommitFile(@%), '^\d\=$', 'HEAD') + let file = commit . a:rev . fugitive#Path(@%, ':', dir) + else + let file = a:rev + endif + return s:sub(substitute(file, + \ '\([%#]\)$\|\\\([[:punct:]]\)','\=len(submatch(2)) ? submatch(2) : fugitive#Path(expand(submatch(1)), "./", dir)','g'), + \ '\.\@<=/$','') +endfunction + +function! s:ShellExpand(cmd, ...) abort + return substitute(a:cmd, '\\\@= 704 + let results = glob(a:lead . a:pattern, 0, 1) + else + let results = split(glob(a:lead . a:pattern), "\n") + endif + call map(results, 'v:val !~# "/$" && isdirectory(v:val) ? v:val."/" : v:val') + call map(results, 'v:val[ strlen(a:lead) : -1 ]') + return results +endfunction + function! fugitive#PathComplete(base, ...) abort - let tree = FugitiveWorkTree(a:0 == 1 ? a:1 : get(b:, 'git_dir', '')) . '/' - let strip = '^:\=/' + let dir = a:0 == 1 ? a:1 : get(b:, 'git_dir', '') + let tree = FugitiveTreeForGitDir(dir) . '/' + let strip = '^:\=/\%(\./\)\=' let base = substitute(a:base, strip, '', '') - let matches = split(glob(tree . s:gsub(base, '/', '*&').'*'), "\n") - call map(matches, 's:shellslash(v:val)') - call map(matches, 'v:val !~# "/$" && isdirectory(v:val) ? v:val."/" : v:val') - call map(matches, 'matchstr(a:base, strip) . v:val[ strlen(tree) : -1 ]') - call map(matches, 's:fnameescape(v:val)') + if base =~# '^\.git/' + let pattern = s:gsub(base[5:-1], '/', '*&').'*' + let matches = s:GlobComplete(dir . '/', pattern) + let cdir = fugitive#CommonDir(dir) + if len(cdir) && s:cpath(dir) !=# s:cpath(cdir) + call extend(matches, s:GlobComplete(cdir . '/', pattern)) + endif + call s:Uniq(matches) + call map(matches, "'.git/' . v:val") + elseif len(tree) > 1 + let matches = s:GlobComplete(tree, s:gsub(base, '/', '*&').'*') + else + let matches = [] + endif + call map(matches, 's:fnameescape(s:Slash(matchstr(a:base, strip) . v:val))') return matches endfunction function! fugitive#Complete(base, ...) abort let dir = a:0 == 1 ? a:1 : get(b:, 'git_dir', '') - let tree = FugitiveWorkTree(a:0 == 1 ? a:1 : get(b:, 'git_dir', '')) . '/' + let tree = s:Tree(dir) . '/' if a:base =~# '^\.\=/' || a:base !~# ':' let results = [] - if a:base !~# '^\.\=/' - let heads = ["HEAD","ORIG_HEAD","FETCH_HEAD","MERGE_HEAD"] + if a:base =~# '^refs/' + let results += map(s:GlobComplete(fugitive#CommonDir(dir) . '/', a:base . '*'), 's:Slash(v:val)') + elseif a:base !~# '^\.\=/' + let heads = ['HEAD', 'ORIG_HEAD', 'FETCH_HEAD', 'MERGE_HEAD', 'refs/'] let heads += sort(split(s:TreeChomp(["rev-parse","--symbolic","--branches","--tags","--remotes"], dir),"\n")) - if filereadable(dir . '/refs/stash') + if filereadable(fugitive#CommonDir(dir) . '/refs/stash') let heads += ["stash"] let heads += sort(split(s:TreeChomp(["stash","list","--pretty=format:%gd"], dir),"\n")) endif @@ -912,7 +995,7 @@ function! fugitive#Complete(base, ...) abort let results += heads endif call map(results, 's:fnameescape(v:val)') - if !empty(s:Tree(dir)) + if !empty(tree) let results += fugitive#PathComplete(a:base, dir) endif return results @@ -964,7 +1047,7 @@ function! s:ReplaceCmd(cmd) abort endfunction function! fugitive#BufReadStatus() abort - let amatch = s:shellslash(expand('%:p')) + let amatch = s:Slash(expand('%:p')) if !exists('b:fugitive_display_format') let b:fugitive_display_format = filereadable(expand('%').'.lock') endif @@ -1279,6 +1362,7 @@ function! s:Git(bang, mods, args) abort if has('win32') let after = '|call fugitive#ReloadStatus()' . after endif + let exec = escape(git . ' ' . s:ShellExpand(args), '!#%') if exists(':terminal') && has('nvim') && !get(g:, 'fugitive_force_bang_command') if len(@%) -tabedit % @@ -1286,9 +1370,9 @@ function! s:Git(bang, mods, args) abort -tabnew endif execute 'lcd' fnameescape(tree) - return 'exe ' .string('terminal ' . git . ' ' . args) . after + return 'exe ' . string('terminal ' . exec) . after else - let cmd = 'exe ' . string('!' . git . ' ' . args) + let cmd = 'exe ' . string('!' . exec) if s:cpath(tree) !=# s:cpath(getcwd()) let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd' : 'cd' let cmd = 'try|' . cd . ' ' . tree . '|' . cmd . '|finally|' . cd . ' ' . s:fnameescape(getcwd()) . '|endtry' @@ -1335,12 +1419,12 @@ endfunction function! s:DirComplete(A, L, P) abort let base = s:sub(a:A,'^/','') let matches = split(glob(s:Tree() . '/' . s:gsub(base,'/','*&').'*/'),"\n") - call map(matches,'s:shellslash(v:val[ strlen(s:Tree())+(a:A !~ "^/") : -1 ])') + call map(matches,'s:Slash(v:val[ strlen(s:Tree())+(a:A !~ "^/") : -1 ])') return matches endfunction -call s:command("-bar -bang -nargs=? -complete=customlist,s:DirComplete Gcd :exe 'cd' s:fnameescape((empty(s:Tree()) ? b:git_dir : s:Tree()) . '/' . ") -call s:command("-bar -bang -nargs=? -complete=customlist,s:DirComplete Glcd :exe 'lcd' s:fnameescape((empty(s:Tree()) ? b:git_dir : s:Tree()) . '/' . ") +call s:command("-bar -bang -nargs=? -complete=customlist,s:DirComplete Gcd :exe 'cd' s:fnameescape((empty(s:Tree()) ? b:git_dir : s:Tree()) . '/' . )") +call s:command("-bar -bang -nargs=? -complete=customlist,s:DirComplete Glcd :exe 'lcd' s:fnameescape((empty(s:Tree()) ? b:git_dir : s:Tree()) . '/' . )") " Section: Gstatus @@ -1662,9 +1746,10 @@ function! s:Commit(mods, args, ...) abort else let command = 'env GIT_EDITOR=false ' endif - let command .= s:UserCommand() . ' commit ' . a:args + let args = s:ShellExpand(a:args) + let command .= s:UserCommand() . ' commit ' . args if &shell =~# 'csh' - noautocmd silent execute '!('.command.' > '.outfile.') >& '.errorfile + noautocmd silent execute '!('.escape(command, '!#%').' > '.outfile.') >& '.errorfile elseif a:args =~# '\%(^\| \)-\%(-interactive\|p\|-patch\)\>' noautocmd execute '!'.command.' 2> '.errorfile else @@ -1689,17 +1774,10 @@ function! s:Commit(mods, args, ...) abort let errors = readfile(errorfile) let error = get(errors,-2,get(errors,-1,'!')) if error =~# 'false''\=\.$' - let args = a:args let args = s:gsub(args,'%(%(^| )-- )@' @@ -1904,8 +1982,8 @@ endfunction call s:command("-bang -nargs=? -complete=customlist,s:GrepComplete Ggrep :execute s:Grep('grep',0,)") call s:command("-bang -nargs=? -complete=customlist,s:GrepComplete Glgrep :execute s:Grep('lgrep',0,)") -call s:command("-bar -bang -nargs=* -range=0 -complete=customlist,s:GrepComplete Glog :call s:Log('grep',0,,,)") -call s:command("-bar -bang -nargs=* -range=0 -complete=customlist,s:GrepComplete Gllog :call s:Log('lgrep',0,,,)") +call s:command("-bar -bang -nargs=* -range=-1 -complete=customlist,s:GrepComplete Glog :call s:Log('grep',0,,,)") +call s:command("-bar -bang -nargs=* -range=-1 -complete=customlist,s:GrepComplete Gllog :call s:Log('lgrep',0,,,)") function! s:Grep(cmd,bang,arg) abort let grepprg = &grepprg @@ -1916,7 +1994,7 @@ function! s:Grep(cmd,bang,arg) abort execute cd s:fnameescape(s:Tree()) let &grepprg = s:UserCommand() . ' --no-pager grep -n --no-color' let &grepformat = '%f:%l:%m,%m %f match%ts,%f' - exe a:cmd.'! '.escape(matchstr(a:arg,'\v\C.{-}%($|[''" ]\@=\|)@='),'|') + exe a:cmd.'! '.escape(s:ShellExpand(matchstr(a:arg, '\v\C.{-}%($|[''" ]\@=\|)@=')), '|#%') let list = a:cmd =~# '^l' ? getloclist(0) : getqflist() for entry in list if bufname(entry.bufnr) =~ ':' @@ -1947,37 +2025,40 @@ function! s:Grep(cmd,bang,arg) abort endfunction function! s:Log(cmd, bang, line1, line2, ...) abort + let args = ' ' . join(a:000, ' ') + let before = substitute(args, ' --\S\@!.*', '', '') + let after = strpart(args, len(before)) let path = s:Relative('/') - if path =~# '^/\.git\%(/\|$\)' || index(a:000,'--') != -1 + if path =~# '^/\.git\%(/\|$\)' || len(after) let path = '' endif - let cmd = ['--no-pager', 'log', '--no-color'] - let cmd += ['--pretty=format:fugitive://'.b:git_dir.'//%H'.path.'::'.g:fugitive_summary_format] - if empty(filter(a:000[0 : index(a:000,'--')],'v:val !~# "^-"')) - let commit = s:DirCommitFile(@%)[1] - if len(commit) > 2 - let cmd += [commit] - elseif s:Relative('') =~# '^\.git/refs/\|^\.git/.*HEAD$' - let cmd += [s:Relative('')[5:-1]] - endif - end - let cmd += map(copy(a:000),'s:sub(v:val,"^\\%(%(:\\w)*)","\\=fnamemodify(s:Relative(''),submatch(1))")') - if path =~# '/.' - if a:line2 - let cmd += ['-L', a:line1 . ',' . a:line2 . ':' . path[1:-1]] - else - let cmd += ['--', path[1:-1]] + let relative = s:Relative('') + if before !~# '\s[^[:space:]-]' + let commit = matchstr(s:DirCommitFile(@%)[1], '^\x\x\+$') + if len(commit) + let before .= ' ' . commit + elseif relative =~# '^\.git/refs/\|^\.git/.*HEAD$' + let before .= ' ' . relative[5:-1] endif endif + if relative =~# '^\.git\%(/\|$\)' + let relative = '' + endif + if len(relative) && a:line2 > 0 + let before .= ' -L ' . s:shellesc(a:line1 . ',' . a:line2 . ':' . relative) + elseif len(relative) && (empty(after) || a:line2 == 0) + let after = (len(after) > 3 ? after : ' -- ') . relative + endif let grepformat = &grepformat let grepprg = &grepprg let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd' : 'cd' let dir = getcwd() try execute cd s:fnameescape(s:Tree()) - let &grepprg = escape(s:UserCommand() . join(map(cmd, '" ".s:shellesc(v:val)'), ''), '%#') + let &grepprg = escape(s:UserCommand() . ' --no-pager log --no-color ' . + \ s:shellesc('--pretty=format:fugitive://'.b:git_dir.'//%H'.path.'::'.g:fugitive_summary_format), '%#') let &grepformat = '%Cdiff %.%#,%C--- %.%#,%C+++ %.%#,%Z@@ -%\d%\+\,%\d%\+ +%l\,%\d%\+ @@,%-G-%.%#,%-G+%.%#,%-G %.%#,%A%f::%m,%-G%.%#' - exe a:cmd . (a:bang ? '!' : '') + exe a:cmd . (a:bang ? '! ' : ' ') . s:ShellExpand(before . after) finally let &grepformat = grepformat let &grepprg = grepprg @@ -1992,11 +2073,7 @@ function! s:UsableWin(nr) abort \ index(['nofile','help','quickfix'], getbufvar(winbufnr(a:nr), '&buftype')) < 0 endfunction -function! s:Expand(rev) abort - return fugitive#buffer().expand(a:rev) -endfunction - -function! s:EditParse(args) abort +function! s:EditParse(args, dir) abort let pre = [] let args = copy(a:args) while !empty(args) && args[0] =~# '^+' @@ -2006,15 +2083,16 @@ function! s:EditParse(args) abort let file = join(args) elseif empty(expand('%')) let file = ':' - elseif empty(s:DirCommitFile(@%)[1]) && s:Relative('./') !~# '^\./\.git\>' - let file = s:Relative(':0:') + elseif empty(s:DirCommitFile(@%)[1]) && fugitive#Path(@%, './', a:dir) !~# '^\./\.git\>' + let file = fugitive#Path(@%, ':0:', a:dir) else - let file = s:Relative('./') + let file = fugitive#Path(@%, './', a:dir) endif - return [s:Expand(file), join(pre)] + return [s:Expand(file, a:dir), join(pre)] endfunction function! s:Edit(cmd, bang, mods, args, ...) abort + let dir = b:git_dir let mods = a:mods ==# '' ? '' : a:mods if &previewwindow && get(b:,'fugitive_type', '') ==# 'index' && a:cmd ==# 'edit' let winnrs = filter([winnr('#')] + range(1, winnr('$')), 's:UsableWin(v:val)') @@ -2060,9 +2138,9 @@ function! s:Edit(cmd, bang, mods, args, ...) abort return echo endif - let [file, pre] = s:EditParse(a:000) + let [file, pre] = s:EditParse(a:000, dir) try - let file = s:Generate(file) + let file = s:Generate(file, dir) catch /^fugitive:/ return 'echoerr v:errmsg' endtry @@ -2084,13 +2162,13 @@ function! s:Read(count, line1, line2, range, bang, mods, args, ...) abort let delete = '' endif if a:bang - let args = s:gsub(a:args, '\\@' - return 'write'.(a:force ? '! ' : ' ').s:fnameescape(s:Generate(s:Expand(path))) + return 'write'.(a:force ? '! ' : ' ').s:fnameescape(s:Generate(path)) endif - let always_permitted = (s:Relative('') ==# path && s:DirCommitFile(@%)[1] =~# '^0\=$') + let always_permitted = ((s:Relative() ==# path || s:Relative('') ==# path) && s:DirCommitFile(@%)[1] =~# '^0\=$') if !always_permitted && !a:force && (len(s:TreeChomp('diff','--name-status','HEAD','--',path)) || len(s:TreeChomp('ls-files','--others','--',path))) let v:errmsg = 'fugitive: file has uncommitted changes (use ! to override)' return 'echoerr v:errmsg' @@ -2908,15 +2986,19 @@ function! s:Browse(bang,line1,count,...) abort let rev = '' endif if rev ==# '' - let expanded = s:buffer().rev() - elseif rev ==# ':' + let rev = s:DirRev(@%)[1] + endif + if rev =~# '^:\=$' let expanded = s:Relative('/') else let expanded = s:Expand(rev) endif - if filereadable(b:git_dir . '/refs/tags/' . expanded) - let expanded = '.git/refs/tags/' . expanded - endif + let cdir = fugitive#CommonDir(b:git_dir) + for dir in ['tags/', 'heads/', 'remotes/'] + if expanded !~# '^[./]' && filereadable(cdir . '/refs/' . dir . expanded) + let expanded = '/.git/refs/' . dir . expanded + endif + endfor let full = s:Generate(expanded) let commit = '' if full =~? '^fugitive:' @@ -2993,17 +3075,42 @@ function! s:Browse(bang,line1,count,...) abort endif endif + let line1 = a:count > 0 ? a:line1 : 0 + let line2 = a:count > 0 ? a:count : 0 if empty(commit) && path !~# '^\.git/' if a:line1 && !a:count && !empty(merge) let commit = merge else - let commit = readfile(b:git_dir . '/HEAD', '', 1)[0] - let i = 0 - while commit =~# '^ref: ' && i < 10 - let commit = readfile(b:git_dir . '/' . commit[5:-1], '', 1)[0] - let i -= 1 - endwhile + let commit = '' + if len(merge) + let remotehead = cdir . '/refs/remotes/' . remote . '/' . merge + let commit = filereadable(remotehead) ? get(readfile(remotehead), 0, '') : '' + if a:count && !a:0 && commit =~# '^\x\{40\}$' + let blame_list = s:tempname() + call writefile([commit, ''], blame_list, 'b') + let blame_in = s:tempname() + silent exe '%write' blame_in + let blame = split(s:TreeChomp('blame', '--contents', blame_in, '-L', a:line1.','.a:count, '-S', blame_list, '-s', '--show-number', '--', path), "\n") + if !v:shell_error + let blame_regex = '^\^\x\+\s\+\zs\d\+\ze\s' + if get(blame, 0) =~# blame_regex && get(blame, -1) =~# blame_regex + let line1 = +matchstr(blame[0], blame_regex) + let line2 = +matchstr(blame[-1], blame_regex) + else + call s:throw("Can't browse to uncommitted change") + endif + endif + endif + endif endif + if empty(commit) + let commit = readfile(b:git_dir . '/HEAD', '', 1)[0] + endif + let i = 0 + while commit =~# '^ref: ' && i < 10 + let commit = readfile(cdir . '/' . commit[5:-1], '', 1)[0] + let i -= 1 + endwhile endif if empty(remote) @@ -3033,8 +3140,8 @@ function! s:Browse(bang,line1,count,...) abort \ 'commit': commit, \ 'path': path, \ 'type': type, - \ 'line1': a:count > 0 ? a:line1 : 0, - \ 'line2': a:count > 0 ? a:count : 0} + \ 'line1': line1, + \ 'line2': line2} for Handler in get(g:, 'fugitive_browse_handlers', []) let url = call(Handler, [copy(opts)]) @@ -3095,7 +3202,7 @@ function! s:ContainingCommit() abort endfunction function! s:NavigateUp(count) abort - let rev = s:buffer().rev() + let rev = substitute(s:DirRev(@%)[1], '^$', ':', 'g') let c = a:count while c if rev =~# ':.*/.' @@ -3235,7 +3342,7 @@ function! s:cfile() abort let type = matchstr(getline(line('.')+1),'type \zs.*') elseif getline('.') =~# '^\l\{3,8\} '.myhash.'$' - let ref = s:buffer().rev() + let ref = s:DirRev(@%)[1] elseif getline('.') =~# '^\l\{3,8\} \x\{40\}\>' let ref = matchstr(getline('.'),'\x\{40\}') diff --git a/sources_non_forked/vim-fugitive/doc/fugitive.txt b/sources_non_forked/vim-fugitive/doc/fugitive.txt index 8ab30b60..528cf1ac 100644 --- a/sources_non_forked/vim-fugitive/doc/fugitive.txt +++ b/sources_non_forked/vim-fugitive/doc/fugitive.txt @@ -124,19 +124,19 @@ that are part of Git repositories). |quickfix| list. *fugitive-:Gedit* *fugitive-:Ge* -:Gedit [revision] |:edit| a |fugitive-revision|. +:Gedit [object] |:edit| a |fugitive-object|. *fugitive-:Gsplit* -:Gsplit [revision] |:split| a |fugitive-revision|. +:Gsplit [object] |:split| a |fugitive-object|. *fugitive-:Gvsplit* -:Gvsplit [revision] |:vsplit| a |fugitive-revision|. +:Gvsplit [object] |:vsplit| a |fugitive-object|. *fugitive-:Gtabedit* -:Gtabedit [revision] |:tabedit| a |fugitive-revision|. +:Gtabedit [object] |:tabedit| a |fugitive-object|. *fugitive-:Gpedit* -:Gpedit [revision] |:pedit| a |fugitive-revision|. +:Gpedit [object] |:pedit| a |fugitive-object|. :Gsplit! [args] *fugitive-:Gsplit!* *fugitive-:Gvsplit!* :Gvsplit! [args] *fugitive-:Gtabedit!* *fugitive-:Gpedit!* @@ -144,13 +144,12 @@ that are part of Git repositories). :Gpedit! [args] split, tab, or preview window. *fugitive-:Gread* -:Gread [revision] Empty the buffer and |:read| a |fugitive-revision|. +:Gread [object] Empty the buffer and |:read| a |fugitive-object|. When the argument is omitted, this is similar to git-checkout on a work tree file or git-add on a stage file, but without writing anything to disk. -:{range}Gread [revision] - |:read| in a |fugitive-revision| after {range}. +:{range}Gread [object] |:read| in a |fugitive-object| after {range}. *fugitive-:Gread!* :Gread! [args] Empty the buffer and |:read| the output of a Git @@ -179,23 +178,24 @@ that are part of Git repositories). succeeded. *fugitive-:Gdiff* -:Gdiff [revision] Perform a |vimdiff| against the current file in the - given revision. With no argument, the version in the - index is used (which means a three-way diff during a - merge conflict, making it a git-mergetool - alternative). The newer of the two files is placed - to the right or bottom, depending on 'diffopt' and - the width of the window relative to 'textwidth'. Use - |do| and |dp| and write to the index file to simulate - "git add --patch". For the three-way diff, there is - also d2o and d3o pulling the hunk to the middle from - the left or the right window, respectively. +:Gdiff [object] Perform a |vimdiff| against the given file, or if a + commit is given, the current file in that commit. + With no argument, the version in the index is used + (which means a three-way diff during a merge conflict, + making it a git-mergetool alternative). The newer of + the two files is placed to the right or bottom, + depending on 'diffopt', and the width of the window + relative to 'textwidth'. Use |do| and |dp| and write + to the index file to simulate "git add --patch". For + the three-way diff, there is also d2o and d3o pulling + the hunk to the middle from the left or the right + window, respectively. *fugitive-:Gsdiff* -:Gsdiff [revision] Like |:Gdiff|, but always split horizontally. +:Gsdiff [object] Like |:Gdiff|, but always split horizontally. *fugitive-:Gvdiff* -:Gvdiff [revision] Like |:Gdiff|, but always split vertically. +:Gvdiff [object] Like |:Gdiff|, but always split vertically. *fugitive-:Gmove* :Gmove {destination} Wrapper around git-mv that renames the buffer @@ -246,18 +246,17 @@ that are part of Git repositories). supported by installing rhubarb.vim, available at . -:Gbrowse {revision} Like :Gbrowse, but for a given |fugitive-revision|. A - useful value here is -, which ties the URL to the - latest commit rather than a volatile branch. +:Gbrowse {object} Like :Gbrowse, but for a given |fugitive-object|. :Gbrowse [...]@{remote} Force using the given remote rather than the remote for the current branch. The remote is used to - determine which GitHub repository to link to. + determine which upstream repository to link to. :{range}Gbrowse [args] Appends an anchor to the URL that emphasizes the - selected lines. You almost certainly want to give a - "-" argument in this case to force the URL to include - an exact revision. + selected lines. This also forces the URL to include a + commit rather than a branch name so it remains valid + if the file changes. You can give a range of "0" to + force this behavior without including an anchor. :[range]Gbrowse! [args] Like :Gbrowse, but put the URL on the clipboard rather than opening it. @@ -268,26 +267,29 @@ These maps are available everywhere. *fugitive-c_CTRL-R_CTRL-G* On the command line, recall the path to the current - object (that is, a representation of the object - recognized by |:Gedit|). + |fugitive-object| (that is, a representation of the + object recognized by |:Gedit|). *fugitive-y_CTRL-G* -["x]y Yank the commit SHA and path to the current object. +["x]y Yank the commit SHA and path to the current + |fugitive-object|. -These maps are available in Git objects. +These maps are available in committed Git objects. *fugitive-* - Jump to the revision under the cursor. + Jump to the |fugitive-object| under the cursor. *fugitive-o* -o Jump to the revision under the cursor in a new split. +o Jump to the |fugitive-object| under the cursor in a + new split. *fugitive-S* -S Jump to the revision under the cursor in a new - vertical split. +S Jump to the |fugitive-object| under the cursor in a + new vertical split. *fugitive-O* -O Jump to the revision under the cursor in a new tab. +O Jump to the |fugitive-object| under the cursor in a + new tab. *fugitive--* - Go to the tree containing the current tree or blob. @@ -303,21 +305,22 @@ P Go to the current file in the [count]th parent. C Go to the commit containing the current file. *fugitive-.* -. Start a |:| command line with the current revision - prepopulated at the end of the line. +. Start a |:| command line with the current + |fugitive-object| prepopulated at the end of the line. *fugitive-a* a Show the current tag, commit, or tree in an alternate format. -SPECIFYING REVISIONS *fugitive-revision* +SPECIFYING OBJECTS *fugitive-object* *fugitive-revision* -Fugitive revisions are similar to Git revisions as defined in the "SPECIFYING -REVISIONS" section in the git-rev-parse man page. For commands that accept an -optional revision, the default is the file in the index for work tree files -and the work tree file for everything else. Example revisions follow. +Fugitive objects are either work tree files or Git revisions as defined in the +"SPECIFYING REVISIONS" section in the git-rev-parse man page, with a few +convenience notations thrown in for good measure. For commands that accept an +optional object, the default is the file in the index for work tree files and +the work tree file for everything else. Example objects follow. -Revision Meaning ~ +Object Meaning ~ HEAD .git/HEAD refs/heads/x .git/refs/heads/x @ The commit referenced by @ aka HEAD @@ -329,8 +332,8 @@ Makefile The file named Makefile in the work tree :Makefile The file named Makefile in the index (writable) @:% The current file in HEAD - The current file in HEAD -^ The current file in the previous commit -~3 The current file 3 commits ago +-^ The current file in the previous commit +-~3 The current file 3 commits ago : .git/index (Same as |:Gstatus|) :% The current file in the index :1:% The current file's common ancestor during a conflict diff --git a/sources_non_forked/vim-fugitive/plugin/fugitive.vim b/sources_non_forked/vim-fugitive/plugin/fugitive.vim index b0e1f7e6..1b183931 100644 --- a/sources_non_forked/vim-fugitive/plugin/fugitive.vim +++ b/sources_non_forked/vim-fugitive/plugin/fugitive.vim @@ -8,65 +8,28 @@ if exists('g:loaded_fugitive') endif let g:loaded_fugitive = 1 -function! s:shellslash(path) abort - if &shell =~? 'cmd' || exists('+shellslash') && !&shellslash - return tr(a:path, '\', '/') - else - return a:path - endif -endfunction - function! FugitiveGitDir(...) abort if !a:0 || a:1 ==# -1 return get(b:, 'git_dir', '') elseif type(a:1) == type(0) return getbufvar(a:1, 'git_dir') elseif type(a:1) == type('') - return substitute(s:shellslash(a:1), '/$', '', '') + return substitute(s:Slash(a:1), '/$', '', '') else return '' endif endfunction -function! FugitiveIsGitDir(path) abort - let path = substitute(a:path, '[\/]$', '', '') . '/' - return getfsize(path.'HEAD') > 10 && ( - \ isdirectory(path.'objects') && isdirectory(path.'refs') || - \ getftype(path.'commondir') ==# 'file') +function! FugitiveCommonDir(...) abort + let dir = FugitiveGitDir(a:0 ? a:1 : -1) + if empty(dir) + return '' + endif + return fugitive#CommonDir(dir) endfunction -let s:worktree_for_dir = {} -let s:dir_for_worktree = {} function! FugitiveWorkTree(...) abort - let dir = substitute(s:shellslash(a:0 ? a:1 : get(b:, 'git_dir', '')), '/$', '', '') - if dir =~# '/\.git$' - return len(dir) ==# 5 ? '/' : dir[0:-6] - endif - if !has_key(s:worktree_for_dir, dir) - let s:worktree_for_dir[dir] = '' - let config_file = dir . '/config' - if filereadable(config_file) - let config = readfile(config_file,'',10) - call filter(config,'v:val =~# "^\\s*worktree *="') - if len(config) == 1 - let worktree = matchstr(config[0], '= *\zs.*') - endif - elseif filereadable(dir . '/gitdir') - let worktree = fnamemodify(readfile(dir . '/gitdir')[0], ':h') - if worktree ==# '.' - unlet! worktree - endif - endif - if exists('worktree') - let s:worktree_for_dir[dir] = worktree - let s:dir_for_worktree[s:worktree_for_dir[dir]] = dir - endif - endif - if s:worktree_for_dir[dir] =~# '^\.' - return simplify(dir . '/' . s:worktree_for_dir[dir]) - else - return s:worktree_for_dir[dir] - endif + return FugitiveTreeForGitDir(FugitiveGitDir(a:0 ? a:1 : -1)) endfunction function! FugitiveReal(...) abort @@ -89,7 +52,7 @@ function! FugitivePath(...) abort endfunction function! FugitiveGenerate(...) abort - if a:0 && s:shellslash(a:0) =~# '^\%(\a\a\+:\)\=\%(a:\)\=/\|^[~$]' + if a:0 && s:Slash(a:1) =~# '^\%(\a\a\+:\)\=\%(a:\)\=/\|^[~$]' return a:1 endif return fugitive#repo(FugitiveGitDir(a:0 > 1 ? a:2 : -1)).translate(a:0 ? a:1 : '', 1) @@ -100,7 +63,7 @@ function! FugitiveRoute(...) abort endfunction function! FugitiveParse(...) abort - let path = s:shellslash(a:0 ? a:1 : @%) + let path = s:Slash(a:0 ? a:1 : @%) let vals = matchlist(path, '\c^fugitive:\%(//\)\=\(.\{-\}\)\%(//\|::\)\(\x\{40\}\|[0-3]\)\(/.*\)\=$') if len(vals) return [(vals[2] =~# '^.$' ? ':' : '') . vals[2] . substitute(vals[3], '^/', ':', ''), vals[1]] @@ -132,12 +95,49 @@ function! FugitiveStatusline(...) abort return fugitive#Statusline() endfunction +function! FugitiveIsGitDir(path) abort + let path = substitute(a:path, '[\/]$', '', '') . '/' + return getfsize(path.'HEAD') > 10 && ( + \ isdirectory(path.'objects') && isdirectory(path.'refs') || + \ getftype(path.'commondir') ==# 'file') +endfunction + +let s:worktree_for_dir = {} +let s:dir_for_worktree = {} function! FugitiveTreeForGitDir(path) abort - return FugitiveWorkTree(a:path) + let dir = a:path + if dir =~# '/\.git$' + return len(dir) ==# 5 ? '/' : dir[0:-6] + endif + if !has_key(s:worktree_for_dir, dir) + let s:worktree_for_dir[dir] = '' + let config_file = dir . '/config' + if filereadable(config_file) + let config = readfile(config_file,'',10) + call filter(config,'v:val =~# "^\\s*worktree *="') + if len(config) == 1 + let worktree = matchstr(config[0], '= *\zs.*') + endif + elseif filereadable(dir . '/gitdir') + let worktree = fnamemodify(readfile(dir . '/gitdir')[0], ':h') + if worktree ==# '.' + unlet! worktree + endif + endif + if exists('worktree') + let s:worktree_for_dir[dir] = worktree + let s:dir_for_worktree[s:worktree_for_dir[dir]] = dir + endif + endif + if s:worktree_for_dir[dir] =~# '^\.' + return simplify(dir . '/' . s:worktree_for_dir[dir]) + else + return s:worktree_for_dir[dir] + endif endfunction function! FugitiveExtractGitDir(path) abort - let path = s:shellslash(a:path) + let path = s:Slash(a:path) if path =~# '^fugitive:' return matchstr(path, '\C^fugitive:\%(//\)\=\zs.\{-\}\ze\%(//\|::\|$\)') elseif isdirectory(path) @@ -147,7 +147,7 @@ function! FugitiveExtractGitDir(path) abort endif let pre = substitute(matchstr(path, '^\a\a\+\ze:'), '^.', '\u&', '') if len(pre) && exists('*' . pre . 'Real') - let path = s:shellslash({pre}Real(path)) + let path = s:Slash({pre}Real(path)) endif let root = resolve(path) if root !=# path @@ -207,6 +207,14 @@ function! FugitiveDetect(path) abort endif endfunction +function! s:Slash(path) abort + if &shell =~? 'cmd' || exists('+shellslash') && !&shellslash + return tr(a:path, '\', '/') + else + return a:path + endif +endfunction + augroup fugitive autocmd! @@ -238,7 +246,7 @@ augroup fugitive autocmd BufReadCmd index{,.lock} \ if FugitiveIsGitDir(expand(':p:h')) | - \ let b:git_dir = s:shellslash(expand(':p:h')) | + \ let b:git_dir = s:Slash(expand(':p:h')) | \ exe fugitive#BufReadStatus() | \ elseif filereadable(expand('')) | \ read | diff --git a/sources_non_forked/vim-gitgutter/README.mkd b/sources_non_forked/vim-gitgutter/README.mkd index baf712dc..d87367a5 100644 --- a/sources_non_forked/vim-gitgutter/README.mkd +++ b/sources_non_forked/vim-gitgutter/README.mkd @@ -212,6 +212,7 @@ You can customise: * The signs' colours and symbols * Line highlights * The base of the diff +* Extra arguments for `git` when running `git diff` * Extra arguments for `git diff` * Key mappings * Whether or not vim-gitgutter is on initially (defaults to on) @@ -297,6 +298,14 @@ let g:gitgutter_diff_base = '' ``` +#### Extra arguments for `git` when running `git diff` + +If you want to pass extra arguments to `git` when running `git diff`, do so like this: + +```viml +let g:gitgutter_git_args = '--git-dir-""' +``` + #### Extra arguments for `git diff` If you want to pass extra arguments to `git diff`, for example to ignore whitespace, do so like this: diff --git a/sources_non_forked/vim-gitgutter/autoload/gitgutter/diff.vim b/sources_non_forked/vim-gitgutter/autoload/gitgutter/diff.vim index b2841326..356a3b00 100644 --- a/sources_non_forked/vim-gitgutter/autoload/gitgutter/diff.vim +++ b/sources_non_forked/vim-gitgutter/autoload/gitgutter/diff.vim @@ -100,7 +100,7 @@ function! gitgutter#diff#run_diff(bufnr, preserve_full_diff) abort call s:write_buffer(a:bufnr, buff_file) " Call git-diff with the temporary files. - let cmd .= g:gitgutter_git_executable.' --git-dir="" --no-pager' + let cmd .= g:gitgutter_git_executable.' --no-pager '.g:gitgutter_git_args if s:c_flag let cmd .= ' -c "diff.autorefreshindex=0"' let cmd .= ' -c "diff.noprefix=false"' diff --git a/sources_non_forked/vim-gitgutter/doc/gitgutter.txt b/sources_non_forked/vim-gitgutter/doc/gitgutter.txt index e9c8f01a..d0732c3c 100644 --- a/sources_non_forked/vim-gitgutter/doc/gitgutter.txt +++ b/sources_non_forked/vim-gitgutter/doc/gitgutter.txt @@ -232,6 +232,7 @@ Most important option:~ Git:~ |g:gitgutter_git_executable| + |g:gitgutter_git_args| |g:gitgutter_diff_args| |g:gitgutter_diff_base| @@ -270,6 +271,15 @@ Default: 'git' This option determines what git binary to use. Set this if git is not on your path. + *g:gitgutter_git_args* +Default: empty + +Use this option to pass any extra arguments to git when running git-diff. +For example: +> + let g:gitgutter_git_args = '--git-dir=""' +< + *g:gitgutter_diff_args* Default: empty diff --git a/sources_non_forked/vim-gitgutter/plugin/gitgutter.vim b/sources_non_forked/vim-gitgutter/plugin/gitgutter.vim index fd9c1310..fa3d6a57 100644 --- a/sources_non_forked/vim-gitgutter/plugin/gitgutter.vim +++ b/sources_non_forked/vim-gitgutter/plugin/gitgutter.vim @@ -45,6 +45,7 @@ else endif call s:set('g:gitgutter_sign_modified_removed', '~_') +call s:set('g:gitgutter_git_args', '') call s:set('g:gitgutter_diff_args', '') call s:set('g:gitgutter_diff_base', '') call s:set('g:gitgutter_map_keys', 1)