diff options
Diffstat (limited to 'ale_linters')
-rw-r--r-- | ale_linters/ansible/ansible_lint.vim | 13 | ||||
-rw-r--r-- | ale_linters/d/dls.vim | 22 | ||||
-rw-r--r-- | ale_linters/d/dmd.vim | 16 | ||||
-rw-r--r-- | ale_linters/elixir/credo.vim | 23 | ||||
-rw-r--r-- | ale_linters/elixir/dialyxir.vim | 9 | ||||
-rw-r--r-- | ale_linters/elixir/dogma.vim | 9 | ||||
-rw-r--r-- | ale_linters/elixir/elixir_ls.vim | 19 | ||||
-rw-r--r-- | ale_linters/elixir/mix.vim | 16 | ||||
-rw-r--r-- | ale_linters/haskell/hlint.vim | 3 | ||||
-rw-r--r-- | ale_linters/haskell/stack_build.vim | 2 | ||||
-rw-r--r-- | ale_linters/haskell/stack_ghc.vim | 2 | ||||
-rw-r--r-- | ale_linters/java/pmd.vim | 2 | ||||
-rw-r--r-- | ale_linters/php/psalm.vim | 31 | ||||
-rw-r--r-- | ale_linters/ruby/solargraph.vim | 2 | ||||
-rw-r--r-- | ale_linters/rust/cargo.vim | 13 |
15 files changed, 122 insertions, 60 deletions
diff --git a/ale_linters/ansible/ansible_lint.vim b/ale_linters/ansible/ansible_lint.vim index 0b3b39c8..99fff6c3 100644 --- a/ale_linters/ansible/ansible_lint.vim +++ b/ale_linters/ansible/ansible_lint.vim @@ -1,6 +1,12 @@ " Author: Bjorn Neergaard <bjorn@neersighted.com> " Description: ansible-lint for ansible-yaml files +call ale#Set('ansible_ansible_lint_executable', 'ansible-lint') + +function! ale_linters#ansible#ansible_lint#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'ansible_ansible_lint_executable') +endfunction + function! ale_linters#ansible#ansible_lint#Handle(buffer, lines) abort for l:line in a:lines[:10] if match(l:line, '^Traceback') >= 0 @@ -42,8 +48,9 @@ function! ale_linters#ansible#ansible_lint#Handle(buffer, lines) abort endfunction call ale#linter#Define('ansible', { -\ 'name': 'ansible', -\ 'executable': 'ansible', -\ 'command': 'ansible-lint -p %t', +\ 'name': 'ansible_lint', +\ 'aliases': ['ansible', 'ansible-lint'], +\ 'executable_callback': 'ale_linters#ansible#ansible_lint#GetExecutable', +\ 'command': '%e -p %t', \ 'callback': 'ale_linters#ansible#ansible_lint#Handle', \}) diff --git a/ale_linters/d/dls.vim b/ale_linters/d/dls.vim new file mode 100644 index 00000000..7210d21e --- /dev/null +++ b/ale_linters/d/dls.vim @@ -0,0 +1,22 @@ +" Author: aurieh <me@aurieh.me> +" Description: A Language Server implementation for D + +call ale#Set('d_dls_executable', 'dls') + +function! ale_linters#d#dls#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'd_dls_executable') +endfunction + +function! ale_linters#d#dls#FindProjectRoot(buffer) abort + " Note: this will return . if dub config is empty + " dls can run outside DUB projects just fine + return fnamemodify(ale#d#FindDUBConfig(a:buffer), ':h') +endfunction + +call ale#linter#Define('d', { +\ 'name': 'dls', +\ 'lsp': 'stdio', +\ 'executable_callback': 'ale_linters#d#dls#GetExecutable', +\ 'command_callback': 'ale_linters#d#dls#GetExecutable', +\ 'project_root_callback': 'ale_linters#d#dls#FindProjectRoot', +\}) diff --git a/ale_linters/d/dmd.vim b/ale_linters/d/dmd.vim index d64b6c3d..c816d592 100644 --- a/ale_linters/d/dmd.vim +++ b/ale_linters/d/dmd.vim @@ -1,20 +1,6 @@ " Author: w0rp <devw0rp@gmail.com> " Description: "dmd for D files" -function! s:FindDUBConfig(buffer) abort - " Find a DUB configuration file in ancestor paths. - " The most DUB-specific names will be tried first. - for l:possible_filename in ['dub.sdl', 'dub.json', 'package.json'] - let l:dub_file = ale#path#FindNearestFile(a:buffer, l:possible_filename) - - if !empty(l:dub_file) - return l:dub_file - endif - endfor - - return '' -endfunction - function! ale_linters#d#dmd#DUBCommand(buffer) abort " If we can't run dub, then skip this command. if !executable('dub') @@ -22,7 +8,7 @@ function! ale_linters#d#dmd#DUBCommand(buffer) abort return '' endif - let l:dub_file = s:FindDUBConfig(a:buffer) + let l:dub_file = ale#d#FindDUBConfig(a:buffer) if empty(l:dub_file) return '' diff --git a/ale_linters/elixir/credo.vim b/ale_linters/elixir/credo.vim index af2ff48a..d778471c 100644 --- a/ale_linters/elixir/credo.vim +++ b/ale_linters/elixir/credo.vim @@ -11,10 +11,18 @@ function! ale_linters#elixir#credo#Handle(buffer, lines) abort let l:type = l:match[3] let l:text = l:match[4] - if l:type is# 'C' - let l:type = 'E' - elseif l:type is# 'R' + " Refactoring opportunities + if l:type is# 'F' + let l:type = 'W' + " Consistency + elseif l:type is# 'C' let l:type = 'W' + " Software Design + elseif l:type is# 'D' + let l:type = 'I' + " Code Readability + elseif l:type is# 'R' + let l:type = 'I' endif call add(l:output, { @@ -29,9 +37,16 @@ function! ale_linters#elixir#credo#Handle(buffer, lines) abort return l:output endfunction +function! ale_linters#elixir#credo#GetCommand(buffer) abort + let l:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) + + return ale#path#CdString(l:project_root) + \ . ' mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s' +endfunction + call ale#linter#Define('elixir', { \ 'name': 'credo', \ 'executable': 'mix', -\ 'command': 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s', +\ 'command_callback': 'ale_linters#elixir#credo#GetCommand', \ 'callback': 'ale_linters#elixir#credo#Handle', \}) diff --git a/ale_linters/elixir/dialyxir.vim b/ale_linters/elixir/dialyxir.vim index bba0ae14..d28d3c70 100644 --- a/ale_linters/elixir/dialyxir.vim +++ b/ale_linters/elixir/dialyxir.vim @@ -25,10 +25,17 @@ function! ale_linters#elixir#dialyxir#Handle(buffer, lines) abort return l:output endfunction +function! ale_linters#elixir#dialyxir#GetCommand(buffer) abort + let l:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) + + return ale#path#CdString(l:project_root) + \ . ' mix help dialyzer && mix dialyzer' +endfunction + call ale#linter#Define('elixir', { \ 'name': 'dialyxir', \ 'executable': 'mix', -\ 'command': 'mix help dialyzer && mix dialyzer', +\ 'command_callback': 'ale_linters#elixir#dialyxir#GetCommand', \ 'callback': 'ale_linters#elixir#dialyxir#Handle', \}) diff --git a/ale_linters/elixir/dogma.vim b/ale_linters/elixir/dogma.vim index 71cf4f4c..dcfb6f28 100644 --- a/ale_linters/elixir/dogma.vim +++ b/ale_linters/elixir/dogma.vim @@ -29,10 +29,17 @@ function! ale_linters#elixir#dogma#Handle(buffer, lines) abort return l:output endfunction +function! ale_linters#elixir#dogma#GetCommand(buffer) abort + let l:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) + + return ale#path#CdString(l:project_root) + \ . ' mix help dogma && mix dogma %s --format=flycheck' +endfunction + call ale#linter#Define('elixir', { \ 'name': 'dogma', \ 'executable': 'mix', -\ 'command': 'mix help dogma && mix dogma %s --format=flycheck', +\ 'command_callback': 'ale_linters#elixir#dogma#GetCommand', \ 'lint_file': 1, \ 'callback': 'ale_linters#elixir#dogma#Handle', \}) diff --git a/ale_linters/elixir/elixir_ls.vim b/ale_linters/elixir/elixir_ls.vim new file mode 100644 index 00000000..d5ad7cfc --- /dev/null +++ b/ale_linters/elixir/elixir_ls.vim @@ -0,0 +1,19 @@ +" Author: Jon Parise <jon@indelible.org> +" Description: elixir-ls integration (https://github.com/JakeBecker/elixir-ls) + +call ale#Set('elixir_elixir_ls_release', 'elixir-ls') + +function! ale_linters#elixir#elixir_ls#GetExecutable(buffer) abort + let l:dir = ale#path#Simplify(ale#Var(a:buffer, 'elixir_elixir_ls_release')) + let l:cmd = ale#Has('win32') ? '\language_server.bat' : '/language_server.sh' + + return l:dir . l:cmd +endfunction + +call ale#linter#Define('elixir', { +\ 'name': 'elixir-ls', +\ 'lsp': 'stdio', +\ 'executable_callback': 'ale_linters#elixir#elixir_ls#GetExecutable', +\ 'command_callback': 'ale_linters#elixir#elixir_ls#GetExecutable', +\ 'project_root_callback': 'ale#handlers#elixir#FindMixProjectRoot', +\}) diff --git a/ale_linters/elixir/mix.vim b/ale_linters/elixir/mix.vim index 4552ace5..dc3c1818 100644 --- a/ale_linters/elixir/mix.vim +++ b/ale_linters/elixir/mix.vim @@ -29,18 +29,8 @@ function! ale_linters#elixir#mix#Handle(buffer, lines) abort return l:output endfunction -function! ale_linters#elixir#mix#FindProjectRoot(buffer) abort - let l:mix_file = ale#path#FindNearestFile(a:buffer, 'mix.exs') - - if !empty(l:mix_file) - return fnamemodify(l:mix_file, ':p:h') - endif - - return '.' -endfunction - function! ale_linters#elixir#mix#GetCommand(buffer) abort - let l:project_root = ale_linters#elixir#mix#FindProjectRoot(a:buffer) + let l:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) let l:temp_dir = ale#engine#CreateDirectory(a:buffer) @@ -49,8 +39,8 @@ function! ale_linters#elixir#mix#GetCommand(buffer) abort \ : 'MIX_BUILD_PATH=' . ale#Escape(l:temp_dir) return ale#path#CdString(l:project_root) - \ . l:mix_build_path - \ . ' mix compile %s' + \ . l:mix_build_path + \ . ' mix compile %s' endfunction call ale#linter#Define('elixir', { diff --git a/ale_linters/haskell/hlint.vim b/ale_linters/haskell/hlint.vim index fbb49fdb..0cc7437f 100644 --- a/ale_linters/haskell/hlint.vim +++ b/ale_linters/haskell/hlint.vim @@ -1,6 +1,9 @@ " Author: jparoz <jesse.paroz@gmail.com> " Description: hlint for Haskell files +call ale#Set('haskell_hlint_executable', 'hlint') +call ale#Set('haskell_hlint_options', get(g:, 'hlint_options', '')) + function! ale_linters#haskell#hlint#Handle(buffer, lines) abort let l:output = [] diff --git a/ale_linters/haskell/stack_build.vim b/ale_linters/haskell/stack_build.vim index f5bdf4b8..95a54587 100644 --- a/ale_linters/haskell/stack_build.vim +++ b/ale_linters/haskell/stack_build.vim @@ -16,7 +16,7 @@ call ale#linter#Define('haskell', { \ 'name': 'stack_build', \ 'aliases': ['stack-build'], \ 'output_stream': 'stderr', -\ 'executable': 'stack', +\ 'executable_callback': 'ale#handlers#haskell#GetStackExecutable', \ 'command_callback': 'ale_linters#haskell#stack_build#GetCommand', \ 'lint_file': 1, \ 'callback': 'ale#handlers#haskell#HandleGHCFormat', diff --git a/ale_linters/haskell/stack_ghc.vim b/ale_linters/haskell/stack_ghc.vim index d702aa68..8f42b96c 100644 --- a/ale_linters/haskell/stack_ghc.vim +++ b/ale_linters/haskell/stack_ghc.vim @@ -5,7 +5,7 @@ call ale#linter#Define('haskell', { \ 'name': 'stack_ghc', \ 'aliases': ['stack-ghc'], \ 'output_stream': 'stderr', -\ 'executable': 'stack', +\ 'executable_callback': 'ale#handlers#haskell#GetStackExecutable', \ 'command': 'stack ghc -- -fno-code -v0 %t', \ 'callback': 'ale#handlers#haskell#HandleGHCFormat', \}) diff --git a/ale_linters/java/pmd.vim b/ale_linters/java/pmd.vim index d461e094..b530ad09 100644 --- a/ale_linters/java/pmd.vim +++ b/ale_linters/java/pmd.vim @@ -2,7 +2,7 @@ " Description: PMD for Java files function! ale_linters#java#pmd#Handle(buffer, lines) abort - let l:pattern = '"\(\d\+\)",".\+","\(.\+\)","\(\d\+\)","\(\d\+\)","\(.\+\)","\(.\+\)","\(.\+\)"$' + let l:pattern = '"\(\d\+\)",".*","\(.\+\)","\(\d\+\)","\(\d\+\)","\(.\+\)","\(.\+\)","\(.\+\)"$' let l:output = [] for l:match in ale#util#GetMatches(a:lines, l:pattern) diff --git a/ale_linters/php/psalm.vim b/ale_linters/php/psalm.vim index cd20ab81..dce59178 100644 --- a/ale_linters/php/psalm.vim +++ b/ale_linters/php/psalm.vim @@ -1,28 +1,21 @@ -" Author: richard marmorstein <https://github.com/twitchard> +" Author: Matt Brown <https://github.com/muglug> " Description: plugin for Psalm, static analyzer for PHP -call ale#Set('php_psalm_executable', 'psalm') +call ale#Set('psalm_langserver_executable', 'psalm-language-server') +call ale#Set('psalm_langserver_use_global', get(g:, 'ale_use_global_executables', 0)) -function! ale_linters#php#psalm#Handle(buffer, lines) abort - " Matches patterns like the following: - let l:pattern = '^.*:\(\d\+\):\(\d\+\):\(\w\+\) - \(.*\)$' - let l:output = [] +function! ale_linters#php#psalm#GetProjectRoot(buffer) abort + let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'text': l:match[4], - \ 'type': l:match[3][:0] is# 'e' ? 'E' : 'W', - \}) - endfor - - return l:output + return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' endfunction call ale#linter#Define('php', { \ 'name': 'psalm', -\ 'command': '%e --diff --output-format=emacs %s', -\ 'executable_callback': ale#VarFunc('php_psalm_executable'), -\ 'callback': 'ale_linters#php#psalm#Handle', -\ 'lint_file': 1, +\ 'lsp': 'stdio', +\ 'executable_callback': ale#node#FindExecutableFunc('psalm_langserver', [ +\ 'vendor/bin/psalm-language-server', +\ ]), +\ 'command': '%e', +\ 'project_root_callback': 'ale_linters#php#psalm#GetProjectRoot', \}) diff --git a/ale_linters/ruby/solargraph.vim b/ale_linters/ruby/solargraph.vim index 7ca0399f..5ff0a759 100644 --- a/ale_linters/ruby/solargraph.vim +++ b/ale_linters/ruby/solargraph.vim @@ -5,6 +5,7 @@ " Description: updated to use stdio call ale#Set('ruby_solargraph_executable', 'solargraph') +call ale#Set('ruby_solargraph_options', {}) function! ale_linters#ruby#solargraph#GetCommand(buffer) abort return '%e' . ale#Pad('stdio') @@ -17,4 +18,5 @@ call ale#linter#Define('ruby', { \ 'executable_callback': ale#VarFunc('ruby_solargraph_executable'), \ 'command_callback': 'ale_linters#ruby#solargraph#GetCommand', \ 'project_root_callback': 'ale#ruby#FindProjectRoot', +\ 'initialization_options_callback': ale#VarFunc('ruby_solargraph_options'), \}) diff --git a/ale_linters/rust/cargo.vim b/ale_linters/rust/cargo.vim index 5aefe72c..cf6187f8 100644 --- a/ale_linters/rust/cargo.vim +++ b/ale_linters/rust/cargo.vim @@ -9,6 +9,8 @@ call ale#Set('rust_cargo_check_tests', 0) call ale#Set('rust_cargo_avoid_whole_workspace', 1) call ale#Set('rust_cargo_default_feature_behavior', 'default') call ale#Set('rust_cargo_include_features', '') +call ale#Set('rust_cargo_use_clippy', 0) +call ale#Set('rust_cargo_clippy_options', '') function! ale_linters#rust#cargo#GetCargoExecutable(bufnr) abort if ale#path#FindNearestFile(a:bufnr, 'Cargo.toml') isnot# '' @@ -70,14 +72,23 @@ function! ale_linters#rust#cargo#GetCommand(buffer, version_output) abort let l:default_feature = '' endif + let l:subcommand = l:use_check ? 'check' : 'build' + let l:clippy_options = '' + + if ale#Var(a:buffer, 'rust_cargo_use_clippy') + let l:subcommand = 'clippy' + let l:clippy_options = ' ' . ale#Var(a:buffer, 'rust_cargo_clippy_options') + endif + return l:nearest_cargo_prefix . 'cargo ' - \ . (l:use_check ? 'check' : 'build') + \ . l:subcommand \ . (l:use_all_targets ? ' --all-targets' : '') \ . (l:use_examples ? ' --examples' : '') \ . (l:use_tests ? ' --tests' : '') \ . ' --frozen --message-format=json -q' \ . l:default_feature \ . l:include_features + \ . l:clippy_options endfunction call ale#linter#Define('rust', { |