Updated plugins
This commit is contained in:
parent
86762cf230
commit
f676f799e7
172 changed files with 3227 additions and 1204 deletions
|
@ -4,17 +4,17 @@
|
|||
call ale#Set('ansible_language_server_executable', 'ansible-language-server')
|
||||
call ale#Set('ansible_language_server_config', {})
|
||||
|
||||
function! ale_linters#ansible#ansible_language_server#Executable(buffer) abort
|
||||
function! ale_linters#ansible#language_server#Executable(buffer) abort
|
||||
return ale#Var(a:buffer, 'ansible_language_server_executable')
|
||||
endfunction
|
||||
|
||||
function! ale_linters#ansible#ansible_language_server#GetCommand(buffer) abort
|
||||
let l:executable = ale_linters#ansible#ansible_language_server#Executable(a:buffer)
|
||||
function! ale_linters#ansible#language_server#GetCommand(buffer) abort
|
||||
let l:executable = ale_linters#ansible#language_server#Executable(a:buffer)
|
||||
|
||||
return ale#Escape(l:executable) . ' --stdio'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#ansible#ansible_language_server#FindProjectRoot(buffer) abort
|
||||
function! ale_linters#ansible#language_server#FindProjectRoot(buffer) abort
|
||||
let l:dir = fnamemodify(
|
||||
\ ale#path#FindNearestFile(a:buffer, 'ansible.cfg'),
|
||||
\ ':h'
|
||||
|
@ -37,10 +37,11 @@ function! ale_linters#ansible#ansible_language_server#FindProjectRoot(buffer) ab
|
|||
endfunction
|
||||
|
||||
call ale#linter#Define('ansible', {
|
||||
\ 'name': 'ansible-language-server',
|
||||
\ 'name': 'language_server',
|
||||
\ 'aliases': ['ansible_language_server', 'ansible-language-server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#ansible#ansible_language_server#Executable'),
|
||||
\ 'command': function('ale_linters#ansible#ansible_language_server#GetCommand'),
|
||||
\ 'project_root': function('ale_linters#ansible#ansible_language_server#FindProjectRoot'),
|
||||
\ 'executable': function('ale_linters#ansible#language_server#Executable'),
|
||||
\ 'command': function('ale_linters#ansible#language_server#GetCommand'),
|
||||
\ 'project_root': function('ale_linters#ansible#language_server#FindProjectRoot'),
|
||||
\ 'lsp_config': {b -> ale#Var(b, 'ansible_language_server_config')}
|
||||
\})
|
38
sources_non_forked/ale/ale_linters/c/clangcheck.vim
Normal file
38
sources_non_forked/ale/ale_linters/c/clangcheck.vim
Normal file
|
@ -0,0 +1,38 @@
|
|||
" Author: gagbo <gagbobada@gmail.com>
|
||||
" : luibo <ng.akhoa98@gmail.com>
|
||||
" : Jorengarenar <jorengarenar@outlook.com>
|
||||
" Description: clang-check linter for C files
|
||||
" modified from cpp/clangcheck.vim to match for C
|
||||
|
||||
call ale#Set('c_clangcheck_executable', 'clang-check')
|
||||
call ale#Set('c_clangcheck_options', '')
|
||||
call ale#Set('c_build_dir', '')
|
||||
|
||||
function! ale_linters#c#clangcheck#GetCommand(buffer) abort
|
||||
let l:user_options = ale#Var(a:buffer, 'c_clangcheck_options')
|
||||
|
||||
" Try to find compilation database to link automatically
|
||||
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
|
||||
|
||||
if empty(l:build_dir)
|
||||
let [l:root, l:json_file] = ale#c#FindCompileCommands(a:buffer)
|
||||
let l:build_dir = ale#path#Dirname(l:json_file)
|
||||
endif
|
||||
|
||||
" 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 '%e -analyze %s'
|
||||
\ . (empty(l:build_dir) ? ' --extra-arg=-Xclang --extra-arg=-analyzer-output=text --extra-arg=-fno-color-diagnostics': '')
|
||||
\ . ale#Pad(l:user_options)
|
||||
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('c', {
|
||||
\ 'name': 'clangcheck',
|
||||
\ 'output_stream': 'stderr',
|
||||
\ 'executable': {b -> ale#Var(b, 'c_clangcheck_executable')},
|
||||
\ 'command': function('ale_linters#c#clangcheck#GetCommand'),
|
||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||
\ 'lint_file': 1,
|
||||
\})
|
31
sources_non_forked/ale/ale_linters/cairo/scarb.vim
Normal file
31
sources_non_forked/ale/ale_linters/cairo/scarb.vim
Normal file
|
@ -0,0 +1,31 @@
|
|||
" Author: 0xhyoga <0xhyoga@gmx.com>,
|
||||
" Description: scarb for cairo files
|
||||
|
||||
function! ale_linters#cairo#scarb#GetScarbExecutable(bufnr) abort
|
||||
if ale#path#FindNearestFile(a:bufnr, 'Scarb.toml') isnot# ''
|
||||
return 'scarb'
|
||||
else
|
||||
" if there is no Scarb.toml file, we don't use scarb even if it exists,
|
||||
" so we return '', because executable('') apparently always fails
|
||||
return ''
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! ale_linters#cairo#scarb#GetCommand(buffer, version) abort
|
||||
return 'scarb build'
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('cairo', {
|
||||
\ 'name': 'scarb',
|
||||
\ 'executable': function('ale_linters#cairo#scarb#GetScarbExecutable'),
|
||||
\ 'command': {buffer -> ale#semver#RunWithVersionCheck(
|
||||
\ buffer,
|
||||
\ ale_linters#cairo#scarb#GetScarbExecutable(buffer),
|
||||
\ '%e --version',
|
||||
\ function('ale_linters#cairo#scarb#GetCommand'),
|
||||
\ )},
|
||||
\ 'callback': 'ale#handlers#cairo#HandleCairoErrors',
|
||||
\ 'output_stream': 'both',
|
||||
\ 'lint_file': 1,
|
||||
\})
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
" Author: Taylor Blau <me@ttaylorr.com>
|
||||
call ale#Set('dafny_dafny_timelimit', 10)
|
||||
|
||||
function! ale_linters#dafny#dafny#Handle(buffer, lines) abort
|
||||
let l:pattern = '\v(.*)\((\d+),(\d+)\): (.*): (.*)'
|
||||
|
@ -31,7 +32,6 @@ function! ale_linters#dafny#dafny#GetCommand(buffer) abort
|
|||
return printf('dafny %%s /compile:0 /timeLimit:%d', ale#Var(a:buffer, 'dafny_dafny_timelimit'))
|
||||
endfunction
|
||||
|
||||
call ale#Set('dafny_dafny_timelimit', 10)
|
||||
call ale#linter#Define('dafny', {
|
||||
\ 'name': 'dafny',
|
||||
\ 'executable': 'dafny',
|
||||
|
|
|
@ -12,7 +12,8 @@ function! ale_linters#elixir#elixir_ls#GetExecutable(buffer) abort
|
|||
endfunction
|
||||
|
||||
call ale#linter#Define('elixir', {
|
||||
\ 'name': 'elixir-ls',
|
||||
\ 'name': 'elixir_ls',
|
||||
\ 'aliases': ['elixir-ls', 'elixirls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#elixir#elixir_ls#GetExecutable'),
|
||||
\ 'command': function('ale_linters#elixir#elixir_ls#GetExecutable'),
|
||||
|
|
19
sources_non_forked/ale/ale_linters/elixir/lexical.vim
Normal file
19
sources_non_forked/ale/ale_linters/elixir/lexical.vim
Normal file
|
@ -0,0 +1,19 @@
|
|||
" Author: Axel Clark <axelclark@pm.me>
|
||||
" Description: Lexical integration (https://github.com/lexical-lsp/lexical)
|
||||
|
||||
call ale#Set('elixir_lexical_release', 'lexical')
|
||||
|
||||
function! ale_linters#elixir#lexical#GetExecutable(buffer) abort
|
||||
let l:dir = ale#path#Simplify(ale#Var(a:buffer, 'elixir_lexical_release'))
|
||||
let l:cmd = has('win32') ? '\start_lexical.bat' : '/start_lexical.sh'
|
||||
|
||||
return l:dir . l:cmd
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('elixir', {
|
||||
\ 'name': 'lexical',
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#elixir#lexical#GetExecutable'),
|
||||
\ 'command': function('ale_linters#elixir#lexical#GetExecutable'),
|
||||
\ 'project_root': function('ale#handlers#elixir#FindMixUmbrellaRoot'),
|
||||
\})
|
|
@ -10,13 +10,13 @@ call ale#Set('elm_ls_elm_format_path', '')
|
|||
call ale#Set('elm_ls_elm_test_path', '')
|
||||
call ale#Set('elm_ls_elm_analyse_trigger', 'change')
|
||||
|
||||
function! elm_ls#GetRootDir(buffer) abort
|
||||
function! ale_linters#elm#ls#GetProjectRoot(buffer) abort
|
||||
let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json')
|
||||
|
||||
return !empty(l:elm_json) ? fnamemodify(l:elm_json, ':p:h') : ''
|
||||
endfunction
|
||||
|
||||
function! elm_ls#GetOptions(buffer) abort
|
||||
function! ale_linters#elm#ls#GetOptions(buffer) abort
|
||||
return {
|
||||
\ 'elmPath': ale#Var(a:buffer, 'elm_ls_elm_path'),
|
||||
\ 'elmFormatPath': ale#Var(a:buffer, 'elm_ls_elm_format_path'),
|
||||
|
@ -26,7 +26,8 @@ function! elm_ls#GetOptions(buffer) abort
|
|||
endfunction
|
||||
|
||||
call ale#linter#Define('elm', {
|
||||
\ 'name': 'elm_ls',
|
||||
\ 'name': 'ls',
|
||||
\ 'aliases': ['elm_ls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#path#FindExecutable(b, 'elm_ls', [
|
||||
\ 'node_modules/.bin/elm-language-server',
|
||||
|
@ -34,7 +35,7 @@ call ale#linter#Define('elm', {
|
|||
\ 'elm-lsp'
|
||||
\ ])},
|
||||
\ 'command': '%e --stdio',
|
||||
\ 'project_root': function('elm_ls#GetRootDir'),
|
||||
\ 'project_root': function('ale_linters#elm#ls#GetProjectRoot'),
|
||||
\ 'language': 'elm',
|
||||
\ 'initialization_options': function('elm_ls#GetOptions')
|
||||
\})
|
|
@ -10,8 +10,8 @@ function! ale_linters#eruby#erb#GetCommand(buffer) abort
|
|||
|
||||
" Rails-flavored eRuby does not comply with the standard as understood by
|
||||
" ERB, so we'll have to do some substitution. This does not reduce the
|
||||
" effectiveness of the linter-the translated code is still evaluated.
|
||||
return 'ruby -r erb -e ' . ale#Escape('puts ERB.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c'
|
||||
" effectiveness of the linter—the translated code is still evaluated.
|
||||
return 'ruby -r erb -e ' . ale#Escape('puts ERB.new($stdin.read.gsub(%{<%=},%{<%}), trim_mode: %{-}).src') . '< %t | ruby -c'
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('eruby', {
|
||||
|
|
|
@ -12,6 +12,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('fortran', {
|
||||
\ 'name': 'language_server',
|
||||
\ 'aliases': ['fortls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#Var(b, 'fortran_language_server_executable')},
|
||||
\ 'command': '%e',
|
||||
|
|
|
@ -6,16 +6,6 @@
|
|||
call ale#Set('go_go_executable', 'go')
|
||||
call ale#Set('go_gobuild_options', '')
|
||||
|
||||
function! ale_linters#go#gobuild#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'go_gobuild_options')
|
||||
|
||||
" Run go test in local directory with relative path
|
||||
return ale#go#EnvString(a:buffer)
|
||||
\ . ale#Var(a:buffer, 'go_go_executable') . ' test'
|
||||
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||
\ . ' -c -o /dev/null ./'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#go#gobuild#GetMatches(lines) abort
|
||||
" Matches patterns like the following:
|
||||
"
|
||||
|
@ -50,7 +40,12 @@ call ale#linter#Define('go', {
|
|||
\ 'aliases': ['go build'],
|
||||
\ 'executable': {b -> ale#Var(b, 'go_go_executable')},
|
||||
\ 'cwd': '%s:h',
|
||||
\ 'command': function('ale_linters#go#gobuild#GetCommand'),
|
||||
\ 'command': {b ->
|
||||
\ ale#go#EnvString(b)
|
||||
\ . ale#Escape(ale#Var(b, 'go_go_executable')) . ' test'
|
||||
\ . ale#Pad(ale#Var(b, 'go_gobuild_options'))
|
||||
\ . ' -c -o /dev/null ./'
|
||||
\ },
|
||||
\ 'output_stream': 'stderr',
|
||||
\ 'callback': 'ale_linters#go#gobuild#Handler',
|
||||
\ 'lint_file': 1,
|
||||
|
|
|
@ -1,28 +1,21 @@
|
|||
" Author: neersighted <bjorn@neersighted.com>
|
||||
" Author: neersighted <bjorn@neersighted.com>, John Eikenberry <jae@zhar.net>
|
||||
" Description: go vet for Go files
|
||||
"
|
||||
" Author: John Eikenberry <jae@zhar.net>
|
||||
" Description: updated to work with go1.10
|
||||
|
||||
call ale#Set('go_go_executable', 'go')
|
||||
call ale#Set('go_govet_options', '')
|
||||
|
||||
function! ale_linters#go#govet#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'go_govet_options')
|
||||
|
||||
return ale#go#EnvString(a:buffer)
|
||||
\ . ale#Var(a:buffer, 'go_go_executable') . ' vet '
|
||||
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||
\ . ' .'
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('go', {
|
||||
\ 'name': 'govet',
|
||||
\ 'aliases': ['go vet'],
|
||||
\ 'output_stream': 'stderr',
|
||||
\ 'executable': {b -> ale#Var(b, 'go_go_executable')},
|
||||
\ 'cwd': '%s:h',
|
||||
\ 'command': function('ale_linters#go#govet#GetCommand'),
|
||||
\ 'command': {b ->
|
||||
\ ale#go#EnvString(b)
|
||||
\ . '%e vet'
|
||||
\ . ale#Pad(ale#Var(b, 'go_govet_options'))
|
||||
\ . ' .'
|
||||
\ },
|
||||
\ 'callback': 'ale#handlers#go#Handler',
|
||||
\ 'lint_file': 1,
|
||||
\})
|
||||
|
|
|
@ -16,12 +16,7 @@ function! ale_linters#handlebars#embertemplatelint#GetCommand(buffer, version) a
|
|||
return '%e --format=json --filename %s'
|
||||
endif
|
||||
|
||||
if ale#semver#GTE(a:version, [1, 6, 0])
|
||||
" Reading from stdin was introduced in ember-template-lint@1.6.0
|
||||
return '%e --json --filename %s'
|
||||
endif
|
||||
|
||||
return '%e --json %t'
|
||||
return '%e --json --filename %s'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#handlebars#embertemplatelint#GetCommandWithVersionCheck(buffer) abort
|
||||
|
|
|
@ -16,8 +16,9 @@ function! ale_linters#haskell#hls#FindRootFile(buffer) abort
|
|||
|
||||
for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h'))
|
||||
for l:root_file in l:serach_root_files
|
||||
if filereadable(l:path . l:root_file)
|
||||
return l:path
|
||||
if filereadable(l:path . '/' . l:root_file)
|
||||
" Add on / so fnamemodify(..., ':h') below keeps the path.
|
||||
return l:path . '/'
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
|
|
@ -48,7 +48,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('html', {
|
||||
\ 'name': 'angular',
|
||||
\ 'aliases': ['angular-language-server'],
|
||||
\ 'aliases': ['angular-language-server', 'angularls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#html#angular#GetExecutable'),
|
||||
\ 'command': function('ale_linters#html#angular#GetCommand'),
|
||||
|
|
|
@ -46,6 +46,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('java', {
|
||||
\ 'name': 'javalsp',
|
||||
\ 'aliases': ['java_language_server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#java#javalsp#Executable'),
|
||||
\ 'command': function('ale_linters#java#javalsp#Command'),
|
||||
|
|
|
@ -17,7 +17,8 @@ function! ale_linters#javascript#flow_ls#FindProjectRoot(buffer) abort
|
|||
endfunction
|
||||
|
||||
call ale#linter#Define('javascript', {
|
||||
\ 'name': 'flow-language-server',
|
||||
\ 'name': 'flow_ls',
|
||||
\ 'aliaes': ['flow-language-server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#path#FindExecutable(b, 'javascript_flow_ls', [
|
||||
\ 'node_modules/.bin/flow',
|
||||
|
|
|
@ -1,6 +1,22 @@
|
|||
" Author: Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||
" Description: VSCode json language server
|
||||
|
||||
call ale#Set('json_vscodejson_executable', '<auto>')
|
||||
|
||||
function! ale_linters#json#vscodejson#GetExecutable(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'json_vscodejson_executable')
|
||||
|
||||
if l:executable is# '<auto>'
|
||||
if ale#engine#IsExecutable(a:buffer, 'vscode-json-languageserver')
|
||||
let l:executable = 'vscode-json-languageserver'
|
||||
else
|
||||
let l:executable = 'vscode-json-language-server'
|
||||
endif
|
||||
endif
|
||||
|
||||
return l:executable
|
||||
endfunction
|
||||
|
||||
function! ale_linters#json#vscodejson#GetProjectRoot(buffer) abort
|
||||
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||
|
||||
|
@ -10,7 +26,7 @@ endfunction
|
|||
call ale#linter#Define('json', {
|
||||
\ 'name': 'vscodejson',
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': 'vscode-json-language-server',
|
||||
\ 'executable': function('ale_linters#json#vscodejson#GetExecutable'),
|
||||
\ 'command': '%e --stdio',
|
||||
\ 'project_root': function('ale_linters#json#vscodejson#GetProjectRoot'),
|
||||
\})
|
||||
|
|
|
@ -13,6 +13,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('julia', {
|
||||
\ 'name': 'languageserver',
|
||||
\ 'aliases': ['julials'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#Var(b, 'julia_executable')},
|
||||
\ 'command': function('ale_linters#julia#languageserver#GetCommand'),
|
||||
|
|
|
@ -21,6 +21,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('kotlin', {
|
||||
\ 'name': 'languageserver',
|
||||
\ 'aliaes': ['kotlin_language_server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#Var(b, 'kotlin_languageserver_executable')},
|
||||
\ 'command': '%e',
|
||||
|
|
|
@ -6,7 +6,7 @@ call ale#Set('lua_language_server_config', {})
|
|||
|
||||
call ale#linter#Define('lua', {
|
||||
\ 'name': 'lua_language_server',
|
||||
\ 'aliases': ['lua-language-server'],
|
||||
\ 'aliases': ['lua-language-server', 'lua_ls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#Var(b, 'lua_language_server_executable')},
|
||||
\ 'command': '%e',
|
||||
|
|
|
@ -4,8 +4,43 @@
|
|||
call ale#Set('lua_luacheck_executable', 'luacheck')
|
||||
call ale#Set('lua_luacheck_options', '')
|
||||
|
||||
function! s:IsInRuntimepath(buffer) abort
|
||||
let l:runtimepath_dirs = split(&runtimepath, ',')
|
||||
|
||||
for l:dir in ale#path#Upwards(expand('#' . a:buffer . ':p:h'))
|
||||
for l:runtime_dir in l:runtimepath_dirs
|
||||
if l:dir is# l:runtime_dir
|
||||
return 1
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
function! ale_linters#lua#luacheck#GetCommand(buffer) abort
|
||||
return '%e' . ale#Pad(ale#Var(a:buffer, 'lua_luacheck_options'))
|
||||
let l:options = ale#Var(a:buffer, 'lua_luacheck_options')
|
||||
|
||||
" Add `--globals vim` by default if the file is in runtimepath.
|
||||
if l:options !~# '--globals'
|
||||
let l:in_runtime = getbufvar(a:buffer, 'ale_in_runtimepath', v:null)
|
||||
|
||||
if l:in_runtime is v:null
|
||||
let l:in_runtime = s:IsInRuntimepath(a:buffer)
|
||||
" Save the result of check this buffer so we only check once.
|
||||
call setbufvar(a:buffer, 'ale_in_runtimepath', l:in_runtime)
|
||||
endif
|
||||
|
||||
if l:in_runtime
|
||||
if !empty(l:options)
|
||||
let l:options .= ' '
|
||||
endif
|
||||
|
||||
let l:options .= '--globals vim'
|
||||
endif
|
||||
endif
|
||||
|
||||
return '%e' . ale#Pad(l:options)
|
||||
\ . ' --formatter plain --codes --filename %s -'
|
||||
endfunction
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('nix', {
|
||||
\ 'name': 'rnix_lsp',
|
||||
\ 'aliases': ['rnix'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': 'rnix-lsp',
|
||||
\ 'command': '%e',
|
||||
|
|
|
@ -6,6 +6,7 @@ call ale#Set('ocaml_ols_use_global', get(g:, 'ale_use_global_executables', 0))
|
|||
|
||||
call ale#linter#Define('ocaml', {
|
||||
\ 'name': 'ols',
|
||||
\ 'aliases': ['ocaml-language-server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale#handlers#ols#GetExecutable'),
|
||||
\ 'command': function('ale#handlers#ols#GetCommand'),
|
||||
|
|
|
@ -7,9 +7,9 @@ let g:ale_php_phpmd_executable = get(g:, 'ale_php_phpmd_executable', 'phpmd')
|
|||
let g:ale_php_phpmd_ruleset = get(g:, 'ale_php_phpmd_ruleset', 'cleancode,codesize,controversial,design,naming,unusedcode')
|
||||
|
||||
function! ale_linters#php#phpmd#GetCommand(buffer) abort
|
||||
return '%e %s text'
|
||||
return '%e %t text'
|
||||
\ . ale#Pad(ale#Var(a:buffer, 'php_phpmd_ruleset'))
|
||||
\ . ' --ignore-violations-on-exit %t'
|
||||
\ . ' --ignore-violations-on-exit'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#php#phpmd#Handle(buffer, lines) abort
|
||||
|
|
|
@ -29,6 +29,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('puppet', {
|
||||
\ 'name': 'languageserver',
|
||||
\ 'aliases': ['puppet_languageserver'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#Var(b, 'puppet_languageserver_executable')},
|
||||
\ 'command': '%e --stdio',
|
||||
|
|
|
@ -41,6 +41,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('purescript', {
|
||||
\ 'name': 'purescript-language-server',
|
||||
\ 'aliases': ['purescriptls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#purescript#ls#GetExecutable'),
|
||||
\ 'command': function('ale_linters#purescript#ls#GetCommand'),
|
||||
|
|
|
@ -30,6 +30,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('python', {
|
||||
\ 'name': 'jedils',
|
||||
\ 'aliases': ['jedi_language_server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#python#jedils#GetExecutable'),
|
||||
\ 'command': function('ale_linters#python#jedils#GetCommand'),
|
||||
|
|
|
@ -46,22 +46,26 @@ function! ale_linters#python#ruff#GetCommand(buffer, version) abort
|
|||
\ : ''
|
||||
|
||||
" NOTE: ruff version `0.0.69` supports liniting input from stdin
|
||||
return ale#Escape(l:executable) . l:exec_args
|
||||
" NOTE: ruff version `0.1.0` deprecates `--format text`
|
||||
return ale#Escape(l:executable) . l:exec_args . ' -q'
|
||||
\ . ale#Pad(ale#Var(a:buffer, 'python_ruff_options'))
|
||||
\ . ' --format text'
|
||||
\ . (ale#semver#GTE(a:version, [0, 0, 69]) ? ' --stdin-filename %s -' : ' %s')
|
||||
\ . (ale#semver#GTE(a:version, [0, 1, 0]) ? ' --output-format json-lines' : ' --format json-lines')
|
||||
\ . (ale#semver#GTE(a:version, [0, 0, 69]) ? ' --stdin-filename %s -' : ' %s')
|
||||
endfunction
|
||||
|
||||
function! ale_linters#python#ruff#Handle(buffer, lines) abort
|
||||
"Example: path/to/file.py:10:5: E999 SyntaxError: unexpected indent
|
||||
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+)?:? (.+)$'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
for l:line in a:lines
|
||||
let l:item = json_decode(l:line)
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'text': l:match[3],
|
||||
\ 'lnum': l:item.location.row,
|
||||
\ 'col': l:item.location.column,
|
||||
\ 'end_lnum': l:item.end_location.row,
|
||||
\ 'end_col': l:item.end_location.column - 1,
|
||||
\ 'code': l:item.code,
|
||||
\ 'text': l:item.message,
|
||||
\ 'type': l:item.code =~? '\vE\d+' ? 'E' : 'W',
|
||||
\})
|
||||
endfor
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('r', {
|
||||
\ 'name': 'languageserver',
|
||||
\ 'aliases': ['r_language_server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'lsp_config': {b -> ale#Var(b, 'r_languageserver_config')},
|
||||
\ 'executable': 'Rscript',
|
||||
|
|
|
@ -15,6 +15,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('reason', {
|
||||
\ 'name': 'reason-language-server',
|
||||
\ 'aliases': ['reason_ls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {buffer -> ale#Var(buffer, 'reason_ls_executable')},
|
||||
\ 'command': '%e',
|
||||
|
|
|
@ -6,6 +6,7 @@ call ale#Set('reason_ols_use_global', get(g:, 'ale_use_global_executables', 0))
|
|||
|
||||
call ale#linter#Define('reason', {
|
||||
\ 'name': 'ols',
|
||||
\ 'aliases': ['ocaml-language-server'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale#handlers#ols#GetExecutable'),
|
||||
\ 'command': function('ale#handlers#ols#GetCommand'),
|
||||
|
|
55
sources_non_forked/ale/ale_linters/ruby/packwerk.vim
Normal file
55
sources_non_forked/ale/ale_linters/ruby/packwerk.vim
Normal file
|
@ -0,0 +1,55 @@
|
|||
" Author: ymap - https://github.com/ymap
|
||||
" Description: Packwerk, a static analyzer used to enforce boundaries and modularize Rails applications.
|
||||
|
||||
call ale#Set('ruby_packwerk_executable', 'packwerk')
|
||||
call ale#Set('ruby_packwerk_options', '')
|
||||
|
||||
function! ale_linters#ruby#packwerk#Handle(buffer, lines) abort
|
||||
let l:pattern = '\v^[^:]+:(\d+):(\d+)$'
|
||||
let l:index = 0
|
||||
let l:output = []
|
||||
|
||||
while l:index < len(a:lines) - 1
|
||||
let l:cleaned_line = substitute(a:lines[l:index], '\v\e\[[0-9;]*m', '', 'g')
|
||||
let l:match = matchlist(l:cleaned_line, l:pattern)
|
||||
|
||||
if len(l:match) > 0
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'text': a:lines[l:index + 1],
|
||||
\})
|
||||
endif
|
||||
|
||||
let l:index += 1
|
||||
endwhile
|
||||
|
||||
return l:output
|
||||
endfunction
|
||||
|
||||
function! ale_linters#ruby#packwerk#GetCommand(buffer) abort
|
||||
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
|
||||
|
||||
if l:rails_root is? ''
|
||||
return ''
|
||||
endif
|
||||
|
||||
let l:executable = ale#Var(a:buffer, 'ruby_packwerk_executable')
|
||||
let l:sep = has('win32') ? '\' : '/'
|
||||
let l:abs_path = expand('#' . a:buffer . ':p')
|
||||
let l:rel_path = substitute(l:abs_path, escape(l:rails_root . l:sep, '\'), '', '')
|
||||
|
||||
return ale#ruby#EscapeExecutable(l:executable, 'packwerk')
|
||||
\ . ' check'
|
||||
\ . ale#Pad(ale#Var(a:buffer, 'ruby_packwerk_options'))
|
||||
\ . ' '
|
||||
\ . ale#Escape(rel_path)
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('ruby', {
|
||||
\ 'name': 'packwerk',
|
||||
\ 'executable': {b -> ale#Var(b, 'ruby_packwerk_executable')},
|
||||
\ 'command': function('ale_linters#ruby#packwerk#GetCommand'),
|
||||
\ 'callback': 'ale_linters#ruby#packwerk#Handle',
|
||||
\ 'lint_file': 1,
|
||||
\})
|
|
@ -28,6 +28,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('rust', {
|
||||
\ 'name': 'analyzer',
|
||||
\ 'aliases': ['rust_analyzer'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'initialization_options': {b -> ale#Var(b, 'rust_analyzer_config')},
|
||||
\ 'executable': {b -> ale#Var(b, 'rust_analyzer_executable')},
|
||||
|
|
|
@ -1,11 +1,6 @@
|
|||
" Author: w0rp <devw0rp@gmail.com>
|
||||
" Description: Lints shell files by invoking the shell with -n
|
||||
|
||||
" Backwards compatibility
|
||||
if exists('g:ale_linters_sh_shell_default_shell')
|
||||
let g:ale_sh_shell_default_shell = g:ale_linters_sh_shell_default_shell
|
||||
endif
|
||||
|
||||
" This option can be changed to change the default shell when the shell
|
||||
" cannot be taken from the hashbang line.
|
||||
if !exists('g:ale_sh_shell_default_shell')
|
||||
|
|
|
@ -1,12 +1,83 @@
|
|||
" Authors: Franco Victorio - https://github.com/fvictorio, Henrique Barcelos
|
||||
" https://github.com/hbarcelos
|
||||
" Authors: Franco Victorio <@fvictorio>, Henrique Barcelos <@hbarcelos>
|
||||
" Description: Report errors in Solidity code with solhint
|
||||
|
||||
call ale#Set('solidity_solhint_options', '')
|
||||
call ale#Set('solidity_solhint_executable', 'solhint')
|
||||
call ale#Set('solidity_solhint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
|
||||
function! ale_linters#solidity#solhint#Handle(buffer, lines) abort
|
||||
let l:output = []
|
||||
|
||||
" Matches lines like the following:
|
||||
" contracts/Bounty.sol:14:3: Expected indentation of 4 spaces but found 2 [Error/indent]
|
||||
let l:lint_pattern = '\v^[^:]+:(\d+):(\d+): %(Parse error: )@<!\ze(.*)\s+\[(Error|Warning)\/([^\]]+)\]$'
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:lint_pattern)
|
||||
let l:is_error = l:match[4] is? 'error'
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'text': l:match[3],
|
||||
\ 'code': l:match[5],
|
||||
\ 'type': l:is_error ? 'E' : 'W',
|
||||
\})
|
||||
endfor
|
||||
|
||||
" Matches lines like the following:
|
||||
" contracts/Bounty.sol:203:4: Parse error: no viable alternative at input '_loserStakeMultiplier}' [Error]
|
||||
let l:syntax_pattern = '\v^[^:]+:(\d+):(\d+): Parse error: (.*)\s+\[Error\]$'
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:syntax_pattern)
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'text': l:match[3],
|
||||
\ 'code': 'Parse error',
|
||||
\ 'type': 'E',
|
||||
\})
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
||||
|
||||
let s:executables = [
|
||||
\ 'node_modules/.bin/solhint',
|
||||
\ 'node_modules/solhint/solhint.js',
|
||||
\ 'solhint',
|
||||
\]
|
||||
let s:sep = has('win32') ? '\' : '/'
|
||||
|
||||
" Given a buffer, return an appropriate working directory for solhint.
|
||||
function! ale_linters#solidity#solhint#GetCwd(buffer) abort
|
||||
" If solhint is installed in a directory which contains the buffer, assume
|
||||
" it is the solhint project root. Otherwise, use nearest node_modules.
|
||||
" Note: If node_modules not present yet, can't load local deps anyway.
|
||||
let l:executable = ale#path#FindNearestExecutable(a:buffer, s:executables)
|
||||
|
||||
if !empty(l:executable)
|
||||
let l:nmi = strridx(l:executable, 'node_modules')
|
||||
let l:project_dir = l:executable[0:l:nmi - 2]
|
||||
else
|
||||
let l:modules_dir = ale#path#FindNearestDirectory(a:buffer, 'node_modules')
|
||||
let l:project_dir = !empty(l:modules_dir) ? fnamemodify(l:modules_dir, ':h:h') : ''
|
||||
endif
|
||||
|
||||
return !empty(l:project_dir) ? l:project_dir : ''
|
||||
endfunction
|
||||
|
||||
function! ale_linters#solidity#solhint#GetExecutable(buffer) abort
|
||||
return ale#path#FindExecutable(a:buffer, 'solidity_solhint', s:executables)
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('solidity', {
|
||||
\ 'name': 'solhint',
|
||||
\ 'output_stream': 'both',
|
||||
\ 'executable': function('ale#handlers#solhint#GetExecutable'),
|
||||
\ 'cwd': function('ale#handlers#solhint#GetCwd'),
|
||||
\ 'command': function('ale#handlers#solhint#GetCommand'),
|
||||
\ 'callback': 'ale#handlers#solhint#Handle',
|
||||
\ 'executable': function('ale_linters#solidity#solhint#GetExecutable'),
|
||||
\ 'cwd': function('ale_linters#solidity#solhint#GetCwd'),
|
||||
\ 'command': {b ->
|
||||
\ ale#node#Executable(b, ale_linters#solidity#solhint#GetExecutable(b))
|
||||
\ . ale#Pad(ale#Var(b, 'solidity_solhint_options'))
|
||||
\ . ' --formatter unix %s'
|
||||
\ },
|
||||
\ 'callback': 'ale_linters#solidity#solhint#Handle',
|
||||
\})
|
||||
|
|
|
@ -5,6 +5,7 @@ call ale#Set('sourcekit_lsp_executable', 'sourcekit-lsp')
|
|||
|
||||
call ale#linter#Define('swift', {
|
||||
\ 'name': 'sourcekitlsp',
|
||||
\ 'aliases': ['sourcekit'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#Var(b, 'sourcekit_lsp_executable')},
|
||||
\ 'command': '%e',
|
||||
|
|
|
@ -30,6 +30,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('terraform', {
|
||||
\ 'name': 'terraform_ls',
|
||||
\ 'aliases': ['terraformls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#Var(b, 'terraform_ls_executable')},
|
||||
\ 'command': function('ale_linters#terraform#terraform_ls#GetCommand'),
|
||||
|
|
|
@ -4,17 +4,6 @@
|
|||
call ale#Set('v_v_executable', 'v')
|
||||
call ale#Set('v_v_options', '')
|
||||
|
||||
function! ale_linters#v#v#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'v_v_options')
|
||||
|
||||
" Run v in local directory with relative path
|
||||
let l:command = ale#Var(a:buffer, 'v_v_executable')
|
||||
\ . ale#Pad(l:options)
|
||||
\ . ' .' . ' -o /tmp/vim-ale-v'
|
||||
|
||||
return l:command
|
||||
endfunction
|
||||
|
||||
function! ale_linters#v#v#Handler(buffer, lines) abort
|
||||
let l:dir = expand('#' . a:buffer . ':p:h')
|
||||
let l:output = []
|
||||
|
@ -73,9 +62,11 @@ endfunction
|
|||
|
||||
call ale#linter#Define('v', {
|
||||
\ 'name': 'v',
|
||||
\ 'aliases': [],
|
||||
\ 'executable': {b -> ale#Var(b, 'v_v_executable')},
|
||||
\ 'command': function('ale_linters#v#v#GetCommand'),
|
||||
\ 'command': {b ->
|
||||
\ '%e' . ale#Pad(ale#Var(b, 'v_v_options'))
|
||||
\ . ' . -o /tmp/vim-ale-v'
|
||||
\ },
|
||||
\ 'output_stream': 'stderr',
|
||||
\ 'callback': 'ale_linters#v#v#Handler',
|
||||
\ 'lint_file': 1,
|
||||
|
|
|
@ -12,6 +12,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('vue', {
|
||||
\ 'name': 'vls',
|
||||
\ 'aliases': ['vuels'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': {b -> ale#path#FindExecutable(b, 'vue_vls', [
|
||||
\ 'node_modules/.bin/vls',
|
||||
|
|
|
@ -1,11 +1,47 @@
|
|||
" Author: bretello <bretello@distruzione.org>
|
||||
" Author: Peter Benjamin <petermbenjamin@gmail.com>
|
||||
" Description: Linter for GitHub Workflows
|
||||
|
||||
call ale#Set('yaml_actionlint_executable', 'actionlint')
|
||||
call ale#Set('yaml_actionlint_options', '')
|
||||
|
||||
function! ale_linters#yaml#actionlint#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'yaml_actionlint_options')
|
||||
|
||||
if l:options !~# '-no-color'
|
||||
let l:options .= ale#Pad('-no-color')
|
||||
endif
|
||||
|
||||
if l:options !~# '-oneline'
|
||||
let l:options .= ale#Pad('-oneline')
|
||||
endif
|
||||
|
||||
return '%e' . ale#Pad(l:options)
|
||||
endfunction
|
||||
|
||||
function! ale_linters#yaml#actionlint#Handle(buffer, lines) abort
|
||||
" Matches patterns line the following:
|
||||
".github/workflows/main.yml:19:0: could not parse as YAML: yaml: line 19: mapping values are not allowed in this context [yaml-syntax]
|
||||
let l:pattern = '\v^.*:(\d+):(\d+): (.+) \[(.+)\]$'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
let l:item = {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'text': l:match[3],
|
||||
\ 'code': l:match[4],
|
||||
\ 'type': 'E',
|
||||
\}
|
||||
|
||||
call add(l:output, l:item)
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('yaml', {
|
||||
\ 'name': 'actionlint',
|
||||
\ 'executable': {b -> ale#Var(b, 'yaml_actionlint_executable')},
|
||||
\ 'command': function('ale#handlers#actionlint#GetCommand'),
|
||||
\ 'callback': 'ale#handlers#actionlint#Handle',
|
||||
\ 'command': function('ale_linters#yaml#actionlint#GetCommand'),
|
||||
\ 'callback': 'ale_linters#yaml#actionlint#Handle',
|
||||
\})
|
||||
|
|
|
@ -26,6 +26,7 @@ endfunction
|
|||
|
||||
call ale#linter#Define('yaml', {
|
||||
\ 'name': 'yaml-language-server',
|
||||
\ 'aliases': ['yamlls'],
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'executable': function('ale_linters#yaml#ls#GetExecutable'),
|
||||
\ 'command': function('ale_linters#yaml#ls#GetCommand'),
|
||||
|
|
|
@ -7,9 +7,6 @@ let g:ale_echo_msg_error_str = get(g:, 'ale_echo_msg_error_str', 'Error')
|
|||
let g:ale_echo_msg_info_str = get(g:, 'ale_echo_msg_info_str', 'Info')
|
||||
let g:ale_echo_msg_log_str = get(g:, 'ale_echo_msg_log_str', 'Log')
|
||||
let g:ale_echo_msg_warning_str = get(g:, 'ale_echo_msg_warning_str', 'Warning')
|
||||
" Ignoring linters, for disabling some, or ignoring LSP diagnostics.
|
||||
let g:ale_linters_ignore = get(g:, 'ale_linters_ignore', {})
|
||||
let g:ale_disable_lsp = get(g:, 'ale_disable_lsp', 0)
|
||||
|
||||
" LSP window/showMessage format
|
||||
let g:ale_lsp_show_message_format = get(g:, 'ale_lsp_show_message_format', '%severity%:%linter%: %s')
|
||||
|
@ -100,7 +97,24 @@ function! s:Lint(buffer, should_lint_file, timer_id) abort
|
|||
" Use the filetype from the buffer
|
||||
let l:filetype = getbufvar(a:buffer, '&filetype')
|
||||
let l:linters = ale#linter#Get(l:filetype)
|
||||
let l:linters = ale#linter#RemoveIgnored(a:buffer, l:filetype, l:linters)
|
||||
|
||||
let l:ignore_config = ale#Var(a:buffer, 'linters_ignore')
|
||||
let l:disable_lsp = ale#Var(a:buffer, 'disable_lsp')
|
||||
|
||||
" Load code to ignore linters only if we need to.
|
||||
if (
|
||||
\ !empty(l:ignore_config)
|
||||
\ || l:disable_lsp is 1
|
||||
\ || l:disable_lsp is v:true
|
||||
\ || (l:disable_lsp is# 'auto' && get(g:, 'lspconfig', 0))
|
||||
\)
|
||||
let l:linters = ale#engine#ignore#Exclude(
|
||||
\ l:filetype,
|
||||
\ l:linters,
|
||||
\ l:ignore_config,
|
||||
\ l:disable_lsp,
|
||||
\)
|
||||
endif
|
||||
|
||||
" Tell other sources that they can start checking the buffer now.
|
||||
let g:ale_want_results_buffer = a:buffer
|
||||
|
@ -208,7 +222,7 @@ endfunction
|
|||
" valid for cmd on Windows, or most shells on Unix.
|
||||
function! ale#Env(variable_name, value) abort
|
||||
if has('win32')
|
||||
return 'set ' . a:variable_name . '=' . ale#Escape(a:value) . ' && '
|
||||
return 'set ' . ale#Escape(a:variable_name . '=' . a:value) . ' && '
|
||||
endif
|
||||
|
||||
return a:variable_name . '=' . ale#Escape(a:value) . ' '
|
||||
|
|
|
@ -339,17 +339,7 @@ function! ale#code_action#GetCodeActions(options) abort
|
|||
silent! aunmenu PopUp.Refactor\.\.\.
|
||||
|
||||
" Only display the menu items if there's an LSP server.
|
||||
let l:has_lsp = 0
|
||||
|
||||
for l:linter in ale#linter#Get(&filetype)
|
||||
if !empty(l:linter.lsp)
|
||||
let l:has_lsp = 1
|
||||
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
|
||||
if l:has_lsp
|
||||
if len(ale#lsp_linter#GetEnabled(bufnr(''))) > 0
|
||||
if !empty(expand('<cword>'))
|
||||
silent! anoremenu <silent> PopUp.Rename :ALERename<CR>
|
||||
endif
|
||||
|
|
|
@ -473,15 +473,9 @@ function! ale#codefix#Execute(range, ...) abort
|
|||
endif
|
||||
|
||||
let l:MenuCallback = get(a:000, 0, v:null)
|
||||
let l:lsp_linters = []
|
||||
let l:linters = ale#lsp_linter#GetEnabled(bufnr(''))
|
||||
|
||||
for l:linter in ale#linter#Get(&filetype)
|
||||
if !empty(l:linter.lsp)
|
||||
call add(l:lsp_linters, l:linter)
|
||||
endif
|
||||
endfor
|
||||
|
||||
if empty(l:lsp_linters)
|
||||
if empty(l:linters)
|
||||
if l:MenuCallback is v:null
|
||||
call s:message('No active LSPs')
|
||||
else
|
||||
|
@ -491,7 +485,7 @@ function! ale#codefix#Execute(range, ...) abort
|
|||
return
|
||||
endif
|
||||
|
||||
for l:lsp_linter in l:lsp_linters
|
||||
call s:ExecuteGetCodeFix(l:lsp_linter, a:range, l:MenuCallback)
|
||||
for l:linter in l:linters
|
||||
call s:ExecuteGetCodeFix(l:linter, a:range, l:MenuCallback)
|
||||
endfor
|
||||
endfunction
|
||||
|
|
|
@ -824,6 +824,8 @@ endfunction
|
|||
" the current buffer. 1 will be returned if there's a potential source of
|
||||
" completion data ALE can use, and 0 will be returned otherwise.
|
||||
function! ale#completion#CanProvideCompletions() abort
|
||||
" NOTE: We can report that ALE can provide completions to Deoplete from
|
||||
" here, and we might ignore linters still below.
|
||||
for l:linter in ale#linter#Get(&filetype)
|
||||
if !empty(l:linter.lsp)
|
||||
return 1
|
||||
|
@ -890,11 +892,9 @@ function! ale#completion#GetCompletions(...) abort
|
|||
|
||||
let l:started = 0
|
||||
|
||||
for l:linter in ale#linter#Get(&filetype)
|
||||
if !empty(l:linter.lsp)
|
||||
if ale#lsp_linter#StartLSP(l:buffer, l:linter, l:Callback)
|
||||
let l:started = 1
|
||||
endif
|
||||
for l:linter in ale#lsp_linter#GetEnabled(l:buffer)
|
||||
if ale#lsp_linter#StartLSP(l:buffer, l:linter, l:Callback)
|
||||
let l:started = 1
|
||||
endif
|
||||
endfor
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
" Author: w0rp <devw0rp@gmail.com>
|
||||
" Description: This file implements debugging information for ALE
|
||||
|
||||
let g:ale_info_default_mode = get(g:, 'ale_info_default_mode', 'preview')
|
||||
|
||||
let s:global_variable_list = [
|
||||
\ 'ale_cache_executable_check_failures',
|
||||
\ 'ale_change_sign_column_color',
|
||||
|
@ -18,6 +20,7 @@ let s:global_variable_list = [
|
|||
\ 'ale_fix_on_save',
|
||||
\ 'ale_fixers',
|
||||
\ 'ale_history_enabled',
|
||||
\ 'ale_info_default_mode',
|
||||
\ 'ale_history_log_output',
|
||||
\ 'ale_keep_list_window_open',
|
||||
\ 'ale_lint_delay',
|
||||
|
@ -53,7 +56,6 @@ let s:global_variable_list = [
|
|||
\ 'ale_sign_style_warning',
|
||||
\ 'ale_sign_warning',
|
||||
\ 'ale_sign_highlight_linenrs',
|
||||
\ 'ale_statusline_format',
|
||||
\ 'ale_type_map',
|
||||
\ 'ale_use_neovim_diagnostics_api',
|
||||
\ 'ale_use_global_executables',
|
||||
|
@ -199,11 +201,42 @@ function! s:EchoLSPErrorMessages(all_linter_names) abort
|
|||
endfor
|
||||
endfunction
|
||||
|
||||
function! ale#debugging#Info() abort
|
||||
function! s:GetIgnoredLinters(buffer, enabled_linters) abort
|
||||
let l:filetype = &filetype
|
||||
let l:ignore_config = ale#Var(a:buffer, 'linters_ignore')
|
||||
let l:disable_lsp = ale#Var(a:buffer, 'disable_lsp')
|
||||
|
||||
if (
|
||||
\ !empty(l:ignore_config)
|
||||
\ || l:disable_lsp is 1
|
||||
\ || l:disable_lsp is v:true
|
||||
\ || (l:disable_lsp is# 'auto' && get(g:, 'lspconfig', 0))
|
||||
\)
|
||||
let l:non_ignored = ale#engine#ignore#Exclude(
|
||||
\ l:filetype,
|
||||
\ a:enabled_linters,
|
||||
\ l:ignore_config,
|
||||
\ l:disable_lsp,
|
||||
\)
|
||||
else
|
||||
let l:non_ignored = copy(a:enabled_linters)
|
||||
endif
|
||||
|
||||
call map(l:non_ignored, 'v:val.name')
|
||||
|
||||
return filter(
|
||||
\ copy(a:enabled_linters),
|
||||
\ 'index(l:non_ignored, v:val.name) < 0'
|
||||
\)
|
||||
endfunction
|
||||
|
||||
function! ale#debugging#Info(...) abort
|
||||
let l:options = (a:0 > 0) ? a:1 : {}
|
||||
let l:show_preview_info = get(l:options, 'preview')
|
||||
|
||||
let l:buffer = bufnr('')
|
||||
let l:filetype = &filetype
|
||||
|
||||
" We get the list of enabled linters for free by the above function.
|
||||
let l:enabled_linters = deepcopy(ale#linter#Get(l:filetype))
|
||||
|
||||
" But have to build the list of available linters ourselves.
|
||||
|
@ -227,13 +260,10 @@ function! ale#debugging#Info() abort
|
|||
let l:fixers = uniq(sort(l:fixers[0] + l:fixers[1]))
|
||||
let l:fixers_string = join(map(copy(l:fixers), '"\n " . v:val'), '')
|
||||
|
||||
let l:non_ignored_names = map(
|
||||
\ copy(ale#linter#RemoveIgnored(l:buffer, l:filetype, l:enabled_linters)),
|
||||
\ 'v:val[''name'']',
|
||||
\)
|
||||
let l:ignored_names = filter(
|
||||
\ copy(l:enabled_names),
|
||||
\ 'index(l:non_ignored_names, v:val) < 0'
|
||||
" Get the names of ignored linters.
|
||||
let l:ignored_names = map(
|
||||
\ s:GetIgnoredLinters(l:buffer, l:enabled_linters),
|
||||
\ 'v:val.name'
|
||||
\)
|
||||
|
||||
call s:Echo(' Current Filetype: ' . l:filetype)
|
||||
|
@ -241,13 +271,31 @@ function! ale#debugging#Info() abort
|
|||
call s:EchoLinterAliases(l:all_linters)
|
||||
call s:Echo(' Enabled Linters: ' . string(l:enabled_names))
|
||||
call s:Echo(' Ignored Linters: ' . string(l:ignored_names))
|
||||
call s:Echo(' Suggested Fixers: ' . l:fixers_string)
|
||||
call s:Echo(' Linter Variables:')
|
||||
call s:Echo('')
|
||||
call s:EchoLinterVariables(l:variable_list)
|
||||
call s:Echo(' Suggested Fixers:' . l:fixers_string)
|
||||
" We use this line with only a space to know where to end highlights.
|
||||
call s:Echo(' ')
|
||||
|
||||
" Only show Linter Variables directive if there are any.
|
||||
if !empty(l:variable_list)
|
||||
call s:Echo(' Linter Variables:')
|
||||
|
||||
if l:show_preview_info
|
||||
call s:Echo('" Press Space to read :help for a setting')
|
||||
endif
|
||||
|
||||
call s:EchoLinterVariables(l:variable_list)
|
||||
" We use this line with only a space to know where to end highlights.
|
||||
call s:Echo(' ')
|
||||
endif
|
||||
|
||||
call s:Echo(' Global Variables:')
|
||||
call s:Echo('')
|
||||
|
||||
if l:show_preview_info
|
||||
call s:Echo('" Press Space to read :help for a setting')
|
||||
endif
|
||||
|
||||
call s:EchoGlobalVariables()
|
||||
call s:Echo(' ')
|
||||
call s:EchoLSPErrorMessages(l:all_names)
|
||||
call s:Echo(' Command History:')
|
||||
call s:Echo('')
|
||||
|
@ -275,3 +323,41 @@ function! ale#debugging#InfoToFile(filename) abort
|
|||
call writefile(split(l:output, "\n"), l:expanded_filename)
|
||||
call s:Echo('ALEInfo written to ' . l:expanded_filename)
|
||||
endfunction
|
||||
|
||||
function! ale#debugging#InfoToPreview() abort
|
||||
let l:output = execute('call ale#debugging#Info({''preview'': 1})')
|
||||
|
||||
call ale#preview#Show(split(l:output, "\n"), {
|
||||
\ 'filetype': 'ale-info',
|
||||
\})
|
||||
endfunction
|
||||
|
||||
function! ale#debugging#InfoCommand(...) abort
|
||||
if len(a:000) > 1
|
||||
" no-custom-checks
|
||||
echom 'Invalid ALEInfo arguments!'
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
" Get 'echo' from '-echo', if there's an argument.
|
||||
let l:mode = get(a:000, '')[1:]
|
||||
|
||||
if empty(l:mode)
|
||||
let l:mode = ale#Var(bufnr(''), 'info_default_mode')
|
||||
endif
|
||||
|
||||
if l:mode is# 'echo'
|
||||
call ale#debugging#Info()
|
||||
elseif l:mode is# 'clip' || l:mode is# 'clipboard'
|
||||
call ale#debugging#InfoToClipboard()
|
||||
else
|
||||
call ale#debugging#InfoToPreview()
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! ale#debugging#InfoToClipboardDeprecatedCommand() abort
|
||||
" no-custom-checks
|
||||
echom 'ALEInfoToClipboard is deprecated. Use ALEInfo -clipboard instead.'
|
||||