Removed syntastic and replaced it with ale
Read more here: https://github.com/w0rp/ale
This commit is contained in:
parent
37297ddae6
commit
7c643a2d9c
679 changed files with 23508 additions and 27895 deletions
22
sources_non_forked/ale/LICENSE
Normal file
22
sources_non_forked/ale/LICENSE
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
Copyright (c) 2016-2018, w0rp <devw0rp@gmail.com>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
37
sources_non_forked/ale/after/plugin/ale.vim
Normal file
37
sources_non_forked/ale/after/plugin/ale.vim
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: Follow-up checks for the plugin: warn about conflicting plugins.
|
||||||
|
|
||||||
|
" A flag for ensuring that this is not run more than one time.
|
||||||
|
if exists('g:loaded_ale_after')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set the flag so this file is not run more than one time.
|
||||||
|
let g:loaded_ale_after = 1
|
||||||
|
|
||||||
|
" Check if the flag is available and set to 0 to disable checking for and
|
||||||
|
" emitting conflicting plugin warnings.
|
||||||
|
if exists('g:ale_emit_conflict_warnings') && !g:ale_emit_conflict_warnings
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Conflicting Plugins Checks
|
||||||
|
|
||||||
|
function! s:GetConflictingPluginWarning(plugin_name) abort
|
||||||
|
return 'ALE conflicts with ' . a:plugin_name
|
||||||
|
\ . '. Uninstall it, or disable this warning with '
|
||||||
|
\ . '`let g:ale_emit_conflict_warnings = 0` in your vimrc file, '
|
||||||
|
\ . '*before* plugins are loaded.'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
if exists('g:loaded_syntastic_plugin')
|
||||||
|
throw s:GetConflictingPluginWarning('Syntastic')
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists('g:loaded_neomake')
|
||||||
|
throw s:GetConflictingPluginWarning('Neomake')
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists('g:loaded_validator_plugin')
|
||||||
|
throw s:GetConflictingPluginWarning('Validator')
|
||||||
|
endif
|
49
sources_non_forked/ale/ale_linters/ansible/ansible_lint.vim
Normal file
49
sources_non_forked/ale/ale_linters/ansible/ansible_lint.vim
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
" Author: Bjorn Neergaard <bjorn@neersighted.com>
|
||||||
|
" Description: ansible-lint for ansible-yaml files
|
||||||
|
|
||||||
|
function! ale_linters#ansible#ansible_lint#Handle(buffer, lines) abort
|
||||||
|
for l:line in a:lines[:10]
|
||||||
|
if match(l:line, '^Traceback') >= 0
|
||||||
|
return [{
|
||||||
|
\ 'lnum': 1,
|
||||||
|
\ 'text': 'An exception was thrown. See :ALEDetail',
|
||||||
|
\ 'detail': join(a:lines, "\n"),
|
||||||
|
\}]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" test.yml:35: [EANSIBLE0002] Trailing whitespace
|
||||||
|
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?: \[?([[:alnum:]]+)\]? (.*)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:code = l:match[4]
|
||||||
|
|
||||||
|
if l:code is# 'EANSIBLE0002'
|
||||||
|
\&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
|
||||||
|
" Skip warnings for trailing whitespace if the option is off.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ale#path#IsBufferPath(a:buffer, l:match[1])
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\ 'code': l:code,
|
||||||
|
\ 'type': l:code[:0] is# 'E' ? 'E' : 'W',
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('ansible', {
|
||||||
|
\ 'name': 'ansible',
|
||||||
|
\ 'executable': 'ansible',
|
||||||
|
\ 'command': 'ansible-lint -p %t',
|
||||||
|
\ 'callback': 'ale_linters#ansible#ansible_lint#Handle',
|
||||||
|
\})
|
36
sources_non_forked/ale/ale_linters/apiblueprint/drafter.vim
Normal file
36
sources_non_forked/ale/ale_linters/apiblueprint/drafter.vim
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
" Author: nametake https://nametake.github.io
|
||||||
|
" Description: apiblueprint parser
|
||||||
|
|
||||||
|
function! ale_linters#apiblueprint#drafter#HandleErrors(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" warning: (3) unable to parse response signature, expected 'response [<HTTP status code>] [(<media type>)]'; line 4, column 3k - line 4, column 22
|
||||||
|
" warning: (10) message-body asset is expected to be a pre-formatted code block, separate it by a newline and indent every of its line by 12 spaces or 3 tabs; line 30, column 5 - line 30, column 9; line 31, column 9 - line 31, column 14; line 32, column 9 - line 32, column 14
|
||||||
|
let l:pattern = '\(^.*\): (\d\+) \(.\{-\}\); line \(\d\+\), column \(\d\+\) - line \d\+, column \d\+\(.*; line \d\+, column \d\+ - line \(\d\+\), column \(\d\+\)\)\{-\}$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines[2:], l:pattern)
|
||||||
|
let l:item = {
|
||||||
|
\ 'type': l:match[1] is# 'warning' ? 'W' : 'E',
|
||||||
|
\ 'text': l:match[2],
|
||||||
|
\ 'lnum': l:match[3] + 0,
|
||||||
|
\ 'col': l:match[4] + 0,
|
||||||
|
\}
|
||||||
|
if l:match[5] isnot# ''
|
||||||
|
let l:item.end_lnum = l:match[6] + 0
|
||||||
|
let l:item.end_col = l:match[7] + 0
|
||||||
|
endif
|
||||||
|
call add(l:output, l:item)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
call ale#linter#Define('apiblueprint', {
|
||||||
|
\ 'name': 'drafter',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'drafter',
|
||||||
|
\ 'command': 'drafter --use-line-num --validate %t',
|
||||||
|
\ 'callback': 'ale_linters#apiblueprint#drafter#HandleErrors',
|
||||||
|
\})
|
11
sources_non_forked/ale/ale_linters/asciidoc/alex.vim
Normal file
11
sources_non_forked/ale/ale_linters/asciidoc/alex.vim
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
" Author: Johannes Wienke <languitar@semipol.de>
|
||||||
|
" Description: alex for asciidoc files
|
||||||
|
|
||||||
|
call ale#linter#Define('help', {
|
||||||
|
\ 'name': 'alex',
|
||||||
|
\ 'executable': 'alex',
|
||||||
|
\ 'command': 'alex %s -t',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale#handlers#alex#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Daniel M. Capella https://github.com/polyzen
|
||||||
|
" Description: proselint for AsciiDoc files
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'proselint',
|
||||||
|
\ 'executable': 'proselint',
|
||||||
|
\ 'command': 'proselint %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/asciidoc/redpen.vim
Normal file
9
sources_non_forked/ale/ale_linters/asciidoc/redpen.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: rhysd https://rhysd.github.io
|
||||||
|
" Description: Redpen, a proofreading tool (http://redpen.cc)
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'redpen',
|
||||||
|
\ 'executable': 'redpen',
|
||||||
|
\ 'command': 'redpen -f asciidoc -r json %t',
|
||||||
|
\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput',
|
||||||
|
\})
|
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for AsciiDoc files
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
39
sources_non_forked/ale/ale_linters/asm/gcc.vim
Normal file
39
sources_non_forked/ale/ale_linters/asm/gcc.vim
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
" Author: Lucas Kolstad <lkolstad@uw.edu>
|
||||||
|
" Description: gcc linter for asm files
|
||||||
|
|
||||||
|
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') . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#asm#gcc#Handle(buffer, lines) abort
|
||||||
|
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,
|
||||||
|
\ 'type': l:match[2] =~? 'error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('asm', {
|
||||||
|
\ 'name': 'gcc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#asm#gcc#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#asm#gcc#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#asm#gcc#Handle',
|
||||||
|
\})
|
30
sources_non_forked/ale/ale_linters/awk/gawk.vim
Normal file
30
sources_non_forked/ale/ale_linters/awk/gawk.vim
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
" Author: kmarc <korondi.mark@gmail.com>
|
||||||
|
" 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
|
||||||
|
|
||||||
|
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_linters#awk#gawk#GetExecutable(a:buffer)
|
||||||
|
\ . " --source 'BEGIN { exit } END { exit 1 }'"
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'awk_gawk_options')
|
||||||
|
\ . ' ' . '-f %t --lint /dev/null'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('awk', {
|
||||||
|
\ 'name': 'gawk',
|
||||||
|
\ 'executable_callback': 'ale_linters#awk#gawk#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#awk#gawk#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#gawk#HandleGawkFormat',
|
||||||
|
\ 'output_stream': 'both'
|
||||||
|
\})
|
32
sources_non_forked/ale/ale_linters/c/clang.vim
Normal file
32
sources_non_forked/ale/ale_linters/c/clang.vim
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
" Author: Masahiro H https://github.com/mshr-h
|
||||||
|
" Description: clang linter for c files
|
||||||
|
|
||||||
|
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 '
|
||||||
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'c_clang_options') . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'clang',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#c#clang#GetExecutable',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#c#clang#GetCommand'}
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\})
|
64
sources_non_forked/ale/ale_linters/c/clangtidy.vim
Normal file
64
sources_non_forked/ale/ale_linters/c/clangtidy.vim
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
" Author: vdeurzen <tim@kompiler.org>, w0rp <devw0rp@gmail.com>,
|
||||||
|
" gagbo <gagbobada@gmail.com>, Andrej Radovic <r.andrej@gmail.com>
|
||||||
|
" Description: clang-tidy linter for c files
|
||||||
|
|
||||||
|
call ale#Set('c_clangtidy_executable', 'clang-tidy')
|
||||||
|
" Set this option to check the checks clang-tidy will apply.
|
||||||
|
" The number of checks that can be applied to C files is limited in contrast to
|
||||||
|
" C++
|
||||||
|
"
|
||||||
|
" Consult the check list in clang-tidy's documentation:
|
||||||
|
" http://clang.llvm.org/extra/clang-tidy/checks/list.html
|
||||||
|
|
||||||
|
call ale#Set('c_clangtidy_checks', ['*'])
|
||||||
|
" Set this option to manually set some options for clang-tidy.
|
||||||
|
" This will disable compile_commands.json detection.
|
||||||
|
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
|
||||||
|
" commands for compiling header files.
|
||||||
|
if expand('#' . a:buffer) =~# '\v\.(h|hpp)$'
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
|
||||||
|
|
||||||
|
" c_build_dir has the priority if defined
|
||||||
|
if !empty(l:build_dir)
|
||||||
|
return l:build_dir
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#c#FindCompileCommands(a:buffer)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#c#clangtidy#GetCommand(buffer) abort
|
||||||
|
let l:checks = join(ale#Var(a:buffer, 'c_clangtidy_checks'), ',')
|
||||||
|
let l:build_dir = s:GetBuildDirectory(a:buffer)
|
||||||
|
|
||||||
|
" Get the extra options if we couldn't find a build directory.
|
||||||
|
let l:options = empty(l:build_dir)
|
||||||
|
\ ? ale#Var(a:buffer, 'c_clangtidy_options')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
return ale#Escape(ale_linters#c#clangtidy#GetExecutable(a:buffer))
|
||||||
|
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
||||||
|
\ . ' %s'
|
||||||
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
|
\ . (!empty(l:options) ? ' -- ' . l:options : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'clangtidy',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable_callback': 'ale_linters#c#clangtidy#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#c#clangtidy#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
39
sources_non_forked/ale/ale_linters/c/cppcheck.vim
Normal file
39
sources_non_forked/ale/ale_linters/c/cppcheck.vim
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
" Author: Bart Libert <bart.libert@gmail.com>
|
||||||
|
" Description: cppcheck linter for c files
|
||||||
|
|
||||||
|
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.
|
||||||
|
"
|
||||||
|
" If we find it, we'll `cd` to where the compile_commands.json file is,
|
||||||
|
" then use the file to set up import paths, etc.
|
||||||
|
let l:compile_commmands_path = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
|
||||||
|
|
||||||
|
let l:cd_command = !empty(l:compile_commmands_path)
|
||||||
|
\ ? ale#path#CdString(fnamemodify(l:compile_commmands_path, ':h'))
|
||||||
|
\ : ''
|
||||||
|
let l:compile_commands_option = !empty(l:compile_commmands_path)
|
||||||
|
\ ? '--project=compile_commands.json '
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
return l:cd_command
|
||||||
|
\ . ale#Escape(ale_linters#c#cppcheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' -q --language=c '
|
||||||
|
\ . l:compile_commands_option
|
||||||
|
\ . ale#Var(a:buffer, 'c_cppcheck_options')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'cppcheck',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable_callback': 'ale_linters#c#cppcheck#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#c#cppcheck#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
||||||
|
\})
|
31
sources_non_forked/ale/ale_linters/c/flawfinder.vim
Normal file
31
sources_non_forked/ale/ale_linters/c/flawfinder.vim
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
" Author: Christian Gibbons <cgibbons@gmu.edu>
|
||||||
|
" Description: flawfinder linter for c files
|
||||||
|
|
||||||
|
call ale#Set('c_flawfinder_executable', 'flawfinder')
|
||||||
|
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')
|
||||||
|
\ . l:minlevel
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'flawfinder',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable_callback': 'ale_linters#c#flawfinder#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#c#flawfinder#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
||||||
|
\})
|
32
sources_non_forked/ale/ale_linters/c/gcc.vim
Normal file
32
sources_non_forked/ale/ale_linters/c/gcc.vim
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: gcc linter for c files
|
||||||
|
|
||||||
|
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 '
|
||||||
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'c_gcc_options') . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'gcc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#c#gcc#GetExecutable',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#c#gcc#GetCommand'}
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\})
|
48
sources_non_forked/ale/ale_linters/chef/foodcritic.vim
Normal file
48
sources_non_forked/ale/ale_linters/chef/foodcritic.vim
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
" Author: Edward Larkey <edwlarkey@mac.com>
|
||||||
|
" Author: Jose Junior <jose.junior@gmail.com>
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: This file adds the foodcritic linter for Chef files.
|
||||||
|
|
||||||
|
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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" FC002: Avoid string interpolation where not required: httpd.rb:13
|
||||||
|
let l:pattern = '\v([^:]+): (.+): ([a-zA-Z]?:?[^:]+):(\d+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'code': l:match[1],
|
||||||
|
\ 'text': l:match[2],
|
||||||
|
\ 'filename': l:match[3],
|
||||||
|
\ 'lnum': l:match[4] + 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('chef', {
|
||||||
|
\ 'name': 'foodcritic',
|
||||||
|
\ 'executable_callback': 'ale_linters#chef#foodcritic#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#chef#foodcritic#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#chef#foodcritic#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
32
sources_non_forked/ale/ale_linters/clojure/joker.vim
Normal file
32
sources_non_forked/ale/ale_linters/clojure/joker.vim
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
" Author: Nic West <nicwest@mailbox.org>
|
||||||
|
" Description: linter for clojure using joker https://github.com/candid82/joker
|
||||||
|
|
||||||
|
function! ale_linters#clojure#joker#HandleJokerFormat(buffer, lines) abort
|
||||||
|
" output format
|
||||||
|
" <filename>:<line>:<column>: <issue type>: <message>
|
||||||
|
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+):? ((Read error|Parse error|Parse warning|Exception): ?(.+))$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:type = 'E'
|
||||||
|
if l:match[4] is? 'Parse warning'
|
||||||
|
let l:type = 'W'
|
||||||
|
endif
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\ 'type': l:type,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('clojure', {
|
||||||
|
\ 'name': 'joker',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'joker',
|
||||||
|
\ 'command': 'joker --lint %t',
|
||||||
|
\ 'callback': 'ale_linters#clojure#joker#HandleJokerFormat',
|
||||||
|
\})
|
24
sources_non_forked/ale/ale_linters/cmake/cmakelint.vim
Normal file
24
sources_non_forked/ale/ale_linters/cmake/cmakelint.vim
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
" Author: Kenneth Benzie <k.benzie83@gmail.com>
|
||||||
|
" Description: cmakelint for cmake files
|
||||||
|
|
||||||
|
let g:ale_cmake_cmakelint_executable =
|
||||||
|
\ get(g:, 'ale_cmake_cmakelint_executable', 'cmakelint')
|
||||||
|
|
||||||
|
let g:ale_cmake_cmakelint_options =
|
||||||
|
\ get(g:, 'ale_cmake_cmakelint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmakelint#Executable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cmake_cmakelint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmakelint#Command(buffer) abort
|
||||||
|
return ale_linters#cmake#cmakelint#Executable(a:buffer)
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'cmake_cmakelint_options') . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cmake', {
|
||||||
|
\ 'name': 'cmakelint',
|
||||||
|
\ 'executable_callback': 'ale_linters#cmake#cmakelint#Executable',
|
||||||
|
\ 'command_callback': 'ale_linters#cmake#cmakelint#Command',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
23
sources_non_forked/ale/ale_linters/coffee/coffee.vim
Normal file
23
sources_non_forked/ale/ale_linters/coffee/coffee.vim
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
" Author: KabbAmine - https://github.com/KabbAmine
|
||||||
|
" Description: Coffee for checking coffee files
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffee#GetExecutable(buffer) abort
|
||||||
|
return ale#path#ResolveLocalPath(
|
||||||
|
\ a:buffer,
|
||||||
|
\ 'node_modules/.bin/coffee',
|
||||||
|
\ 'coffee'
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffee#GetCommand(buffer) abort
|
||||||
|
return ale_linters#coffee#coffee#GetExecutable(a:buffer)
|
||||||
|
\ . ' -cp -s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('coffee', {
|
||||||
|
\ 'name': 'coffee',
|
||||||
|
\ 'executable_callback': 'ale_linters#coffee#coffee#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#coffee#coffee#GetCommand',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\})
|
43
sources_non_forked/ale/ale_linters/coffee/coffeelint.vim
Normal file
43
sources_non_forked/ale/ale_linters/coffee/coffeelint.vim
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
" Author: Prashanth Chandra https://github.com/prashcr
|
||||||
|
" Description: coffeelint linter for coffeescript files
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffeelint#GetExecutable(buffer) abort
|
||||||
|
return ale#path#ResolveLocalPath(
|
||||||
|
\ a:buffer,
|
||||||
|
\ 'node_modules/.bin/coffeelint',
|
||||||
|
\ 'coffeelint'
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffeelint#GetCommand(buffer) abort
|
||||||
|
return ale_linters#coffee#coffeelint#GetExecutable(a:buffer)
|
||||||
|
\ . ' --stdin --reporter csv'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffeelint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns like the following:
|
||||||
|
"
|
||||||
|
" path,lineNumber,lineNumberEnd,level,message
|
||||||
|
" stdin,14,,error,Throwing strings is forbidden
|
||||||
|
"
|
||||||
|
" Note that we currently ignore lineNumberEnd for multiline errors
|
||||||
|
let l:pattern = 'stdin,\(\d\+\),\(\d*\),\(.\{-1,}\),\(.\+\)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:match[1]),
|
||||||
|
\ 'type': l:match[3] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('coffee', {
|
||||||
|
\ 'name': 'coffeelint',
|
||||||
|
\ 'executable_callback': 'ale_linters#coffee#coffeelint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#coffee#coffeelint#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#coffee#coffeelint#Handle',
|
||||||
|
\})
|
32
sources_non_forked/ale/ale_linters/cpp/clang.vim
Normal file
32
sources_non_forked/ale/ale_linters/cpp/clang.vim
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
" Author: Tomota Nakamura <https://github.com/tomotanakamura>
|
||||||
|
" Description: clang linter for cpp files
|
||||||
|
|
||||||
|
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 '
|
||||||
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'cpp_clang_options') . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'clang',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#cpp#clang#GetExecutable',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#cpp#clang#GetCommand'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\})
|
39
sources_non_forked/ale/ale_linters/cpp/clangcheck.vim
Normal file
39
sources_non_forked/ale/ale_linters/cpp/clangcheck.vim
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
" Author: gagbo <gagbobada@gmail.com>
|
||||||
|
" Description: clang-check linter for cpp files
|
||||||
|
|
||||||
|
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')
|
||||||
|
|
||||||
|
" 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:build_dir = ale#c#FindCompileCommands(a:buffer)
|
||||||
|
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 ale#Escape(ale_linters#cpp#clangcheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' -analyze %s'
|
||||||
|
\ . (empty(l:build_dir) ? ' -extra-arg -Xclang -extra-arg -analyzer-output=text' : '')
|
||||||
|
\ . (!empty(l:user_options) ? ' ' . 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',
|
||||||
|
\ 'command_callback': 'ale_linters#cpp#clangcheck#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
58
sources_non_forked/ale/ale_linters/cpp/clangtidy.vim
Normal file
58
sources_non_forked/ale/ale_linters/cpp/clangtidy.vim
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
" Author: vdeurzen <tim@kompiler.org>, w0rp <devw0rp@gmail.com>,
|
||||||
|
" gagbo <gagbobada@gmail.com>
|
||||||
|
" Description: clang-tidy linter for cpp files
|
||||||
|
|
||||||
|
call ale#Set('cpp_clangtidy_executable', 'clang-tidy')
|
||||||
|
" Set this option to check the checks clang-tidy will apply.
|
||||||
|
call ale#Set('cpp_clangtidy_checks', ['*'])
|
||||||
|
" Set this option to manually set some options for clang-tidy.
|
||||||
|
" This will disable compile_commands.json detection.
|
||||||
|
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
|
||||||
|
" commands for compiling header files.
|
||||||
|
if expand('#' . a:buffer) =~# '\v\.(h|hpp)$'
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
|
||||||
|
|
||||||
|
" c_build_dir has the priority if defined
|
||||||
|
if !empty(l:build_dir)
|
||||||
|
return l:build_dir
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#c#FindCompileCommands(a:buffer)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort
|
||||||
|
let l:checks = join(ale#Var(a:buffer, 'cpp_clangtidy_checks'), ',')
|
||||||
|
let l:build_dir = s:GetBuildDirectory(a:buffer)
|
||||||
|
|
||||||
|
" Get the extra options if we couldn't find a build directory.
|
||||||
|
let l:options = empty(l:build_dir)
|
||||||
|
\ ? ale#Var(a:buffer, 'cpp_clangtidy_options')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
return ale#Escape(ale_linters#cpp#clangtidy#GetExecutable(a:buffer))
|
||||||
|
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
||||||
|
\ . ' %s'
|
||||||
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
|
\ . (!empty(l:options) ? ' -- ' . l:options : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'clangtidy',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable_callback': 'ale_linters#cpp#clangtidy#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#cpp#clangtidy#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
39
sources_non_forked/ale/ale_linters/cpp/cppcheck.vim
Normal file
39
sources_non_forked/ale/ale_linters/cpp/cppcheck.vim
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
" Author: Bart Libert <bart.libert@gmail.com>
|
||||||
|
" Description: cppcheck linter for cpp files
|
||||||
|
|
||||||
|
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.
|
||||||
|
"
|
||||||
|
" If we find it, we'll `cd` to where the compile_commands.json file is,
|
||||||
|
" then use the file to set up import paths, etc.
|
||||||
|
let l:compile_commmands_path = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
|
||||||
|
|
||||||
|
let l:cd_command = !empty(l:compile_commmands_path)
|
||||||
|
\ ? ale#path#CdString(fnamemodify(l:compile_commmands_path, ':h'))
|
||||||
|
\ : ''
|
||||||
|
let l:compile_commands_option = !empty(l:compile_commmands_path)
|
||||||
|
\ ? '--project=compile_commands.json '
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
return l:cd_command
|
||||||
|
\ . ale#Escape(ale_linters#cpp#cppcheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' -q --language=c++ '
|
||||||
|
\ . l:compile_commands_option
|
||||||
|
\ . ale#Var(a:buffer, 'cpp_cppcheck_options')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'cppcheck',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable_callback': 'ale_linters#cpp#cppcheck#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#cpp#cppcheck#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
||||||
|
\})
|
26
sources_non_forked/ale/ale_linters/cpp/cpplint.vim
Normal file
26
sources_non_forked/ale/ale_linters/cpp/cpplint.vim
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
" Author: Dawid Kurek https://github.com/dawikur
|
||||||
|
" Description: cpplint for cpp files
|
||||||
|
|
||||||
|
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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'cpplint',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#cpp#cpplint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#cpp#cpplint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
30
sources_non_forked/ale/ale_linters/cpp/flawfinder.vim
Normal file
30
sources_non_forked/ale/ale_linters/cpp/flawfinder.vim
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
" Author: Christian Gibbons <cgibbons@gmu.edu>
|
||||||
|
" Description: flawfinder linter for c++ files
|
||||||
|
|
||||||
|
call ale#Set('cpp_flawfinder_executable', 'flawfinder')
|
||||||
|
call ale#Set('cpp_flawfinder_options', '')
|
||||||
|
call ale#Set('cpp_flawfinder_minlevel', 1)
|
||||||
|
|
||||||
|
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'
|
||||||
|
\ . ale#Var(a:buffer, 'cpp_flawfinder_options')
|
||||||
|
\ . l:minlevel
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'flawfinder',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable_callback': 'ale_linters#cpp#flawfinder#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#cpp#flawfinder#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
||||||
|
\})
|
32
sources_non_forked/ale/ale_linters/cpp/gcc.vim
Normal file
32
sources_non_forked/ale/ale_linters/cpp/gcc.vim
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
" Author: geam <mdelage@student.42.fr>
|
||||||
|
" Description: gcc linter for cpp files
|
||||||
|
"
|
||||||
|
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 '
|
||||||
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'cpp_gcc_options') . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'g++',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#cpp#gcc#GetExecutable',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#cpp#gcc#GetCommand'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\})
|
31
sources_non_forked/ale/ale_linters/crystal/crystal.vim
Normal file
31
sources_non_forked/ale/ale_linters/crystal/crystal.vim
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
" Author: Jordan Andree <https://github.com/jordanandree>, David Alexander <opensource@thelonelyghost.com>
|
||||||
|
" Description: This file adds support for checking Crystal with crystal build
|
||||||
|
|
||||||
|
function! ale_linters#crystal#crystal#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:error.line + 0,
|
||||||
|
\ 'col': l:error.column + 0,
|
||||||
|
\ 'text': l:error.message,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#crystal#crystal#GetCommand(buffer) abort
|
||||||
|
return 'crystal build -f json --no-codegen --no-color -o '
|
||||||
|
\ . ale#Escape(g:ale#util#nul_file)
|
||||||
|
\ . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('crystal', {
|
||||||
|
\ 'name': 'crystal',
|
||||||
|
\ 'executable': 'crystal',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\ 'command_callback': 'ale_linters#crystal#crystal#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#crystal#crystal#Handle',
|
||||||
|
\})
|
33
sources_non_forked/ale/ale_linters/cs/mcs.vim
Normal file
33
sources_non_forked/ale/ale_linters/cs/mcs.vim
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
let g:ale_cs_mcs_options = get(g:, 'ale_cs_mcs_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcs#GetCommand(buffer) abort
|
||||||
|
return 'mcs -unsafe --parse ' . ale#Var(a:buffer, 'cs_mcs_options') . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcs#Handle(buffer, lines) abort
|
||||||
|
" Look for lines like the following.
|
||||||
|
"
|
||||||
|
" Tests.cs(12,29): error CSXXXX: ; expected
|
||||||
|
let l:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'code': l:match[5],
|
||||||
|
\ 'text': l:match[6],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cs',{
|
||||||
|
\ 'name': 'mcs',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'mcs',
|
||||||
|
\ 'command_callback': 'ale_linters#cs#mcs#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#cs#mcs#Handle',
|
||||||
|
\})
|
81
sources_non_forked/ale/ale_linters/cs/mcsc.vim
Normal file
81
sources_non_forked/ale/ale_linters/cs/mcsc.vim
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
call ale#Set('cs_mcsc_options', '')
|
||||||
|
call ale#Set('cs_mcsc_source', '')
|
||||||
|
call ale#Set('cs_mcsc_assembly_path', [])
|
||||||
|
call ale#Set('cs_mcsc_assemblies', [])
|
||||||
|
|
||||||
|
function! s:GetWorkingDirectory(buffer) abort
|
||||||
|
let l:working_directory = ale#Var(a:buffer, 'cs_mcsc_source')
|
||||||
|
|
||||||
|
if !empty(l:working_directory)
|
||||||
|
return l:working_directory
|
||||||
|
endif
|
||||||
|
|
||||||
|
return expand('#' . a:buffer . ':p:h')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcsc#GetCommand(buffer) abort
|
||||||
|
" Pass assembly paths via the -lib: parameter.
|
||||||
|
let l:path_list = ale#Var(a:buffer, 'cs_mcsc_assembly_path')
|
||||||
|
|
||||||
|
let l:lib_option = !empty(l:path_list)
|
||||||
|
\ ? '-lib:' . join(map(copy(l:path_list), 'ale#Escape(v:val)'), ',')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" Pass paths to DLL files via the -r: parameter.
|
||||||
|
let l:assembly_list = ale#Var(a:buffer, 'cs_mcsc_assemblies')
|
||||||
|
|
||||||
|
let l:r_option = !empty(l:assembly_list)
|
||||||
|
\ ? '-r:' . join(map(copy(l:assembly_list), 'ale#Escape(v:val)'), ',')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" register temporary module target file with ale
|
||||||
|
let l:out = tempname()
|
||||||
|
call ale#engine#ManageFile(a:buffer, l:out)
|
||||||
|
|
||||||
|
" The code is compiled as a module and the output is redirected to a
|
||||||
|
" temporary file.
|
||||||
|
return ale#path#CdString(s:GetWorkingDirectory(a:buffer))
|
||||||
|
\ . 'mcs -unsafe'
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'cs_mcsc_options')
|
||||||
|
\ . ' ' . l:lib_option
|
||||||
|
\ . ' ' . l:r_option
|
||||||
|
\ . ' -out:' . l:out
|
||||||
|
\ . ' -t:module'
|
||||||
|
\ . ' -recurse:' . ale#Escape('*.cs')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcsc#Handle(buffer, lines) abort
|
||||||
|
" Look for lines like the following.
|
||||||
|
"
|
||||||
|
" Tests.cs(12,29): error CSXXXX: ; expected
|
||||||
|
"
|
||||||
|
" NOTE: pattern also captures file name as linter compiles all
|
||||||
|
" files within the source tree rooted at the specified source
|
||||||
|
" path and not just the file loaded in the buffer
|
||||||
|
let l:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
let l:dir = s:GetWorkingDirectory(a:buffer)
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'code': l:match[5],
|
||||||
|
\ 'text': l:match[6],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cs',{
|
||||||
|
\ 'name': 'mcsc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'mcs',
|
||||||
|
\ 'command_callback': 'ale_linters#cs#mcsc#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#cs#mcsc#Handle',
|
||||||
|
\ 'lint_file': 1
|
||||||
|
\})
|
18
sources_non_forked/ale/ale_linters/css/csslint.vim
Normal file
18
sources_non_forked/ale/ale_linters/css/csslint.vim
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: This file adds support for checking CSS code with csslint.
|
||||||
|
|
||||||
|
function! ale_linters#css#csslint#GetCommand(buffer) abort
|
||||||
|
let l:csslintrc = ale#path#FindNearestFile(a:buffer, '.csslintrc')
|
||||||
|
let l:config_option = !empty(l:csslintrc)
|
||||||
|
\ ? '--config=' . ale#Escape(l:csslintrc)
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
return 'csslint --format=compact ' . l:config_option . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('css', {
|
||||||
|
\ 'name': 'csslint',
|
||||||
|
\ 'executable': 'csslint',
|
||||||
|
\ 'command_callback': 'ale_linters#css#csslint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#css#HandleCSSLintFormat',
|
||||||
|
\})
|
24
sources_non_forked/ale/ale_linters/css/stylelint.vim
Normal file
24
sources_non_forked/ale/ale_linters/css/stylelint.vim
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
" Author: diartyz <diartyz@gmail.com>
|
||||||
|
|
||||||
|
call ale#Set('css_stylelint_executable', 'stylelint')
|
||||||
|
call ale#Set('css_stylelint_options', '')
|
||||||
|
call ale#Set('css_stylelint_use_global', 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')
|
||||||
|
\ . ' --stdin-filename %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('css', {
|
||||||
|
\ 'name': 'stylelint',
|
||||||
|
\ 'executable_callback': 'ale_linters#css#stylelint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#css#stylelint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
|
||||||
|
\})
|
56
sources_non_forked/ale/ale_linters/cuda/nvcc.vim
Normal file
56
sources_non_forked/ale/ale_linters/cuda/nvcc.vim
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
" Author: blahgeek <i@blahgeek.com>
|
||||||
|
" Description: NVCC linter for cuda files
|
||||||
|
|
||||||
|
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 = 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
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cuda#nvcc#HandleNVCCFormat(buffer, lines) abort
|
||||||
|
" Look for lines like the following.
|
||||||
|
"
|
||||||
|
" test.cu(8): error: argument of type "void *" is incompatible with parameter of type "int *"
|
||||||
|
let l:pattern = '\v^([^:\(\)]+):?\(?(\d+)\)?:(\d+)?:?\s*\w*\s*(error|warning): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
|
||||||
|
let l:item = {
|
||||||
|
\ 'lnum': str2nr(l:match[2]),
|
||||||
|
\ 'type': l:match[4] =~# 'error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\ 'filename': fnamemodify(l:match[1], ':p'),
|
||||||
|
\}
|
||||||
|
|
||||||
|
if !empty(l:match[3])
|
||||||
|
let l:item.col = str2nr(l:match[3])
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, l:item)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cuda', {
|
||||||
|
\ 'name': 'nvcc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#cuda#nvcc#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#cuda#nvcc#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#cuda#nvcc#HandleNVCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
79
sources_non_forked/ale/ale_linters/d/dmd.vim
Normal file
79
sources_non_forked/ale/ale_linters/d/dmd.vim
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
" 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')
|
||||||
|
" Returning an empty string skips to the DMD command.
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:dub_file = s:FindDUBConfig(a:buffer)
|
||||||
|
|
||||||
|
if empty(l:dub_file)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
" To support older dub versions, we just change the directory to
|
||||||
|
" the directory where we found the dub config, and then run `dub describe`
|
||||||
|
" from that directory.
|
||||||
|
return 'cd ' . ale#Escape(fnamemodify(l:dub_file, ':h'))
|
||||||
|
\ . ' && dub describe --import-paths'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#d#dmd#DMDCommand(buffer, dub_output) abort
|
||||||
|
let l:import_list = []
|
||||||
|
|
||||||
|
" Build a list of import paths generated from DUB, if available.
|
||||||
|
for l:line in a:dub_output
|
||||||
|
if !empty(l:line)
|
||||||
|
" The arguments must be '-Ifilename', not '-I filename'
|
||||||
|
call add(l:import_list, '-I' . ale#Escape(l:line))
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return 'dmd '. join(l:import_list) . ' -o- -vcolumns -c %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#d#dmd#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns lines like the following:
|
||||||
|
" /tmp/tmp.qclsa7qLP7/file.d(1): Error: function declaration without return type. (Note that constructors are always named 'this')
|
||||||
|
" /tmp/tmp.G1L5xIizvB.d(8,8): Error: module weak_reference is in file 'dstruct/weak_reference.d' which cannot be read
|
||||||
|
let l:pattern = '^[^(]\+(\([0-9]\+\)\,\?\([0-9]*\)): \([^:]\+\): \(.\+\)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1],
|
||||||
|
\ 'col': l:match[2],
|
||||||
|
\ 'type': l:match[3] is# 'Warning' ? 'W' : 'E',
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('d', {
|
||||||
|
\ 'name': 'dmd',
|
||||||
|
\ 'executable': 'dmd',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#d#dmd#DUBCommand', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#d#dmd#DMDCommand', 'output_stream': 'stderr'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale_linters#d#dmd#Handle',
|
||||||
|
\})
|
25
sources_non_forked/ale/ale_linters/dafny/dafny.vim
Normal file
25
sources_non_forked/ale/ale_linters/dafny/dafny.vim
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
" Author: Taylor Blau <me@ttaylorr.com>
|
||||||
|
|
||||||
|
function! ale_linters#dafny#dafny#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v(.*)\((\d+),(\d+)\): (.*): (.*)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\ 'type': l:match[4] =~# '^Error' ? 'E' : 'W'
|
||||||
|
\ })
|
||||||
|
endfor
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('dafny', {
|
||||||
|
\ 'name': 'dafny',
|
||||||
|
\ 'executable': 'dafny',
|
||||||
|
\ 'command': 'dafny %s /compile:0',
|
||||||
|
\ 'callback': 'ale_linters#dafny#dafny#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\ })
|
41
sources_non_forked/ale/ale_linters/dart/dartanalyzer.vim
Normal file
41
sources_non_forked/ale/ale_linters/dart/dartanalyzer.vim
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: Check Dart files with dartanalyzer
|
||||||
|
|
||||||
|
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)
|
||||||
|
\ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '')
|
||||||
|
\ . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#dart#dartanalyzer#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v^ ([a-z]+) . (.+) at (.+):(\d+):(\d+) . (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'type': l:match[1] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[6] . ': ' . l:match[2],
|
||||||
|
\ 'lnum': str2nr(l:match[4]),
|
||||||
|
\ 'col': str2nr(l:match[5]),
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('dart', {
|
||||||
|
\ 'name': 'dartanalyzer',
|
||||||
|
\ 'executable_callback': 'ale_linters#dart#dartanalyzer#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#dart#dartanalyzer#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#dart#dartanalyzer#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
30
sources_non_forked/ale/ale_linters/dart/language_server.vim
Normal file
30
sources_non_forked/ale/ale_linters/dart/language_server.vim
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
" Author: aurieh <me@aurieh.me>
|
||||||
|
" Description: A language server for dart
|
||||||
|
|
||||||
|
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#GetLanguage(buffer) abort
|
||||||
|
return 'dart'
|
||||||
|
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
|
||||||
|
let l:pubspec = ale#path#FindNearestFile(a:buffer, 'pubspec.yaml')
|
||||||
|
|
||||||
|
return !empty(l:pubspec) ? fnamemodify(l:pubspec, ':h:h') : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('dart', {
|
||||||
|
\ 'name': 'language_server',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable_callback': 'ale_linters#dart#language_server#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#dart#language_server#GetExecutable',
|
||||||
|
\ 'language_callback': 'ale_linters#dart#language_server#GetLanguage',
|
||||||
|
\ 'project_root_callback': 'ale_linters#dart#language_server#GetProjectRoot',
|
||||||
|
\})
|
||||||
|
|
97
sources_non_forked/ale/ale_linters/dockerfile/hadolint.vim
Normal file
97
sources_non_forked/ale/ale_linters/dockerfile/hadolint.vim
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
" Author: hauleth - https://github.com/hauleth
|
||||||
|
|
||||||
|
" always, yes, never
|
||||||
|
call ale#Set('dockerfile_hadolint_use_docker', 'never')
|
||||||
|
call ale#Set('dockerfile_hadolint_docker_image', 'hadolint/hadolint')
|
||||||
|
|
||||||
|
function! ale_linters#dockerfile#hadolint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" /dev/stdin:19 DL3001 Pipe chain should start with a raw value.
|
||||||
|
" /dev/stdin:19:3 unexpected thing
|
||||||
|
let l:pattern = '\v^/dev/stdin:(\d+):?(\d+)? ((DL|SC)(\d+) )?(.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:lnum = 0
|
||||||
|
let l:colnum = 0
|
||||||
|
|
||||||
|
if l:match[1] isnot# ''
|
||||||
|
let l:lnum = l:match[1] + 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:match[2] isnot# ''
|
||||||
|
let l:colnum = l:match[2] + 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:type = 'W'
|
||||||
|
let l:text = l:match[6]
|
||||||
|
let l:detail = l:match[6]
|
||||||
|
let l:domain = 'https://github.com/hadolint/hadolint/wiki/'
|
||||||
|
|
||||||
|
if l:match[4] is# 'SC'
|
||||||
|
let l:domain = 'https://github.com/koalaman/shellcheck/wiki/'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:match[5] isnot# ''
|
||||||
|
let l:code = l:match[4] . l:match[5]
|
||||||
|
let l:link = ' ( ' . l:domain . l:code . ' )'
|
||||||
|
let l:detail = l:code . l:link . "\n\n" . l:detail
|
||||||
|
else
|
||||||
|
let l:type = 'E'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:lnum,
|
||||||
|
\ 'col': l:colnum,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'detail': l:detail
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" This is a little different than the typical 'executable' callback. We want
|
||||||
|
" to afford the user the chance to say always use docker, never use docker,
|
||||||
|
" and use docker if the hadolint executable is not present on the system.
|
||||||
|
"
|
||||||
|
" In the case of neither docker nor hadolint executables being present, it
|
||||||
|
" really doesn't matter which we return -- either will have the effect of
|
||||||
|
" 'nope, can't use this linter!'.
|
||||||
|
|
||||||
|
function! ale_linters#dockerfile#hadolint#GetExecutable(buffer) abort
|
||||||
|
let l:use_docker = ale#Var(a:buffer, 'dockerfile_hadolint_use_docker')
|
||||||
|
|
||||||
|
" check for mandatory directives
|
||||||
|
if l:use_docker is# 'never'
|
||||||
|
return 'hadolint'
|
||||||
|
elseif l:use_docker is# 'always'
|
||||||
|
return 'docker'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" if we reach here, we want to use 'hadolint' if present...
|
||||||
|
if executable('hadolint')
|
||||||
|
return 'hadolint'
|
||||||
|
endif
|
||||||
|
|
||||||
|
"... and 'docker' as a fallback.
|
||||||
|
return 'docker'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#dockerfile#hadolint#GetCommand(buffer) abort
|
||||||
|
let l:command = ale_linters#dockerfile#hadolint#GetExecutable(a:buffer)
|
||||||
|
if l:command is# 'docker'
|
||||||
|
return 'docker run --rm -i ' . ale#Var(a:buffer, 'dockerfile_hadolint_docker_image')
|
||||||
|
endif
|
||||||
|
return 'hadolint -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
call ale#linter#Define('dockerfile', {
|
||||||
|
\ 'name': 'hadolint',
|
||||||
|
\ 'executable_callback': 'ale_linters#dockerfile#hadolint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#dockerfile#hadolint#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#dockerfile#hadolint#Handle',
|
||||||
|
\})
|
37
sources_non_forked/ale/ale_linters/elixir/credo.vim
Normal file
37
sources_non_forked/ale/ale_linters/elixir/credo.vim
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
" Author: hauleth - https://github.com/hauleth
|
||||||
|
|
||||||
|
function! ale_linters#elixir#credo#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" lib/filename.ex:19:7: F: Pipe chain should start with a raw value.
|
||||||
|
let l:pattern = '\v:(\d+):?(\d+)?: (.): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
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'
|
||||||
|
let l:type = 'W'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('elixir', {
|
||||||
|
\ 'name': 'credo',
|
||||||
|
\ 'executable': 'mix',
|
||||||
|
\ 'command': 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s',
|
||||||
|
\ 'callback': 'ale_linters#elixir#credo#Handle',
|
||||||
|
\})
|
34
sources_non_forked/ale/ale_linters/elixir/dialyxir.vim
Normal file
34
sources_non_forked/ale/ale_linters/elixir/dialyxir.vim
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
" Author: Fran C. - https://github.com/franciscoj
|
||||||
|
" Description: Add dialyzer support for elixir through dialyxir
|
||||||
|
" https://github.com/jeremyjh/dialyxir
|
||||||
|
|
||||||
|
function! ale_linters#elixir#dialyxir#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" lib/filename.ex:19: Function fname/1 has no local return
|
||||||
|
let l:pattern = '\v(.+):(\d+): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
let l:type = 'W'
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
if bufname(a:buffer) == l:match[1]
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('elixir', {
|
||||||
|
\ 'name': 'dialyxir',
|
||||||
|
\ 'executable': 'mix',
|
||||||
|
\ 'command': 'mix dialyzer',
|
||||||
|
\ 'callback': 'ale_linters#elixir#dialyxir#Handle',
|
||||||
|
\})
|
||||||
|
|
38
sources_non_forked/ale/ale_linters/elixir/dogma.vim
Normal file
38
sources_non_forked/ale/ale_linters/elixir/dogma.vim
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
" Author: archseer - https://github.com/archSeer
|
||||||
|
|
||||||
|
function! ale_linters#elixir#dogma#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" lib/filename.ex:19:7: F: Pipe chain should start with a raw value.
|
||||||
|
let l:pattern = '\v:(\d+):?(\d+)?: (.): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
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'
|
||||||
|
let l:type = 'W'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('elixir', {
|
||||||
|
\ 'name': 'dogma',
|
||||||
|
\ 'executable': 'mix',
|
||||||
|
\ 'command': 'mix help dogma && mix dogma %s --format=flycheck',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\ 'callback': 'ale_linters#elixir#dogma#Handle',
|
||||||
|
\})
|
89
sources_non_forked/ale/ale_linters/elm/make.vim
Normal file
89
sources_non_forked/ale/ale_linters/elm/make.vim
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
" Author: buffalocoder - https://github.com/buffalocoder, soywod - https://github.com/soywod
|
||||||
|
" Description: Elm linting in Ale. Closely follows the Syntastic checker in https://github.com/ElmCast/elm-vim.
|
||||||
|
|
||||||
|
call ale#Set('elm_make_executable', 'elm-make')
|
||||||
|
call ale#Set('elm_make_use_global', 0)
|
||||||
|
|
||||||
|
function! ale_linters#elm#make#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'elm_make', [
|
||||||
|
\ 'node_modules/.bin/elm-make',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#elm#make#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
let l:is_windows = has('win32')
|
||||||
|
let l:temp_dir = l:is_windows ? $TMP : $TMPDIR
|
||||||
|
let l:unparsed_lines = []
|
||||||
|
for l:line in a:lines
|
||||||
|
if l:line[0] is# '['
|
||||||
|
let l:errors = json_decode(l:line)
|
||||||
|
|
||||||
|
for l:error in l:errors
|
||||||
|
" Check if file is from the temp directory.
|
||||||
|
" Filters out any errors not related to the buffer.
|
||||||
|
if l:is_windows
|
||||||
|
let l:file_is_buffer = l:error.file[0:len(l:temp_dir) - 1] is? l:temp_dir
|
||||||
|
else
|
||||||
|
let l:file_is_buffer = l:error.file[0:len(l:temp_dir) - 1] is# l:temp_dir
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:file_is_buffer
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:error.region.start.line,
|
||||||
|
\ 'col': l:error.region.start.column,
|
||||||
|
\ 'end_lnum': l:error.region.end.line,
|
||||||
|
\ 'end_col': l:error.region.end.column,
|
||||||
|
\ 'type': (l:error.type is? 'error') ? 'E' : 'W',
|
||||||
|
\ 'text': l:error.overview,
|
||||||
|
\ 'detail': l:error.overview . "\n\n" . l:error.details
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
elseif l:line isnot# 'Successfully generated /dev/null'
|
||||||
|
call add(l:unparsed_lines, l:line)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if len(l:unparsed_lines) > 0
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': 1,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': l:unparsed_lines[0],
|
||||||
|
\ 'detail': join(l:unparsed_lines, "\n")
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Return the command to execute the linter in the projects directory.
|
||||||
|
" If it doesn't, then this will fail when imports are needed.
|
||||||
|
function! ale_linters#elm#make#GetCommand(buffer) abort
|
||||||
|
let l:elm_package = ale#path#FindNearestFile(a:buffer, 'elm-package.json')
|
||||||
|
let l:elm_exe = ale_linters#elm#make#GetExecutable(a:buffer)
|
||||||
|
if empty(l:elm_package)
|
||||||
|
let l:dir_set_cmd = ''
|
||||||
|
else
|
||||||
|
let l:root_dir = fnamemodify(l:elm_package, ':p:h')
|
||||||
|
let l:dir_set_cmd = 'cd ' . ale#Escape(l:root_dir) . ' && '
|
||||||
|
endif
|
||||||
|
|
||||||
|
" The elm-make compiler, at the time of this writing, uses '/dev/null' as
|
||||||
|
" a sort of flag to tell the compiler not to generate an output file,
|
||||||
|
" which is why this is hard coded here. It does not use NUL on Windows.
|
||||||
|
" Source: https://github.com/elm-lang/elm-make/blob/master/src/Flags.hs
|
||||||
|
let l:elm_cmd = ale#Escape(l:elm_exe)
|
||||||
|
\ . ' --report=json'
|
||||||
|
\ . ' --output=/dev/null'
|
||||||
|
|
||||||
|
return l:dir_set_cmd . ' ' . l:elm_cmd . ' %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'
|
||||||
|
\})
|
96
sources_non_forked/ale/ale_linters/erlang/erlc.vim
Normal file
96
sources_non_forked/ale/ale_linters/erlang/erlc.vim
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
" Author: Magnus Ottenklinger - https://github.com/evnu
|
||||||
|
|
||||||
|
let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#erlang#erlc#GetCommand(buffer) abort
|
||||||
|
let l:output_file = tempname()
|
||||||
|
call ale#engine#ManageFile(a:buffer, l:output_file)
|
||||||
|
|
||||||
|
return 'erlc -o ' . ale#Escape(l:output_file)
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'erlang_erlc_options')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#erlang#erlc#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns like the following:
|
||||||
|
"
|
||||||
|
" error.erl:4: variable 'B' is unbound
|
||||||
|
" error.erl:3: Warning: function main/0 is unused
|
||||||
|
" error.erl:4: Warning: variable 'A' is unused
|
||||||
|
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+): (Warning: )?(.+)$'
|
||||||
|
|
||||||
|
" parse_transforms are a special case. The error message does not indicate a location:
|
||||||
|
" error.erl: undefined parse transform 'some_parse_transform'
|
||||||
|
let l:pattern_parse_transform = '\v(undefined parse transform .*)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
let l:pattern_no_module_definition = '\v(no module definition)$'
|
||||||
|
let l:pattern_unused = '\v(.* is unused)$'
|
||||||
|
|
||||||
|
let l:is_hrl = fnamemodify(bufname(a:buffer), ':e') is# 'hrl'
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
let l:match = matchlist(l:line, l:pattern)
|
||||||
|
|
||||||
|
" Determine if the output indicates an error. We distinguish between two cases:
|
||||||
|
"
|
||||||
|
" 1) normal errors match l:pattern
|
||||||
|
" 2) parse_transform errors match l:pattern_parse_transform
|
||||||
|
"
|
||||||
|
" If none of the patterns above match, the line can be ignored
|
||||||
|
if len(l:match) == 0 " not a 'normal' warning or error
|
||||||
|
let l:match_parse_transform = matchlist(l:line, l:pattern_parse_transform)
|
||||||
|
|
||||||
|
if len(l:match_parse_transform) == 0 " also not a parse_transform error
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': 0,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': l:match_parse_transform[0],
|
||||||
|
\})
|
||||||
|
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:line = l:match[2]
|
||||||
|
let l:warning_or_text = l:match[3]
|
||||||
|
let l:text = l:match[4]
|
||||||
|
|
||||||
|
" If this file is a header .hrl, ignore the following expected messages:
|
||||||
|
" - 'no module definition'
|
||||||
|
" - 'X is unused'
|
||||||
|
if l:is_hrl && (
|
||||||
|
\ match(l:text, l:pattern_no_module_definition) != -1
|
||||||
|
\ || match(l:text, l:pattern_unused) != -1
|
||||||
|
\)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:warning_or_text)
|
||||||
|
let l:type = 'W'
|
||||||
|
else
|
||||||
|
let l:type = 'E'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': l:line,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('erlang', {
|
||||||
|
\ 'name': 'erlc',
|
||||||
|
\ 'executable': 'erlc',
|
||||||
|
\ 'command_callback': 'ale_linters#erlang#erlc#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#erlang#erlc#Handle',
|
||||||
|
\})
|
53
sources_non_forked/ale/ale_linters/erlang/syntaxerl.vim
Normal file
53
sources_non_forked/ale/ale_linters/erlang/syntaxerl.vim
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
" Author: Dmitri Vereshchagin <dmitri.vereshchagin@gmail.com>
|
||||||
|
" Description: SyntaxErl linter for Erlang files
|
||||||
|
|
||||||
|
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')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v\C:(\d+):( warning:)? (.+)'
|
||||||
|
let l:loclist = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:loclist, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\ 'type': empty(l:match[2]) ? 'E' : 'W',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
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',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#erlang#syntaxerl#FeatureCheck'},
|
||||||
|
\ {'callback': 'ale_linters#erlang#syntaxerl#GetCommand'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale_linters#erlang#syntaxerl#Handle',
|
||||||
|
\})
|
25
sources_non_forked/ale/ale_linters/eruby/erb.vim
Normal file
25
sources_non_forked/ale/ale_linters/eruby/erb.vim
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
" Author: Matthias Guenther - https://wikimatze.de, Eddie Lebow https://github.com/elebow
|
||||||
|
" Description: ERB from the Ruby standard library, for eruby/erb files
|
||||||
|
|
||||||
|
function! ale_linters#eruby#erb#GetCommand(buffer) abort
|
||||||
|
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
|
||||||
|
|
||||||
|
if empty(l:rails_root)
|
||||||
|
return 'erb -P -T - -x %t | ruby -c'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" 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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('eruby', {
|
||||||
|
\ 'name': 'erb',
|
||||||
|
\ 'aliases': ['erubylint'],
|
||||||
|
\ 'executable': 'erb',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'command_callback': 'ale_linters#eruby#erb#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
|
||||||
|
\})
|
||||||
|
|
35
sources_non_forked/ale/ale_linters/eruby/erubi.vim
Normal file
35
sources_non_forked/ale/ale_linters/eruby/erubi.vim
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
" Author: Eddie Lebow https://github.com/elebow
|
||||||
|
" Description: eruby checker using `erubi`
|
||||||
|
|
||||||
|
function! ale_linters#eruby#erubi#CheckErubi(buffer) abort
|
||||||
|
return 'ruby -r erubi/capture_end -e ' . ale#Escape('""')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#eruby#erubi#GetCommand(buffer, check_erubi_output) abort
|
||||||
|
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
|
||||||
|
|
||||||
|
if (!empty(a:check_erubi_output))
|
||||||
|
" The empty command in CheckErubi returns nothing if erubi runs and
|
||||||
|
" emits an error if erubi is not present
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
if empty(l:rails_root)
|
||||||
|
return 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read).src') . '< %t | ruby -c'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Rails-flavored eRuby does not comply with the standard as understood by
|
||||||
|
" Erubi, 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 erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('eruby', {
|
||||||
|
\ 'name': 'erubi',
|
||||||
|
\ 'executable': 'ruby',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#eruby#erubi#CheckErubi'},
|
||||||
|
\ {'callback': 'ale_linters#eruby#erubi#GetCommand', 'output_stream': 'stderr'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
|
||||||
|
\})
|
23
sources_non_forked/ale/ale_linters/eruby/erubis.vim
Normal file
23
sources_non_forked/ale/ale_linters/eruby/erubis.vim
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
" Author: Jake Zimmerman <jake@zimmerman.io>, Eddie Lebow https://github.com/elebow
|
||||||
|
" Description: eruby checker using `erubis`, instead of `erb`
|
||||||
|
|
||||||
|
function! ale_linters#eruby#erubis#GetCommand(buffer) abort
|
||||||
|
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
|
||||||
|
|
||||||
|
if empty(l:rails_root)
|
||||||
|
return 'erubis -x %t | ruby -c'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Rails-flavored eRuby does not comply with the standard as understood by
|
||||||
|
" Erubis, 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 erubis -e ' . ale#Escape('puts Erubis::Eruby.new($stdin.read.gsub(%{<%=},%{<%})).src') . '< %t | ruby -c'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('eruby', {
|
||||||
|
\ 'name': 'erubis',
|
||||||
|
\ 'executable': 'erubis',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'command_callback': 'ale_linters#eruby#erubis#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
|
||||||
|
\})
|
67
sources_non_forked/ale/ale_linters/fish/fish.vim
Normal file
67
sources_non_forked/ale/ale_linters/fish/fish.vim
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
" Author: Niraj Thapaliya - https://github.com/nthapaliya
|
||||||
|
" Description: Lints fish files using fish -n
|
||||||
|
|
||||||
|
function! ale_linters#fish#fish#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns such as:
|
||||||
|
"
|
||||||
|
" home/.config/fish/functions/foo.fish (line 1): Missing end to balance this function definition
|
||||||
|
" function foo
|
||||||
|
" ^
|
||||||
|
"
|
||||||
|
" OR, patterns such as:
|
||||||
|
"
|
||||||
|
" Unsupported use of '||'. In fish, please use 'COMMAND; or COMMAND'.
|
||||||
|
" /tmp/vLz620o/258/test.fish (line 2): if set -q SSH_CLIENT || set -q SSH_TTY
|
||||||
|
" ^
|
||||||
|
"
|
||||||
|
" fish -n can return errors in either format.
|
||||||
|
let l:pattern = '^\(.* (line \(\d\+\)): \)\(.*\)$'
|
||||||
|
let l:column_pattern = '^ *\^'
|
||||||
|
let l:output = []
|
||||||
|
let l:column_offset = 0
|
||||||
|
let l:last_line_with_message = ''
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
" Look for error lines first.
|
||||||
|
let l:match = matchlist(l:line, l:pattern)
|
||||||
|
|
||||||
|
if !empty(l:match)
|
||||||
|
if !empty(l:last_line_with_message)
|
||||||
|
let l:text = l:last_line_with_message
|
||||||
|
else
|
||||||
|
let l:text = l:match[3]
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:column_offset = len(l:match[1])
|
||||||
|
|
||||||
|
let l:last_line_with_message = ''
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'lnum': str2nr(l:match[2]),
|
||||||
|
\ 'text': l:text,
|
||||||
|
\})
|
||||||
|
else
|
||||||
|
" Look for column markers like ' ^' second.
|
||||||
|
" The column index will be set according to how long the line is.
|
||||||
|
let l:column_match = matchstr(l:line, l:column_pattern)
|
||||||
|
|
||||||
|
if !empty(l:column_match) && !empty(l:output)
|
||||||
|
let l:output[-1].col = len(l:column_match) - l:column_offset
|
||||||
|
let l:last_line_with_message = ''
|
||||||
|
else
|
||||||
|
let l:last_line_with_message = l:line
|
||||||
|
let l:column_offset = 0
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('fish', {
|
||||||
|
\ 'name': 'fish',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'fish',
|
||||||
|
\ 'command': 'fish -n %t',
|
||||||
|
\ 'callback': 'ale_linters#fish#fish#Handle',
|
||||||
|
\})
|
86
sources_non_forked/ale/ale_linters/fortran/gcc.vim
Normal file
86
sources_non_forked/ale/ale_linters/fortran/gcc.vim
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" 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
|
||||||
|
|
||||||
|
" 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
|
||||||
|
|
||||||
|
function! ale_linters#fortran#gcc#Handle(buffer, lines) abort
|
||||||
|
" We have to match a starting line and a later ending line together,
|
||||||
|
" like so.
|
||||||
|
"
|
||||||
|
" :21.34:
|
||||||
|
" Error: Expected comma in I/O list at (1)
|
||||||
|
let l:line_marker_pattern = ':\(\d\+\)[.:]\=\(\d\+\)\=:\=$'
|
||||||
|
let l:message_pattern = '^\(Error\|Warning\): \(.\+\)$'
|
||||||
|
let l:looking_for_message = 0
|
||||||
|
let l:last_loclist_obj = {}
|
||||||
|
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
if l:looking_for_message
|
||||||
|
let l:match = matchlist(l:line, l:message_pattern)
|
||||||
|
else
|
||||||
|
let l:match = matchlist(l:line, l:line_marker_pattern)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if len(l:match) == 0
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:looking_for_message
|
||||||
|
let l:looking_for_message = 0
|
||||||
|
|
||||||
|
" Now we have the text, we can set it and add the error.
|
||||||
|
let l:last_loclist_obj.text = l:match[2]
|
||||||
|
let l:last_loclist_obj.type = l:match[1] is# 'Warning' ? 'W' : 'E'
|
||||||
|
call add(l:output, l:last_loclist_obj)
|
||||||
|
else
|
||||||
|
let l:last_loclist_obj = {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\}
|
||||||
|
|
||||||
|
" Start looking for the message and error type.
|
||||||
|
let l:looking_for_message = 1
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
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') . ' '
|
||||||
|
\ . '-'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('fortran', {
|
||||||
|
\ 'name': 'gcc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#fortran#gcc#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#fortran#gcc#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#fortran#gcc#Handle',
|
||||||
|
\})
|
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Jansen Mitchell https://github.com/JansenMitchell
|
||||||
|
" Description: proselint for Fountain files
|
||||||
|
|
||||||
|
call ale#linter#Define('fountain', {
|
||||||
|
\ 'name': 'proselint',
|
||||||
|
\ 'executable': 'proselint',
|
||||||
|
\ 'command': 'proselint %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
41
sources_non_forked/ale/ale_linters/fuse/fusionlint.vim
Normal file
41
sources_non_forked/ale/ale_linters/fuse/fusionlint.vim
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
" Author: RyanSquared <vandor2012@gmail.com>
|
||||||
|
" Description: `fusion-lint` linter for FusionScript files
|
||||||
|
|
||||||
|
let g:ale_fuse_fusionlint_executable =
|
||||||
|
\ get(g:, 'ale_fuse_fusionlint_executable', 'fusion-lint')
|
||||||
|
|
||||||
|
let g:ale_fuse_fusionlint_options =
|
||||||
|
\ get(g:, 'ale_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#Var(a:buffer, 'fuse_fusionlint_options')
|
||||||
|
\ . ' --filename %s -i'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#fuse#fusionlint#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '^.*:\(\d\+\):\(\d\+\): (\([WE]\)\d\+) \(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\ 'type': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('fuse', {
|
||||||
|
\ 'name': 'fusionlint',
|
||||||
|
\ 'executable_callback': 'ale_linters#fuse#fusionlint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#fuse#fusionlint#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#fuse#fusionlint#Handle',
|
||||||
|
\})
|
52
sources_non_forked/ale/ale_linters/gitcommit/gitlint.vim
Normal file
52
sources_non_forked/ale/ale_linters/gitcommit/gitlint.vim
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
" Author: Nick Yamane <nick.diego@gmail.com>
|
||||||
|
" 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', 0)
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#gitcommit#gitlint#GetExecutable(buffer) abort
|
||||||
|
return ale#python#FindExecutable(a:buffer, 'gitcommit_gitlint', ['gitlint'])
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
let l:pattern = '\v^(\d+): (\w+) (.*)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:code = l:match[2]
|
||||||
|
|
||||||
|
let l:item = {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\ 'code': l:code,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\}
|
||||||
|
|
||||||
|
call add(l:output, l:item)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
call ale#linter#Define('gitcommit', {
|
||||||
|
\ 'name': 'gitlint',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable_callback': 'ale_linters#gitcommit#gitlint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#gitcommit#gitlint#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#gitcommit#gitlint#Handle',
|
||||||
|
\})
|
||||||
|
|
46
sources_non_forked/ale/ale_linters/glsl/glslang.vim
Normal file
46
sources_non_forked/ale/ale_linters/glsl/glslang.vim
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
" Author: Sven-Hendrik Haase <svenstaro@gmail.com>
|
||||||
|
" Description: glslang-based linter for glsl files
|
||||||
|
"
|
||||||
|
" 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
|
||||||
|
|
||||||
|
function! ale_linters#glsl#glslang#GetCommand(buffer) abort
|
||||||
|
return ale_linters#glsl#glslang#GetExecutable(a:buffer)
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'glsl_glslang_options')
|
||||||
|
\ . ' ' . '-C %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#glsl#glslang#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns like the following:
|
||||||
|
"
|
||||||
|
" ERROR: 0:5: 'foo' : undeclared identifier
|
||||||
|
let l:pattern = '^\(.\+\): \(\d\+\):\(\d\+\): \(.\+\)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:match[3]),
|
||||||
|
\ 'col': str2nr(l:match[2]),
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\ 'type': l:match[1] is# 'ERROR' ? 'E' : 'W',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('glsl', {
|
||||||
|
\ 'name': 'glslang',
|
||||||
|
\ 'executable_callback': 'ale_linters#glsl#glslang#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#glsl#glslang#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#glsl#glslang#Handle',
|
||||||
|
\})
|
38
sources_non_forked/ale/ale_linters/glsl/glslls.vim
Normal file
38
sources_non_forked/ale/ale_linters/glsl/glslls.vim
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
" Author: Sven-Hendrik Haase <svenstaro@gmail.com>
|
||||||
|
" Description: A language server for glsl
|
||||||
|
|
||||||
|
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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#glsl#glslls#GetLanguage(buffer) abort
|
||||||
|
return 'glsl'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#glsl#glslls#GetProjectRoot(buffer) abort
|
||||||
|
let l:project_root = ale#c#FindProjectRoot(a:buffer)
|
||||||
|
|
||||||
|
return !empty(l:project_root) ? fnamemodify(l:project_root, ':h:h') : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('glsl', {
|
||||||
|
\ 'name': 'glslls',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable_callback': 'ale_linters#glsl#glslls#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#glsl#glslls#GetCommand',
|
||||||
|
\ 'language_callback': 'ale_linters#glsl#glslls#GetLanguage',
|
||||||
|
\ 'project_root_callback': 'ale_linters#glsl#glslls#GetProjectRoot',
|
||||||
|
\})
|
81
sources_non_forked/ale/ale_linters/go/gobuild.vim
Normal file
81
sources_non_forked/ale/ale_linters/go/gobuild.vim
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
" Author: Joshua Rubin <joshua@rubixconsulting.com>, Ben Reedy <https://github.com/breed808>,
|
||||||
|
" Jeff Willette <jrwillette88@gmail.com>
|
||||||
|
" Description: go build for Go files
|
||||||
|
" inspired by work from dzhou121 <dzhou121@gmail.com>
|
||||||
|
|
||||||
|
call ale#Set('go_gobuild_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#go#gobuild#ResetEnv() abort
|
||||||
|
unlet! s:go_env
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#go#gobuild#GoEnv(buffer) abort
|
||||||
|
if exists('s:go_env')
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return 'go env GOPATH GOROOT'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#go#gobuild#GetCommand(buffer, goenv_output) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'go_gobuild_options')
|
||||||
|
|
||||||
|
if !exists('s:go_env')
|
||||||
|
let s:go_env = {
|
||||||
|
\ 'GOPATH': a:goenv_output[0],
|
||||||
|
\ 'GOROOT': a:goenv_output[1],
|
||||||
|
\}
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:gopath_env_command = has('win32')
|
||||||
|
\ ? 'set GOPATH=' . ale#Escape(s:go_env.GOPATH) . ' && '
|
||||||
|
\ : 'GOPATH=' . ale#Escape(s:go_env.GOPATH) . ' '
|
||||||
|
|
||||||
|
" Run go test in local directory with relative path
|
||||||
|
return l:gopath_env_command
|
||||||
|
\ . ale#path#BufferCdString(a:buffer)
|
||||||
|
\ . 'go test'
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' -c -o /dev/null ./'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#go#gobuild#GetMatches(lines) abort
|
||||||
|
" Matches patterns like the following:
|
||||||
|
"
|
||||||
|
" file.go:27: missing argument for Printf("%s"): format reads arg 2, have only 1 args
|
||||||
|
" file.go:53:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
|
||||||
|
" file.go:5:2: expected declaration, found 'STRING' "log"
|
||||||
|
|
||||||
|
" go test returns relative paths so use tail of filename as part of pattern matcher
|
||||||
|
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:? (.+)$'
|
||||||
|
|
||||||
|
return ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#go#gobuild#Handler(buffer, lines) abort
|
||||||
|
let l:dir = expand('#' . a:buffer . ':p:h')
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale_linters#go#gobuild#GetMatches(a:lines)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\ 'type': 'E',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'go build',
|
||||||
|
\ 'executable': 'go',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#go#gobuild#GoEnv', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#go#gobuild#GetCommand', 'output_stream': 'stderr'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale_linters#go#gobuild#Handler',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
10
sources_non_forked/ale/ale_linters/go/gofmt.vim
Normal file
10
sources_non_forked/ale/ale_linters/go/gofmt.vim
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
" Author: neersighted <bjorn@neersighted.com>
|
||||||
|
" Description: gofmt for Go files
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'gofmt',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'gofmt',
|
||||||
|
\ 'command': 'gofmt -e %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
||||||
|
\})
|
10
sources_non_forked/ale/ale_linters/go/golint.vim
Normal file
10
sources_non_forked/ale/ale_linters/go/golint.vim
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
" Author: neersighted <bjorn@neersighted.com>
|
||||||
|
" Description: golint for Go files
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'golint',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable': 'golint',
|
||||||
|
\ 'command': 'golint %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
62
sources_non_forked/ale/ale_linters/go/gometalinter.vim
Normal file
62
sources_non_forked/ale/ale_linters/go/gometalinter.vim
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
" Author: Ben Reedy <https://github.com/breed808>, Jeff Willette <jrwillette88@gmail.com>
|
||||||
|
" Description: Adds support for the gometalinter suite for Go files
|
||||||
|
|
||||||
|
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')
|
||||||
|
|
||||||
|
" BufferCdString is used so that we can be sure the paths output from gometalinter can
|
||||||
|
" be calculated to absolute paths in the Handler
|
||||||
|
if l:lint_package
|
||||||
|
return ale#path#BufferCdString(a:buffer)
|
||||||
|
\ . ale#Escape(l:executable)
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#path#BufferCdString(a:buffer)
|
||||||
|
\ . ale#Escape(l:executable)
|
||||||
|
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename))
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#go#gometalinter#GetMatches(lines) abort
|
||||||
|
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:?:?(warning|error):?\s\*?(.+)$'
|
||||||
|
|
||||||
|
return ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#go#gometalinter#Handler(buffer, lines) abort
|
||||||
|
let l:dir = expand('#' . a:buffer . ':p:h')
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale_linters#go#gometalinter#GetMatches(a:lines)
|
||||||
|
" l:match[1] will already be an absolute path, output from gometalinter
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'type': tolower(l:match[4]) is# 'warning' ? 'W' : 'E',
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'gometalinter',
|
||||||
|
\ 'executable_callback': 'ale_linters#go#gometalinter#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#go#gometalinter#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#go#gometalinter#Handler',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
15
sources_non_forked/ale/ale_linters/go/gosimple.vim
Normal file
15
sources_non_forked/ale/ale_linters/go/gosimple.vim
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
" Author: Ben Reedy <https://github.com/breed808>
|
||||||
|
" Description: gosimple for Go files
|
||||||
|
|
||||||
|
function! ale_linters#go#gosimple#GetCommand(buffer) abort
|
||||||
|
return ale#path#BufferCdString(a:buffer) . ' gosimple .'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'gosimple',
|
||||||
|
\ 'executable': 'gosimple',
|
||||||
|
\ 'command_callback': 'ale_linters#go#gosimple#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#go#Handler',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
20
sources_non_forked/ale/ale_linters/go/gotype.vim
Normal file
20
sources_non_forked/ale/ale_linters/go/gotype.vim
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
" Author: Jelte Fennema <github-public@jeltef.nl>
|
||||||
|
" Description: gotype for Go files
|
||||||
|
|
||||||
|
function! ale_linters#go#gotype#GetCommand(buffer) abort
|
||||||
|
if expand('#' . a:buffer . ':p') =~# '_test\.go$'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
return ale#path#BufferCdString(a:buffer) . ' gotype .'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'gotype',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'gotype',
|
||||||
|
\ 'command_callback': 'ale_linters#go#gotype#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#go#Handler',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
18
sources_non_forked/ale/ale_linters/go/govet.vim
Normal file
18
sources_non_forked/ale/ale_linters/go/govet.vim
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
" Author: neersighted <bjorn@neersighted.com>
|
||||||
|
" Description: go vet for Go files
|
||||||
|
"
|
||||||
|
" Author: John Eikenberry <jae@zhar.net>
|
||||||
|
" Description: updated to work with go1.10
|
||||||
|
|
||||||
|
function! ale_linters#go#govet#GetCommand(buffer) abort
|
||||||
|
return ale#path#BufferCdString(a:buffer) . ' go vet .'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'go vet',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'go',
|
||||||
|
\ 'command_callback': 'ale_linters#go#govet#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#go#Handler',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
33
sources_non_forked/ale/ale_linters/go/staticcheck.vim
Normal file
33
sources_non_forked/ale/ale_linters/go/staticcheck.vim
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
" Author: Ben Reedy <https://github.com/breed808>
|
||||||
|
" Description: staticcheck for Go files
|
||||||
|
|
||||||
|
call ale#Set('go_staticcheck_options', '')
|
||||||
|
call ale#Set('go_staticcheck_lint_package', 0)
|
||||||
|
|
||||||
|
function! ale_linters#go#staticcheck#GetCommand(buffer) abort
|
||||||
|
let l:filename = expand('#' . a:buffer . ':t')
|
||||||
|
let l:options = ale#Var(a:buffer, 'go_staticcheck_options')
|
||||||
|
let l:lint_package = ale#Var(a:buffer, 'go_staticcheck_lint_package')
|
||||||
|
|
||||||
|
" BufferCdString is used so that we can be sure the paths output from
|
||||||
|
" staticcheck can be calculated to absolute paths in the Handler
|
||||||
|
if l:lint_package
|
||||||
|
return ale#path#BufferCdString(a:buffer)
|
||||||
|
\ . 'staticcheck'
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#path#BufferCdString(a:buffer)
|
||||||
|
\ . 'staticcheck'
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' ' . ale#Escape(l:filename)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('go', {
|
||||||
|
\ 'name': 'staticcheck',
|
||||||
|
\ 'executable': 'staticcheck',
|
||||||
|
\ 'command_callback': 'ale_linters#go#staticcheck#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#go#Handler',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/graphql/eslint.vim
Normal file
9
sources_non_forked/ale/ale_linters/graphql/eslint.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Benjie Gillam <code@benjiegillam.com>
|
||||||
|
" Description: eslint for GraphQL files
|
||||||
|
|
||||||
|
call ale#linter#Define('graphql', {
|
||||||
|
\ 'name': 'eslint',
|
||||||
|
\ 'executable_callback': 'ale#handlers#eslint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#eslint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#eslint#Handle',
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/graphql/gqlint.vim
Normal file
9
sources_non_forked/ale/ale_linters/graphql/gqlint.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Michiel Westerbeek <happylinks@gmail.com>
|
||||||
|
" Description: Linter for GraphQL Schemas
|
||||||
|
|
||||||
|
call ale#linter#Define('graphql', {
|
||||||
|
\ 'name': 'gqlint',
|
||||||
|
\ 'executable': 'gqlint',
|
||||||
|
\ 'command': 'gqlint --reporter=simple %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
51
sources_non_forked/ale/ale_linters/haml/hamllint.vim
Normal file
51
sources_non_forked/ale/ale_linters/haml/hamllint.vim
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
" Author: Patrick Lewis - https://github.com/patricklewis, thenoseman - https://github.com/thenoseman
|
||||||
|
" Description: haml-lint for Haml files
|
||||||
|
|
||||||
|
function! ale_linters#haml#hamllint#GetCommand(buffer) abort
|
||||||
|
let l:prefix = ''
|
||||||
|
|
||||||
|
let l:rubocop_config_file_path = ale#path#FindNearestFile(a:buffer, '.rubocop.yml')
|
||||||
|
let l:hamllint_config_file_path = ale#path#FindNearestFile(a:buffer, '.haml-lint.yml')
|
||||||
|
|
||||||
|
" Set HAML_LINT_RUBOCOP_CONF variable as it is needed for haml-lint to
|
||||||
|
" pick up the rubocop config.
|
||||||
|
"
|
||||||
|
" See https://github.com/brigade/haml-lint/blob/master/lib/haml_lint/linter/rubocop.rb#L89
|
||||||
|
" HamlLint::Linter::RuboCop#rubocop_flags
|
||||||
|
if !empty(l:rubocop_config_file_path)
|
||||||
|
if ale#Has('win32')
|
||||||
|
let l:prefix = 'set HAML_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config_file_path) . ' &&'
|
||||||
|
else
|
||||||
|
let l:prefix = 'HAML_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config_file_path)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return (!empty(l:prefix) ? l:prefix . ' ' : '')
|
||||||
|
\ . 'haml-lint'
|
||||||
|
\ . (!empty(l:hamllint_config_file_path) ? ' --config ' . ale#Escape(l:hamllint_config_file_path) : '')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#haml#hamllint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns like the following:
|
||||||
|
" <path>:51 [W] RuboCop: Use the new Ruby 1.9 hash syntax.
|
||||||
|
let l:pattern = '\v^.*:(\d+) \[([EW])\] (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'type': l:match[2],
|
||||||
|
\ 'text': l:match[3]
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('haml', {
|
||||||
|
\ 'name': 'hamllint',
|
||||||
|
\ 'executable': 'haml-lint',
|
||||||
|
\ 'command_callback': 'ale_linters#haml#hamllint#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#haml#hamllint#Handle'
|
||||||
|
\})
|
|
@ -0,0 +1,48 @@
|
||||||
|
" Author: Adrian Zalewski <aazalewski@hotmail.com>
|
||||||
|
" Description: Ember-template-lint for checking Handlebars files
|
||||||
|
|
||||||
|
call ale#Set('handlebars_embertemplatelint_executable', 'ember-template-lint')
|
||||||
|
call ale#Set('handlebars_embertemplatelint_use_global', 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, {})
|
||||||
|
|
||||||
|
for l:error in get(values(l:json), 0, [])
|
||||||
|
if has_key(l:error, 'fatal')
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': get(l:error, 'line', 1),
|
||||||
|
\ 'col': get(l:error, 'column', 1),
|
||||||
|
\ 'text': l:error.message,
|
||||||
|
\ 'type': l:error.severity == 1 ? 'W' : 'E',
|
||||||
|
\})
|
||||||
|
else
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:error.line,
|
||||||
|
\ 'col': l:error.column,
|
||||||
|
\ 'text': l:error.rule . ': ' . l:error.message,
|
||||||
|
\ 'type': l:error.severity == 1 ? 'W' : 'E',
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('handlebars', {
|
||||||
|
\ 'name': 'ember-template-lint',
|
||||||
|
\ 'executable_callback': 'ale_linters#handlebars#embertemplatelint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#handlebars#embertemplatelint#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#handlebars#embertemplatelint#Handle',
|
||||||
|
\})
|
16
sources_non_forked/ale/ale_linters/haskell/ghc-mod.vim
Normal file
16
sources_non_forked/ale/ale_linters/haskell/ghc-mod.vim
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
" Author: wizzup <wizzup@gmail.com>
|
||||||
|
" Description: ghc-mod for Haskell files
|
||||||
|
|
||||||
|
call ale#linter#Define('haskell', {
|
||||||
|
\ 'name': 'ghc-mod',
|
||||||
|
\ 'executable': 'ghc-mod',
|
||||||
|
\ 'command': 'ghc-mod --map-file %s=%t check %s',
|
||||||
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
|
\})
|
||||||
|
|
||||||
|
call ale#linter#Define('haskell', {
|
||||||
|
\ 'name': 'stack-ghc-mod',
|
||||||
|
\ 'executable': 'stack',
|
||||||
|
\ 'command': 'stack exec ghc-mod -- --map-file %s=%t check %s',
|
||||||
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
|
\})
|
18
sources_non_forked/ale/ale_linters/haskell/ghc.vim
Normal file
18
sources_non_forked/ale/ale_linters/haskell/ghc.vim
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: ghc for Haskell files
|
||||||
|
|
||||||
|
call ale#Set('haskell_ghc_options', '-fno-code -v0')
|
||||||
|
|
||||||
|
function! ale_linters#haskell#ghc#GetCommand(buffer) abort
|
||||||
|
return 'ghc '
|
||||||
|
\ . ale#Var(a:buffer, 'haskell_ghc_options')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('haskell', {
|
||||||
|
\ 'name': 'ghc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'ghc',
|
||||||
|
\ 'command_callback': 'ale_linters#haskell#ghc#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
|
\})
|
22
sources_non_forked/ale/ale_linters/haskell/hdevtools.vim
Normal file
22
sources_non_forked/ale/ale_linters/haskell/hdevtools.vim
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
" Author: rob-b, Takano Akio <tak@anoak.io>
|
||||||
|
" Description: hdevtools for Haskell files
|
||||||
|
|
||||||
|
call ale#Set('haskell_hdevtools_executable', 'hdevtools')
|
||||||
|
call ale#Set('haskell_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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('haskell', {
|
||||||
|
\ 'name': 'hdevtools',
|
||||||
|
\ 'executable_callback': 'ale_linters#haskell#hdevtools#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#haskell#hdevtools#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
|
\})
|
34
sources_non_forked/ale/ale_linters/haskell/hlint.vim
Normal file
34
sources_non_forked/ale/ale_linters/haskell/hlint.vim
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
" Author: jparoz <jesse.paroz@gmail.com>
|
||||||
|
" Description: hlint for Haskell files
|
||||||
|
|
||||||
|
function! ale_linters#haskell#hlint#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
|
||||||
|
if l:error.severity is# 'Error'
|
||||||
|
let l:type = 'E'
|
||||||
|
elseif l:error.severity is# 'Suggestion'
|
||||||
|
let l:type = 'I'
|
||||||
|
else
|
||||||
|
let l:type = 'W'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:error.startLine),
|
||||||
|
\ 'col': str2nr(l:error.startColumn),
|
||||||
|
\ 'end_lnum': str2nr(l:error.endLine),
|
||||||
|
\ 'end_col': str2nr(l:error.endColumn),
|
||||||
|
\ 'text': l:error.severity . ': ' . l:error.hint . '. Found: ' . l:error.from . ' Why not: ' . l:error.to,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('haskell', {
|
||||||
|
\ 'name': 'hlint',
|
||||||
|
\ 'executable': 'hlint',
|
||||||
|
\ 'command': 'hlint --color=never --json -',
|
||||||
|
\ 'callback': 'ale_linters#haskell#hlint#Handle',
|
||||||
|
\})
|
22
sources_non_forked/ale/ale_linters/haskell/stack_build.vim
Normal file
22
sources_non_forked/ale/ale_linters/haskell/stack_build.vim
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
" Author: Jake Zimmerman <jake@zimmerman.io>
|
||||||
|
" Description: Like stack-ghc, but for entire projects
|
||||||
|
"
|
||||||
|
" Note: Ideally, this would *only* typecheck. Right now, it also does codegen.
|
||||||
|
" See <https://github.com/commercialhaskell/stack/issues/977>.
|
||||||
|
|
||||||
|
call ale#Set('haskell_stack_build_options', '--fast')
|
||||||
|
|
||||||
|
function! ale_linters#haskell#stack_build#GetCommand(buffer) abort
|
||||||
|
let l:flags = ale#Var(a:buffer, 'haskell_stack_build_options')
|
||||||
|
|
||||||
|
return 'stack build ' . l:flags
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('haskell', {
|
||||||
|
\ 'name': 'stack-build',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'stack',
|
||||||
|
\ 'command_callback': 'ale_linters#haskell#stack_build#GetCommand',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
|
\})
|
10
sources_non_forked/ale/ale_linters/haskell/stack_ghc.vim
Normal file
10
sources_non_forked/ale/ale_linters/haskell/stack_ghc.vim
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: ghc for Haskell files, using Stack
|
||||||
|
|
||||||
|
call ale#linter#Define('haskell', {
|
||||||
|
\ 'name': 'stack-ghc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'stack',
|
||||||
|
\ 'command': 'stack ghc -- -fno-code -v0 %t',
|
||||||
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
|
\})
|
11
sources_non_forked/ale/ale_linters/help/alex.vim
Normal file
11
sources_non_forked/ale/ale_linters/help/alex.vim
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
" Author: Johannes Wienke <languitar@semipol.de>
|
||||||
|
" Description: alex for help files
|
||||||
|
|
||||||
|
call ale#linter#Define('help', {
|
||||||
|
\ 'name': 'alex',
|
||||||
|
\ 'executable': 'alex',
|
||||||
|
\ 'command': 'alex %s -t',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale#handlers#alex#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/help/proselint.vim
Normal file
9
sources_non_forked/ale/ale_linters/help/proselint.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Daniel M. Capella https://github.com/polyzen
|
||||||
|
" Description: proselint for Vim help files
|
||||||
|
|
||||||
|
call ale#linter#Define('help', {
|
||||||
|
\ 'name': 'proselint',
|
||||||
|
\ 'executable': 'proselint',
|
||||||
|
\ 'command': 'proselint %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/help/write-good.vim
Normal file
9
sources_non_forked/ale/ale_linters/help/write-good.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for vim Help files
|
||||||
|
|
||||||
|
call ale#linter#Define('help', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
11
sources_non_forked/ale/ale_linters/html/alex.vim
Normal file
11
sources_non_forked/ale/ale_linters/html/alex.vim
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
" Author: Johannes Wienke <languitar@semipol.de>
|
||||||
|
" Description: alex for HTML files
|
||||||
|
|
||||||
|
call ale#linter#Define('html', {
|
||||||
|
\ 'name': 'alex',
|
||||||
|
\ 'executable': 'alex',
|
||||||
|
\ 'command': 'alex %s -t',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale#handlers#alex#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
38
sources_non_forked/ale/ale_linters/html/htmlhint.vim
Normal file
38
sources_non_forked/ale/ale_linters/html/htmlhint.vim
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
" Author: KabbAmine <amine.kabb@gmail.com>, deathmaz <00maz1987@gmail.com>, diartyz <diartyz@gmail.com>
|
||||||
|
" Description: HTMLHint for checking html files
|
||||||
|
|
||||||
|
call ale#Set('html_htmlhint_options', '')
|
||||||
|
call ale#Set('html_htmlhint_executable', 'htmlhint')
|
||||||
|
call ale#Set('html_htmlhint_use_global', 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'
|
||||||
|
\ ? ale#path#FindNearestFile(a:buffer, '.htmlhintrc')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
if !empty(l:config)
|
||||||
|
let l:options .= ' --config ' . ale#Escape(l:config)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:options)
|
||||||
|
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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('html', {
|
||||||
|
\ 'name': 'htmlhint',
|
||||||
|
\ 'executable_callback': 'ale_linters#html#htmlhint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#html#htmlhint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/html/proselint.vim
Normal file
9
sources_non_forked/ale/ale_linters/html/proselint.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Daniel M. Capella https://github.com/polyzen
|
||||||
|
" Description: proselint for HTML files
|
||||||
|
|
||||||
|
call ale#linter#Define('html', {
|
||||||
|
\ 'name': 'proselint',
|
||||||
|
\ 'executable': 'proselint',
|
||||||
|
\ 'command': 'proselint %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
77
sources_non_forked/ale/ale_linters/html/tidy.vim
Normal file
77
sources_non_forked/ale/ale_linters/html/tidy.vim
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
" Author: KabbAmine <amine.kabb@gmail.com>
|
||||||
|
" Description: This file adds support for checking HTML code with tidy.
|
||||||
|
|
||||||
|
" CLI options
|
||||||
|
let g:ale_html_tidy_executable = get(g:, 'ale_html_tidy_executable', 'tidy')
|
||||||
|
" Look for the old _args variable first.
|
||||||
|
let s:default_options = get(g:, 'ale_html_tidy_args', '-q -e -language en')
|
||||||
|
let g:ale_html_tidy_options = get(g:, 'ale_html_tidy_options', s:default_options)
|
||||||
|
|
||||||
|
function! ale_linters#html#tidy#GetCommand(buffer) abort
|
||||||
|
" Specify file encoding in options
|
||||||
|
" (Idea taken from https://github.com/scrooloose/syntastic/blob/master/syntax_checkers/html/tidy.vim)
|
||||||
|
let l:file_encoding = get({
|
||||||
|
\ 'ascii': '-ascii',
|
||||||
|
\ 'big5': '-big5',
|
||||||
|
\ 'cp1252': '-win1252',
|
||||||
|
\ 'cp850': '-ibm858',
|
||||||
|
\ 'cp932': '-shiftjis',
|
||||||
|
\ 'iso-2022-jp': '-iso-2022',
|
||||||
|
\ 'latin1': '-latin1',
|
||||||
|
\ 'macroman': '-mac',
|
||||||
|
\ 'sjis': '-shiftjis',
|
||||||
|
\ 'utf-16le': '-utf16le',
|
||||||
|
\ 'utf-16': '-utf16',
|
||||||
|
\ 'utf-8': '-utf8',
|
||||||
|
\ }, &fileencoding, '-utf8')
|
||||||
|
|
||||||
|
" On macOS, old tidy (released on 31 Oct 2006) is installed. It does not
|
||||||
|
" consider HTML5 so we should avoid it.
|
||||||
|
let l:executable = ale#Var(a:buffer, 'html_tidy_executable')
|
||||||
|
if has('mac') && l:executable is# 'tidy' && exists('*exepath')
|
||||||
|
\ && exepath(l:executable) is# '/usr/bin/tidy'
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return printf('%s %s %s -',
|
||||||
|
\ l:executable,
|
||||||
|
\ ale#Var(a:buffer, 'html_tidy_options'),
|
||||||
|
\ l:file_encoding
|
||||||
|
\)
|
||||||
|
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 </title> before </head>
|
||||||
|
|
||||||
|
let l:pattern = '^line \(\d\+\) column \(\d\+\) - \(Warning\|Error\): \(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:line = l:match[1] + 0
|
||||||
|
let l:col = l:match[2] + 0
|
||||||
|
let l:type = l:match[3] is# 'Error' ? 'E' : 'W'
|
||||||
|
let l:text = l:match[4]
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:line,
|
||||||
|
\ 'col': l:col,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('html', {
|
||||||
|
\ 'name': 'tidy',
|
||||||
|
\ 'executable_callback': 'ale_linters#html#tidy#GetExecutable',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'command_callback': 'ale_linters#html#tidy#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#html#tidy#Handle',
|
||||||
|
\ })
|
9
sources_non_forked/ale/ale_linters/html/write-good.vim
Normal file
9
sources_non_forked/ale/ale_linters/html/write-good.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for nroff files
|
||||||
|
|
||||||
|
call ale#linter#Define('html', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
87
sources_non_forked/ale/ale_linters/idris/idris.vim
Normal file
87
sources_non_forked/ale/ale_linters/idris/idris.vim
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
" Author: Scott Bonds <scott@ggr.com>
|
||||||
|
" Description: default Idris compiler
|
||||||
|
|
||||||
|
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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#idris#idris#Handle(buffer, lines) abort
|
||||||
|
" This was copied almost verbatim from ale#handlers#haskell#HandleGHCFormat
|
||||||
|
|
||||||
|
" Look for lines like the following:
|
||||||
|
" foo.idr:2:6:When checking right hand side of main with expected type
|
||||||
|
" bar.idr:11:11-13:
|
||||||
|
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)(-\d+)?:(.*)?$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
let l:corrected_lines = []
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
if len(matchlist(l:line, l:pattern)) > 0
|
||||||
|
call add(l:corrected_lines, l:line)
|
||||||
|
elseif len(l:corrected_lines) > 0
|
||||||
|
if l:line is# ''
|
||||||
|
let l:corrected_lines[-1] .= ' ' " turn a blank line into a space
|
||||||
|
else
|
||||||
|
let l:corrected_lines[-1] .= l:line
|
||||||
|
endif
|
||||||
|
let l:corrected_lines[-1] = substitute(l:corrected_lines[-1], '\s\+', ' ', 'g')
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
for l:line in l:corrected_lines
|
||||||
|
let l:match = matchlist(l:line, l:pattern)
|
||||||
|
|
||||||
|
if len(l:match) == 0
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !ale#path#IsBufferPath(a:buffer, l:match[1])
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:errors = matchlist(l:match[5], '\v([wW]arning|[eE]rror) - ?(.*)')
|
||||||
|
|
||||||
|
if len(l:errors) > 0
|
||||||
|
let l:ghc_type = l:errors[1]
|
||||||
|
let l:text = l:errors[2]
|
||||||
|
else
|
||||||
|
let l:ghc_type = ''
|
||||||
|
let l:text = l:match[5][:0] is# ' ' ? l:match[5][1:] : l:match[5]
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:ghc_type is? 'Warning'
|
||||||
|
let l:type = 'W'
|
||||||
|
else
|
||||||
|
let l:type = 'E'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('idris', {
|
||||||
|
\ 'name': 'idris',
|
||||||
|
\ 'executable_callback': 'ale_linters#idris#idris#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#idris#idris#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#idris#idris#Handle',
|
||||||
|
\})
|
||||||
|
|
36
sources_non_forked/ale/ale_linters/java/checkstyle.vim
Normal file
36
sources_non_forked/ale/ale_linters/java/checkstyle.vim
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
" Author: Devon Meunier <devon.meunier@gmail.com>
|
||||||
|
" Description: checkstyle for Java files
|
||||||
|
|
||||||
|
function! ale_linters#java#checkstyle#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v\[(WARN|ERROR)\] [a-zA-Z]?:?[^:]+:(\d+):(\d+)?:? (.*) \[(.+)\]$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'type': l:match[1] is? 'WARN' ? 'W' : 'E',
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\ 'code': l:match[5],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#java#checkstyle#GetCommand(buffer) abort
|
||||||
|
return 'checkstyle '
|
||||||
|
\ . ale#Var(a:buffer, 'java_checkstyle_options')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
if !exists('g:ale_java_checkstyle_options')
|
||||||
|
let g:ale_java_checkstyle_options = '-c /google_checks.xml'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call ale#linter#Define('java', {
|
||||||
|
\ 'name': 'checkstyle',
|
||||||
|
\ 'executable': 'checkstyle',
|
||||||
|
\ 'command_callback': 'ale_linters#java#checkstyle#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#java#checkstyle#Handle',
|
||||||
|
\})
|
128
sources_non_forked/ale/ale_linters/java/javac.vim
Normal file
128
sources_non_forked/ale/ale_linters/java/javac.vim
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
" Author: farenjihn <farenjihn@gmail.com>, w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: Lints java files using javac
|
||||||
|
|
||||||
|
let s:classpath_sep = has('unix') ? ':' : ';'
|
||||||
|
|
||||||
|
let g:ale_java_javac_options = get(g:, 'ale_java_javac_options', '')
|
||||||
|
let g:ale_java_javac_classpath = get(g:, 'ale_java_javac_classpath', '')
|
||||||
|
|
||||||
|
function! ale_linters#java#javac#GetImportPaths(buffer) abort
|
||||||
|
let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml')
|
||||||
|
|
||||||
|
if !empty(l:pom_path) && executable('mvn')
|
||||||
|
return ale#path#CdString(fnamemodify(l:pom_path, ':h'))
|
||||||
|
\ . 'mvn dependency:build-classpath'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:classpath_command = ale#gradle#BuildClasspathCommand(a:buffer)
|
||||||
|
if !empty(l:classpath_command)
|
||||||
|
return l:classpath_command
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:BuildClassPathOption(buffer, import_paths) abort
|
||||||
|
" Filter out lines like [INFO], etc.
|
||||||
|
let l:class_paths = filter(a:import_paths[:], 'v:val !~# ''[''')
|
||||||
|
call extend(
|
||||||
|
\ l:class_paths,
|
||||||
|
\ split(ale#Var(a:buffer, 'java_javac_classpath'), s:classpath_sep),
|
||||||
|
\)
|
||||||
|
|
||||||
|
return !empty(l:class_paths)
|
||||||
|
\ ? '-cp ' . ale#Escape(join(l:class_paths, s:classpath_sep))
|
||||||
|
\ : ''
|
||||||
|
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 = ''
|
||||||
|
|
||||||
|
" Find the src directory, for files in this project.
|
||||||
|
let l:src_dir = ale#path#FindNearestDirectory(a:buffer, 'src/main/java')
|
||||||
|
let l:sp_dirs = []
|
||||||
|
|
||||||
|
if !empty(l:src_dir)
|
||||||
|
call add(l:sp_dirs, l:src_dir)
|
||||||
|
|
||||||
|
" Automatically include the jaxb directory too, if it's there.
|
||||||
|
let l:jaxb_dir = fnamemodify(l:src_dir, ':h:h')
|
||||||
|
\ . (has('win32') ? '\jaxb\' : '/jaxb/')
|
||||||
|
|
||||||
|
if isdirectory(l:jaxb_dir)
|
||||||
|
call add(l:sp_dirs, l:jaxb_dir)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Automatically include the test directory, but only for test code.
|
||||||
|
if expand('#' . a:buffer . ':p') =~? '\vsrc[/\\]test[/\\]java'
|
||||||
|
let l:test_dir = fnamemodify(l:src_dir, ':h:h:h')
|
||||||
|
\ . (has('win32') ? '\test\java\' : '/test/java/')
|
||||||
|
|
||||||
|
if isdirectory(l:test_dir)
|
||||||
|
call add(l:sp_dirs, l:test_dir)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:sp_dirs)
|
||||||
|
let l:sp_option = '-sourcepath '
|
||||||
|
\ . ale#Escape(join(l:sp_dirs, s:classpath_sep))
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Create .class files in a temporary directory, which we will delete later.
|
||||||
|
let l:class_file_directory = ale#engine#CreateDirectory(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)
|
||||||
|
\ . 'javac -Xlint'
|
||||||
|
\ . ' ' . l:cp_option
|
||||||
|
\ . ' ' . l:sp_option
|
||||||
|
\ . ' -d ' . ale#Escape(l:class_file_directory)
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'java_javac_options')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#java#javac#Handle(buffer, lines) abort
|
||||||
|
" Look for lines like the following.
|
||||||
|
"
|
||||||
|
" Main.java:13: warning: [deprecation] donaught() in Testclass has been deprecated
|
||||||
|
" Main.java:16: error: ';' expected
|
||||||
|
|
||||||
|
let l:directory = expand('#' . a:buffer . ':p:h')
|
||||||
|
let l:pattern = '\v^(.*):(\d+): (.+):(.+)$'
|
||||||
|
let l:col_pattern = '\v^(\s*\^)$'
|
||||||
|
let l:symbol_pattern = '\v^ +symbol: *(class|method) +([^ ]+)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, [l:pattern, l:col_pattern, l:symbol_pattern])
|
||||||
|
if empty(l:match[2]) && empty(l:match[3])
|
||||||
|
let l:output[-1].col = len(l:match[1])
|
||||||
|
elseif empty(l:match[3])
|
||||||
|
" Add symbols to 'cannot find symbol' errors.
|
||||||
|
if l:output[-1].text is# 'error: cannot find symbol'
|
||||||
|
let l:output[-1].text .= ': ' . l:match[2]
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:directory, l:match[1]),
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3] . ':' . l:match[4],
|
||||||
|
\ 'type': l:match[3] is# 'error' ? 'E' : 'W',
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('java', {
|
||||||
|
\ 'name': 'javac',
|
||||||
|
\ 'executable': 'javac',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#java#javac#GetImportPaths', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#java#javac#GetCommand', 'output_stream': 'stderr'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale_linters#java#javac#Handle',
|
||||||
|
\})
|
10
sources_non_forked/ale/ale_linters/javascript/eslint.vim
Normal file
10
sources_non_forked/ale/ale_linters/javascript/eslint.vim
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: eslint for JavaScript files
|
||||||
|
|
||||||
|
call ale#linter#Define('javascript', {
|
||||||
|
\ 'name': 'eslint',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable_callback': 'ale#handlers#eslint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#eslint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#eslint#Handle',
|
||||||
|
\})
|
178
sources_non_forked/ale/ale_linters/javascript/flow.vim
Normal file
178
sources_non_forked/ale/ale_linters/javascript/flow.vim
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
" Author: Zach Perrault -- @zperrault
|
||||||
|
" Author: Florian Beeres <yuuki@protonmail.com>
|
||||||
|
" Description: FlowType checking for JavaScript files
|
||||||
|
|
||||||
|
call ale#Set('javascript_flow_executable', 'flow')
|
||||||
|
call ale#Set('javascript_flow_use_home_config', 0)
|
||||||
|
call ale#Set('javascript_flow_use_global', 0)
|
||||||
|
|
||||||
|
function! ale_linters#javascript#flow#GetExecutable(buffer) abort
|
||||||
|
let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig')
|
||||||
|
|
||||||
|
if empty(l:flow_config)
|
||||||
|
" Don't run Flow if we can't find a .flowconfig file.
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't run Flow with a configuration file from the home directory by
|
||||||
|
" default, which can eat all of your RAM.
|
||||||
|
if fnamemodify(l:flow_config, ':h') is? $HOME
|
||||||
|
\&& !ale#Var(a:buffer, 'javascript_flow_use_home_config')
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'javascript_flow', [
|
||||||
|
\ 'node_modules/.bin/flow',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#flow#VersionCheck(buffer) abort
|
||||||
|
let l:executable = ale_linters#javascript#flow#GetExecutable(a:buffer)
|
||||||
|
|
||||||
|
if empty(l:executable)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' --version'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#flow#GetCommand(buffer, version_lines) abort
|
||||||
|
let l:executable = ale_linters#javascript#flow#GetExecutable(a:buffer)
|
||||||
|
|
||||||
|
if empty(l:executable)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:version = ale#semver#GetVersion(l:executable, a:version_lines)
|
||||||
|
|
||||||
|
" If we can parse the version number, then only use --respect-pragma
|
||||||
|
" if the version is >= 0.36.0, which added the argument.
|
||||||
|
let l:use_respect_pragma = empty(l:version)
|
||||||
|
\ || ale#semver#GTE(l:version, [0, 36])
|
||||||
|
|
||||||
|
return ale#Escape(l:executable)
|
||||||
|
\ . ' check-contents'
|
||||||
|
\ . (l:use_respect_pragma ? ' --respect-pragma': '')
|
||||||
|
\ . ' --json --from ale %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Filter lines of flow output until we find the first line where the JSON
|
||||||
|
" output starts.
|
||||||
|
function! s:GetJSONLines(lines) abort
|
||||||
|
let l:start_index = 0
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
if l:line[:0] is# '{'
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:start_index += 1
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return a:lines[l:start_index :]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ExtraErrorMsg(current, new) abort
|
||||||
|
let l:newMsg = ''
|
||||||
|
|
||||||
|
if a:current is# ''
|
||||||
|
" extra messages appear to already have a :
|
||||||
|
let l:newMsg = a:new
|
||||||
|
else
|
||||||
|
let l:newMsg = a:current . ' ' . a:new
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:newMsg
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! s:GetDetails(error) abort
|
||||||
|
let l:detail = ''
|
||||||
|
|
||||||
|
for l:extra_error in a:error.extra
|
||||||
|
|
||||||
|
if has_key(l:extra_error, 'message')
|
||||||
|
for l:extra_message in l:extra_error.message
|
||||||
|
let l:detail = s:ExtraErrorMsg(l:detail, l:extra_message.descr)
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(l:extra_error, 'children')
|
||||||
|
for l:child in l:extra_error.children
|
||||||
|
for l:child_message in l:child.message
|
||||||
|
let l:detail = l:detail . ' ' . l:child_message.descr
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:detail
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#flow#Handle(buffer, lines) abort
|
||||||
|
let l:str = join(s:GetJSONLines(a:lines), '')
|
||||||
|
|
||||||
|
if empty(l:str)
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:flow_output = json_decode(l:str)
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:error in get(l:flow_output, 'errors', [])
|
||||||
|
" Each error is broken up into parts
|
||||||
|
let l:text = ''
|
||||||
|
let l:line = 0
|
||||||
|
let l:col = 0
|
||||||
|
|
||||||
|
for l:message in l:error.message
|
||||||
|
" Comments have no line of column information, so we skip them.
|
||||||
|
" In certain cases, `l:message.loc.source` points to a different path
|
||||||
|
" than the buffer one, thus we skip this loc information too.
|
||||||
|
if has_key(l:message, 'loc')
|
||||||
|
\&& l:line is# 0
|
||||||
|
\&& ale#path#IsBufferPath(a:buffer, l:message.loc.source)
|
||||||
|
let l:line = l:message.loc.start.line + 0
|
||||||
|
let l:col = l:message.loc.start.column + 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:text is# ''
|
||||||
|
let l:text = l:message.descr . ':'
|
||||||
|
else
|
||||||
|
let l:text = l:text . ' ' . l:message.descr
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if has_key(l:error, 'operation')
|
||||||
|
let l:text = l:text . ' See also: ' . l:error.operation.descr
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:errorToAdd = {
|
||||||
|
\ 'lnum': l:line,
|
||||||
|
\ 'col': l:col,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'type': has_key(l:error, 'level') && l:error.level is# 'error' ? 'E' : 'W',
|
||||||
|
\}
|
||||||
|
|
||||||
|
if has_key(l:error, 'extra')
|
||||||
|
let l:errorToAdd.detail = s:GetDetails(l:error)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, l:errorToAdd)
|
||||||
|
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('javascript', {
|
||||||
|
\ 'name': 'flow',
|
||||||
|
\ 'executable_callback': 'ale_linters#javascript#flow#GetExecutable',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#javascript#flow#VersionCheck'},
|
||||||
|
\ {'callback': 'ale_linters#javascript#flow#GetCommand'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale_linters#javascript#flow#Handle',
|
||||||
|
\ 'add_newline': !has('win32'),
|
||||||
|
\})
|
67
sources_non_forked/ale/ale_linters/javascript/jscs.vim
Normal file
67
sources_non_forked/ale/ale_linters/javascript/jscs.vim
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
" Author: Chris Kyrouac - https://github.com/fijshion
|
||||||
|
" Description: jscs for JavaScript files
|
||||||
|
|
||||||
|
call ale#Set('javascript_jscs_executable', 'jscs')
|
||||||
|
call ale#Set('javascript_jscs_use_global', 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(
|
||||||
|
\ a:buffer,
|
||||||
|
\ '.jscsrc',
|
||||||
|
\ 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'
|
||||||
|
|
||||||
|
if !empty(l:jscs_config)
|
||||||
|
let l:command .= ' --config ' . ale#Escape(l:jscs_config)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:command .= ' -'
|
||||||
|
|
||||||
|
return l:command
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#jscs#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns looking like the following
|
||||||
|
"
|
||||||
|
" foobar.js: line 2, col 1, Expected indentation of 1 characters
|
||||||
|
"
|
||||||
|
let l:pattern = '\v^.*:\s+line (\d+),\s+col\s+(\d+),\s+(.*)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:obj = {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3]
|
||||||
|
\}
|
||||||
|
|
||||||
|
let l:code_match = matchlist(l:match[3], '\v([^ :]+): (.+)$')
|
||||||
|
|
||||||
|
if !empty(l:code_match)
|
||||||
|
let l:obj.code = l:code_match[1]
|
||||||
|
let l:obj.text = l:code_match[2]
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, l:obj)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('javascript', {
|
||||||
|
\ 'name': 'jscs',
|
||||||
|
\ 'executable_callback': 'ale_linters#javascript#jscs#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#javascript#jscs#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#javascript#jscs#Handle',
|
||||||
|
\})
|
||||||
|
|
38
sources_non_forked/ale/ale_linters/javascript/jshint.vim
Normal file
38
sources_non_forked/ale/ale_linters/javascript/jshint.vim
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
" Author: Chris Kyrouac - https://github.com/fijshion
|
||||||
|
" Description: JSHint for Javascript files
|
||||||
|
|
||||||
|
call ale#Set('javascript_jshint_executable', 'jshint')
|
||||||
|
call ale#Set('javascript_jshint_use_global', 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(
|
||||||
|
\ a:buffer,
|
||||||
|
\ '.jshintrc',
|
||||||
|
\ 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'
|
||||||
|
|
||||||
|
if !empty(l:jshint_config)
|
||||||
|
let l:command .= ' --config ' . ale#Escape(l:jshint_config)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:command .= ' -'
|
||||||
|
|
||||||
|
return l:command
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('javascript', {
|
||||||
|
\ 'name': 'jshint',
|
||||||
|
\ 'executable_callback': 'ale_linters#javascript#jshint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
||||||
|
\})
|
30
sources_non_forked/ale/ale_linters/javascript/standard.vim
Normal file
30
sources_non_forked/ale/ale_linters/javascript/standard.vim
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
" Author: Ahmed El Gabri <@ahmedelgabri>
|
||||||
|
" Description: standardjs for JavaScript files
|
||||||
|
|
||||||
|
call ale#Set('javascript_standard_executable', 'standard')
|
||||||
|
call ale#Set('javascript_standard_use_global', 0)
|
||||||
|
call ale#Set('javascript_standard_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#javascript#standard#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'javascript_standard', [
|
||||||
|
\ 'node_modules/standard/bin/cmd.js',
|
||||||
|
\ 'node_modules/.bin/standard',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#standard#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#javascript#standard#GetExecutable(a:buffer)
|
||||||
|
let l:options = ale#Var(a:buffer, 'javascript_standard_options')
|
||||||
|
|
||||||
|
return ale#node#Executable(a:buffer, l:executable)
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' --stdin %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" standard uses eslint and the output format is the same
|
||||||
|
call ale#linter#Define('javascript', {
|
||||||
|
\ 'name': 'standard',
|
||||||
|
\ 'executable_callback': 'ale_linters#javascript#standard#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#javascript#standard#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#eslint#Handle',
|
||||||
|
\})
|
26
sources_non_forked/ale/ale_linters/javascript/xo.vim
Normal file
26
sources_non_forked/ale/ale_linters/javascript/xo.vim
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
" Author: Daniel Lupu <lupu.daniel.f@gmail.com>
|
||||||
|
" Description: xo for JavaScript files
|
||||||
|
|
||||||
|
call ale#Set('javascript_xo_executable', 'xo')
|
||||||
|
call ale#Set('javascript_xo_use_global', 0)
|
||||||
|
call ale#Set('javascript_xo_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#javascript#xo#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'javascript_xo', [
|
||||||
|
\ 'node_modules/.bin/xo',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#javascript#xo#GetCommand(buffer) abort
|
||||||
|
return ale#Escape(ale_linters#javascript#xo#GetExecutable(a:buffer))
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'javascript_xo_options')
|
||||||
|
\ . ' --reporter unix --stdin --stdin-filename %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" xo uses eslint and the output format is the same
|
||||||
|
call ale#linter#Define('javascript', {
|
||||||
|
\ 'name': 'xo',
|
||||||
|
\ 'executable_callback': 'ale_linters#javascript#xo#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#javascript#xo#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#eslint#Handle',
|
||||||
|
\})
|
27
sources_non_forked/ale/ale_linters/json/jsonlint.vim
Normal file
27
sources_non_forked/ale/ale_linters/json/jsonlint.vim
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
" Author: KabbAmine <amine.kabb@gmail.com>
|
||||||
|
|
||||||
|
function! ale_linters#json#jsonlint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns like the following:
|
||||||
|
" line 2, col 15, found: 'STRING' - expected: 'EOF', '}', ',', ']'.
|
||||||
|
|
||||||
|
let l:pattern = '^line \(\d\+\), col \(\d*\), \(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('json', {
|
||||||
|
\ 'name': 'jsonlint',
|
||||||
|
\ 'executable': 'jsonlint',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'command': 'jsonlint --compact -',
|
||||||
|
\ 'callback': 'ale_linters#json#jsonlint#Handle',
|
||||||
|
\})
|
170
sources_non_forked/ale/ale_linters/kotlin/kotlinc.vim
Normal file
170
sources_non_forked/ale/ale_linters/kotlin/kotlinc.vim
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
" Author: Francis Agyapong <francisgyapong2@gmail.com>
|
||||||
|
" Description: A linter for the Kotlin programming language that uses kotlinc
|
||||||
|
|
||||||
|
let g:ale_kotlin_kotlinc_options = get(g:, 'ale_kotlin_kotlinc_options', '')
|
||||||
|
let g:ale_kotlin_kotlinc_enable_config = get(g:, 'ale_kotlin_kotlinc_enable_config', 0)
|
||||||
|
let g:ale_kotlin_kotlinc_config_file = get(g:, 'ale_kotlin_kotlinc_config_file', '.ale_kotlinc_config')
|
||||||
|
let g:ale_kotlin_kotlinc_classpath = get(g:, 'ale_kotlin_kotlinc_classpath', '')
|
||||||
|
let g:ale_kotlin_kotlinc_sourcepath = get(g:, 'ale_kotlin_kotlinc_sourcepath', '')
|
||||||
|
let g:ale_kotlin_kotlinc_use_module_file = get(g:, 'ale_kotlin_kotlinc_use_module_file', 0)
|
||||||
|
let g:ale_kotlin_kotlinc_module_filename = get(g:, 'ale_kotlin_kotlinc_module_filename', 'module.xml')
|
||||||
|
|
||||||
|
let s:classpath_sep = has('unix') ? ':' : ';'
|
||||||
|
|
||||||
|
function! ale_linters#kotlin#kotlinc#GetImportPaths(buffer) abort
|
||||||
|
" exec maven/gradle only if classpath is not set
|
||||||
|
if ale#Var(a:buffer, 'kotlin_kotlinc_classpath') isnot# ''
|
||||||
|
return ''
|
||||||
|
else
|
||||||
|
let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml')
|
||||||
|
if !empty(l:pom_path) && executable('mvn')
|
||||||
|
return ale#path#CdString(fnamemodify(l:pom_path, ':h'))
|
||||||
|
\ . 'mvn dependency:build-classpath'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:classpath_command = ale#gradle#BuildClasspathCommand(a:buffer)
|
||||||
|
if !empty(l:classpath_command)
|
||||||
|
return l:classpath_command
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:BuildClassPathOption(buffer, import_paths) abort
|
||||||
|
" Filter out lines like [INFO], etc.
|
||||||
|
let l:class_paths = filter(a:import_paths[:], 'v:val !~# ''[''')
|
||||||
|
call extend(
|
||||||
|
\ l:class_paths,
|
||||||
|
\ split(ale#Var(a:buffer, 'kotlin_kotlinc_classpath'), s:classpath_sep),
|
||||||
|
\)
|
||||||
|
|
||||||
|
return !empty(l:class_paths)
|
||||||
|
\ ? ' -cp ' . ale#Escape(join(l:class_paths, s:classpath_sep))
|
||||||
|
\ : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#kotlin#kotlinc#GetCommand(buffer, import_paths) abort
|
||||||
|
let l:kotlinc_opts = ale#Var(a:buffer, 'kotlin_kotlinc_options')
|
||||||
|
let l:command = 'kotlinc '
|
||||||
|
|
||||||
|
" If the config file is enabled and readable, source it
|
||||||
|
if ale#Var(a:buffer, 'kotlin_kotlinc_enable_config')
|
||||||
|
let l:conf = expand(ale#Var(a:buffer, 'kotlin_kotlinc_config_file'), 1)
|
||||||
|
|
||||||
|
if filereadable(l:conf)
|
||||||
|
execute 'source ' . fnameescape(l:conf)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If use module and module file is readable use that and return
|
||||||
|
if ale#Var(a:buffer, 'kotlin_kotlinc_use_module_file')
|
||||||
|
let l:module_filename = ale#Escape(expand(ale#Var(a:buffer, 'kotlin_kotlinc_module_filename'), 1))
|
||||||
|
|
||||||
|
if filereadable(l:module_filename)
|
||||||
|
let l:kotlinc_opts .= ' -module ' . l:module_filename
|
||||||
|
let l:command .= 'kotlinc ' . l:kotlinc_opts
|
||||||
|
|
||||||
|
return l:command
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" We only get here if not using module or the module file not readable
|
||||||
|
if ale#Var(a:buffer, 'kotlin_kotlinc_classpath') isnot# ''
|
||||||
|
let l:kotlinc_opts .= ' -cp ' . ale#Var(a:buffer, 'kotlin_kotlinc_classpath')
|
||||||
|
else
|
||||||
|
" get classpath from maven/gradle
|
||||||
|
let l:kotlinc_opts .= s:BuildClassPathOption(a:buffer, a:import_paths)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:fname = ''
|
||||||
|
if ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath') isnot# ''
|
||||||
|
let l:fname .= expand(ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath'), 1) . ' '
|
||||||
|
else
|
||||||
|
" Find the src directory for files in this project.
|
||||||
|
|
||||||
|
let l:project_root = ale#gradle#FindProjectRoot(a:buffer)
|
||||||
|
if !empty(l:project_root)
|
||||||
|
let l:src_dir = l:project_root
|
||||||
|
else
|
||||||
|
let l:src_dir = ale#path#FindNearestDirectory(a:buffer, 'src/main/java')
|
||||||
|
\ . ' ' . ale#path#FindNearestDirectory(a:buffer, 'src/main/kotlin')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:fname .= expand(l:src_dir, 1) . ' '
|
||||||
|
endif
|
||||||
|
let l:fname .= ale#Escape(expand('#' . a:buffer . ':p'))
|
||||||
|
let l:command .= l:kotlinc_opts . ' ' . l:fname
|
||||||
|
|
||||||
|
return l:command
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#kotlin#kotlinc#Handle(buffer, lines) abort
|
||||||
|
let l:code_pattern = '^\(.*\):\([0-9]\+\):\([0-9]\+\):\s\+\(error\|warning\):\s\+\(.*\)'
|
||||||
|
let l:general_pattern = '^\(warning\|error\|info\):\s*\(.*\)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
let l:match = matchlist(l:line, l:code_pattern)
|
||||||
|
|
||||||
|
if len(l:match) == 0
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:file = l:match[1]
|
||||||
|
let l:line = l:match[2] + 0
|
||||||
|
let l:column = l:match[3] + 0
|
||||||
|
let l:type = l:match[4]
|
||||||
|
let l:text = l:match[5]
|
||||||
|
|
||||||
|
let l:buf_abspath = fnamemodify(l:file, ':p')
|
||||||
|
let l:curbuf_abspath = expand('#' . a:buffer . ':p')
|
||||||
|
|
||||||
|
" Skip if file is not loaded
|
||||||
|
if l:buf_abspath isnot# l:curbuf_abspath
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let l:type_marker_str = l:type is# 'warning' ? 'W' : 'E'
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:line,
|
||||||
|
\ 'col': l:column,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'type': l:type_marker_str,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Non-code related messages
|
||||||
|
for l:line in a:lines
|
||||||
|
let l:match = matchlist(l:line, l:general_pattern)
|
||||||
|
|
||||||
|
if len(l:match) == 0
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:type = l:match[1]
|
||||||
|
let l:text = l:match[2]
|
||||||
|
|
||||||
|
let l:type_marker_str = l:type is# 'warning' || l:type is# 'info' ? 'W' : 'E'
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': 1,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'type': l:type_marker_str,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('kotlin', {
|
||||||
|
\ 'name': 'kotlinc',
|
||||||
|
\ 'executable': 'kotlinc',
|
||||||
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale_linters#kotlin#kotlinc#GetImportPaths', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#kotlin#kotlinc#GetCommand', 'output_stream': 'stderr'},
|
||||||
|
\ ],
|
||||||
|
\ 'callback': 'ale_linters#kotlin#kotlinc#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
|
|
54
sources_non_forked/ale/ale_linters/kotlin/ktlint.vim
Normal file
54
sources_non_forked/ale/ale_linters/kotlin/ktlint.vim
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
" Author: Francis Agyapong <francisagyapong2@gmail.com>
|
||||||
|
" Description: Lint kotlin files using ktlint
|
||||||
|
|
||||||
|
call ale#Set('kotlin_ktlint_executable', 'ktlint')
|
||||||
|
call ale#Set('kotlin_ktlint_rulesets', [])
|
||||||
|
call ale#Set('kotlin_ktlint_format', 0)
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#kotlin#ktlint#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'kotlin_ktlint_executable')
|
||||||
|
let l:file_path = expand('#' . a:buffer . ':p')
|
||||||
|
let l:options = ''
|
||||||
|
|
||||||
|
" Formmatted content written to original file, not sure how to handle
|
||||||
|
" if ale#Var(a:buffer, 'kotlin_ktlint_format')
|
||||||
|
" let l:options = l:options . ' --format'
|
||||||
|
" endif
|
||||||
|
|
||||||
|
for l:ruleset in ale#Var(a:buffer, 'kotlin_ktlint_rulesets')
|
||||||
|
let l:options = l:options . ' --ruleset ' . l:ruleset
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:executable . ' ' . l:options . ' ' . l:file_path
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#kotlin#ktlint#Handle(buffer, lines) abort
|
||||||
|
let l:message_pattern = '^\(.*\):\([0-9]\+\):\([0-9]\+\):\s\+\(.*\)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:message_pattern)
|
||||||
|
let l:line = l:match[2] + 0
|
||||||
|
let l:column = l:match[3] + 0
|
||||||
|
let l:text = l:match[4]
|
||||||
|
|
||||||
|
let l:type = l:text =~? 'not a valid kotlin file' ? 'E' : 'W'
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:line,
|
||||||
|
\ 'col': l:column,
|
||||||
|
\ 'text': l:text,
|
||||||
|
\ 'type': l:type
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('kotlin', {
|
||||||
|
\ 'name': 'ktlint',
|
||||||
|
\ 'executable': 'ktlint',
|
||||||
|
\ 'command_callback': 'ale_linters#kotlin#ktlint#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#kotlin#ktlint#Handle',
|
||||||
|
\ 'lint_file': 1
|
||||||
|
\})
|
56
sources_non_forked/ale/ale_linters/less/lessc.vim
Normal file
56
sources_non_forked/ale/ale_linters/less/lessc.vim
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
" Author: zanona <https://github.com/zanona>, w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: This file adds support for checking Less code with lessc.
|
||||||
|
|
||||||
|
call ale#Set('less_lessc_executable', 'lessc')
|
||||||
|
call ale#Set('less_lessc_options', '')
|
||||||
|
call ale#Set('less_lessc_use_global', 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 : '')
|
||||||
|
\ . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#less#lessc#Handle(buffer, lines) abort
|
||||||
|
let l:dir = expand('#' . a:buffer . ':p:h')
|
||||||
|
" Matches patterns like the following:
|
||||||
|
let l:pattern = '^\(\w\+\): \(.\{-}\) in \(.\{-}\) on line \(\d\+\), column \(\d\+\):$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:item = {
|
||||||
|
\ 'lnum': l:match[4] + 0,
|
||||||
|
\ 'col': l:match[5] + 0,
|
||||||
|
\ 'text': l:match[2],
|
||||||
|
\ 'type': 'E',
|
||||||
|
\}
|
||||||
|
|
||||||
|
if l:match[3] isnot# '-'
|
||||||
|
let l:item.filename = ale#path#GetAbsPath(l:dir, l:match[3])
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, l:item)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('less', {
|
||||||
|
\ 'name': 'lessc',
|
||||||
|
\ 'executable_callback': 'ale_linters#less#lessc#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#less#lessc#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#less#lessc#Handle',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\})
|
27
sources_non_forked/ale/ale_linters/less/stylelint.vim
Normal file
27
sources_non_forked/ale/ale_linters/less/stylelint.vim
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
" Author: diartyz <diartyz@gmail.com>, w0rp <devw0rp@gmail.com>
|
||||||
|
|
||||||
|
call ale#Set('less_stylelint_executable', 'stylelint')
|
||||||
|
call ale#Set('less_stylelint_options', '')
|
||||||
|
call ale#Set('less_stylelint_use_global', 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'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('less', {
|
||||||
|
\ 'name': 'stylelint',
|
||||||
|
\ 'executable_callback': 'ale_linters#less#stylelint#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#less#stylelint#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
|
||||||
|
\})
|
35
sources_non_forked/ale/ale_linters/llvm/llc.vim
Normal file
35
sources_non_forked/ale/ale_linters/llvm/llc.vim
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
" Author: rhysd <https://rhysd.github.io>
|
||||||
|
" Description: Support for checking LLVM IR with llc
|
||||||
|
|
||||||
|
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='
|
||||||
|
\ . ale#Escape(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, "{
|
||||||
|
\ 'lnum': str2nr(v:val[1]),
|
||||||
|
\ 'col': str2nr(v:val[2]),
|
||||||
|
\ 'text': v:val[3],
|
||||||
|
\ 'type': 'E',
|
||||||
|
\}")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('llvm', {
|
||||||
|
\ 'name': 'llc',
|
||||||
|
\ 'executable_callback': 'ale_linters#llvm#llc#GetExecutable',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'command_callback': 'ale_linters#llvm#llc#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#llvm#llc#HandleErrors',
|
||||||
|
\})
|
40
sources_non_forked/ale/ale_linters/lua/luac.vim
Normal file
40
sources_non_forked/ale/ale_linters/lua/luac.vim
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
" Author: Jon Xie https://github.com/xiejiangzhi
|
||||||
|
" Description: luac linter for lua files
|
||||||
|
|
||||||
|
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:
|
||||||
|
"
|
||||||
|
" luac: stdin:5: '=' expected near ')'
|
||||||
|
" luac: stdin:8: ')' expected (to close '(' at line 6) near '123'
|
||||||
|
let l:pattern = '\v^.*:(\d+): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': l:match[2],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('lua', {
|
||||||
|
\ 'name': 'luac',
|
||||||
|
\ 'executable_callback': 'ale_linters#lua#luac#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#lua#luac#GetCommand',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale_linters#lua#luac#Handle',
|
||||||
|
\})
|
52
sources_non_forked/ale/ale_linters/lua/luacheck.vim
Normal file
52
sources_non_forked/ale/ale_linters/lua/luacheck.vim
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
" 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
|
||||||
|
|
||||||
|
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')
|
||||||
|
\ . ' --formatter plain --codes --filename %s -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#lua#luacheck#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" artal.lua:159:17: (W111) shadowing definition of loop variable 'i' on line 106
|
||||||
|
" artal.lua:182:7: (W213) unused loop variable 'i'
|
||||||
|
let l:pattern = '^.*:\(\d\+\):\(\d\+\): (\([WE]\)\(\d\+\)) \(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
if !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
|
||||||
|
\ && l:match[3] is# 'W'
|
||||||
|
\ && index(range(611, 614), str2nr(l:match[4])) >= 0
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': l:match[3],
|
||||||
|
\ 'code': l:match[3] . l:match[4],
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('lua', {
|
||||||
|
\ 'name': 'luacheck',
|
||||||
|
\ 'executable_callback': 'ale_linters#lua#luacheck#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale_linters#lua#luacheck#GetCommand',
|
||||||
|
\ 'callback': 'ale_linters#lua#luacheck#Handle',
|
||||||
|
\})
|
11
sources_non_forked/ale/ale_linters/mail/alex.vim
Normal file
11
sources_non_forked/ale/ale_linters/mail/alex.vim
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
" Author: Johannes Wienke <languitar@semipol.de>
|
||||||
|
" Description: alex for HTML files
|
||||||
|
|
||||||
|
call ale#linter#Define('mail', {
|
||||||
|
\ 'name': 'alex',
|
||||||
|
\ 'executable': 'alex',
|
||||||
|
\ 'command': 'alex %s -t',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale#handlers#alex#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/mail/proselint.vim
Normal file
9
sources_non_forked/ale/ale_linters/mail/proselint.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: Daniel M. Capella https://github.com/polyzen
|
||||||
|
" Description: proselint for mail files
|
||||||
|
|
||||||
|
call ale#linter#Define('mail', {
|
||||||
|
\ 'name': 'proselint',
|
||||||
|
\ 'executable': 'proselint',
|
||||||
|
\ 'command': 'proselint %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
9
sources_non_forked/ale/ale_linters/mail/vale.vim
Normal file
9
sources_non_forked/ale/ale_linters/mail/vale.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
" Author: chew-z https://github.com/chew-z
|
||||||
|
" Description: vale for Markdown files
|
||||||
|
|
||||||
|
call ale#linter#Define('mail', {
|
||||||
|
\ 'name': 'vale',
|
||||||
|
\ 'executable': 'vale',
|
||||||
|
\ 'command': 'vale --output=JSON %t',
|
||||||
|
\ 'callback': 'ale#handlers#vale#Handle',
|
||||||
|
\})
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue