Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
45a28383a2
36 changed files with 683 additions and 72 deletions
|
@ -10,6 +10,8 @@ ENV PACKAGES="\
|
||||||
git \
|
git \
|
||||||
python \
|
python \
|
||||||
py-pip \
|
py-pip \
|
||||||
|
grep \
|
||||||
|
sed \
|
||||||
"
|
"
|
||||||
RUN apk --update add $PACKAGES && \
|
RUN apk --update add $PACKAGES && \
|
||||||
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
||||||
|
|
|
@ -1,14 +1,22 @@
|
||||||
" Author: Magnus Ottenklinger - https://github.com/evnu
|
" Author: Magnus Ottenklinger - https://github.com/evnu
|
||||||
|
|
||||||
|
let g:ale_erlang_erlc_executable = get(g:, 'ale_erlang_erlc_executable', 'erlc')
|
||||||
let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '')
|
let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#erlang#erlc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'erlang_erlc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#erlang#erlc#GetCommand(buffer) abort
|
function! ale_linters#erlang#erlc#GetCommand(buffer) abort
|
||||||
let l:output_file = ale#util#Tempname()
|
let l:output_file = ale#util#Tempname()
|
||||||
call ale#command#ManageFile(a:buffer, l:output_file)
|
call ale#command#ManageFile(a:buffer, l:output_file)
|
||||||
|
|
||||||
return 'erlc -o ' . ale#Escape(l:output_file)
|
let l:command = ale#Escape(ale_linters#erlang#erlc#GetExecutable(a:buffer))
|
||||||
\ . ' ' . ale#Var(a:buffer, 'erlang_erlc_options')
|
\ . ' -o ' . ale#Escape(l:output_file)
|
||||||
\ . ' %t'
|
\ . ' ' . ale#Var(a:buffer, 'erlang_erlc_options')
|
||||||
|
\ . ' %t'
|
||||||
|
|
||||||
|
return l:command
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#erlang#erlc#Handle(buffer, lines) abort
|
function! ale_linters#erlang#erlc#Handle(buffer, lines) abort
|
||||||
|
@ -90,7 +98,7 @@ endfunction
|
||||||
|
|
||||||
call ale#linter#Define('erlang', {
|
call ale#linter#Define('erlang', {
|
||||||
\ 'name': 'erlc',
|
\ 'name': 'erlc',
|
||||||
\ 'executable': 'erlc',
|
\ 'executable': function('ale_linters#erlang#erlc#GetExecutable'),
|
||||||
\ 'command': function('ale_linters#erlang#erlc#GetCommand'),
|
\ 'command': function('ale_linters#erlang#erlc#GetCommand'),
|
||||||
\ 'callback': 'ale_linters#erlang#erlc#Handle',
|
\ 'callback': 'ale_linters#erlang#erlc#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
33
ale_linters/inko/inko.vim
Normal file
33
ale_linters/inko/inko.vim
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
" Author: Yorick Peterse <yorick@yorickpeterse.com>
|
||||||
|
" Description: linting of Inko source code using the Inko compiler
|
||||||
|
|
||||||
|
call ale#Set('inko_inko_executable', 'inko')
|
||||||
|
|
||||||
|
function! ale_linters#inko#inko#GetCommand(buffer) abort
|
||||||
|
let l:include = ''
|
||||||
|
|
||||||
|
" Include the tests source directory, but only for test files.
|
||||||
|
if expand('#' . a:buffer . ':p') =~? '\vtests[/\\]test[/\\]'
|
||||||
|
let l:test_dir = ale#path#FindNearestDirectory(a:buffer, 'tests')
|
||||||
|
|
||||||
|
if isdirectory(l:test_dir)
|
||||||
|
let l:include = '--include ' . ale#Escape(l:test_dir)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" We use %s instead of %t so the compiler determines the correct module
|
||||||
|
" names for the file being edited. Not doing so may lead to errors in
|
||||||
|
" certain cases.
|
||||||
|
return '%e build --check --format=json'
|
||||||
|
\ . ale#Pad(l:include)
|
||||||
|
\ . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('inko', {
|
||||||
|
\ 'name': 'inko',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'inko_inko_executable')},
|
||||||
|
\ 'command': function('ale_linters#inko#inko#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#inko#Handle',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'lint_file': 1
|
||||||
|
\})
|
|
@ -25,7 +25,8 @@ function! ale_linters#salt#salt_lint#Handle(buffer, lines) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('salt', {
|
call ale#linter#Define('salt', {
|
||||||
\ 'name': 'salt-lint',
|
\ 'name': 'salt_lint',
|
||||||
|
\ 'aliases': ['salt-lint'],
|
||||||
\ 'executable': {b -> ale#Var(b, 'salt_salt_lint_executable')},
|
\ 'executable': {b -> ale#Var(b, 'salt_salt_lint_executable')},
|
||||||
\ 'command': function('ale_linters#salt#salt_lint#GetCommand'),
|
\ 'command': function('ale_linters#salt#salt_lint#GetCommand'),
|
||||||
\ 'callback': 'ale_linters#salt#salt_lint#Handle'
|
\ 'callback': 'ale_linters#salt#salt_lint#Handle'
|
||||||
|
|
|
@ -261,7 +261,10 @@ function! ale#codefix#HandleLSPResponse(conn_id, response) abort
|
||||||
|
|
||||||
" Send the results to the menu callback, if set.
|
" Send the results to the menu callback, if set.
|
||||||
if l:MenuCallback isnot v:null
|
if l:MenuCallback isnot v:null
|
||||||
call l:MenuCallback(map(copy(l:result), '[''lsp'', v:val]'))
|
call l:MenuCallback(
|
||||||
|
\ l:data,
|
||||||
|
\ map(copy(l:result), '[''lsp'', v:val]')
|
||||||
|
\)
|
||||||
|
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -9,7 +9,6 @@ let g:ale_echo_delay = get(g:, 'ale_echo_delay', 10)
|
||||||
let g:ale_echo_msg_format = get(g:, 'ale_echo_msg_format', '%code: %%s')
|
let g:ale_echo_msg_format = get(g:, 'ale_echo_msg_format', '%code: %%s')
|
||||||
|
|
||||||
let s:cursor_timer = -1
|
let s:cursor_timer = -1
|
||||||
let s:last_pos = [0, 0, 0]
|
|
||||||
|
|
||||||
function! ale#cursor#TruncatedEcho(original_message) abort
|
function! ale#cursor#TruncatedEcho(original_message) abort
|
||||||
let l:message = a:original_message
|
let l:message = a:original_message
|
||||||
|
@ -118,14 +117,18 @@ function! ale#cursor#EchoCursorWarningWithDelay() abort
|
||||||
|
|
||||||
let l:pos = getpos('.')[0:2]
|
let l:pos = getpos('.')[0:2]
|
||||||
|
|
||||||
|
if !exists('w:last_pos')
|
||||||
|
let w:last_pos = [0, 0, 0]
|
||||||
|
endif
|
||||||
|
|
||||||
" Check the current buffer, line, and column number against the last
|
" Check the current buffer, line, and column number against the last
|
||||||
" recorded position. If the position has actually changed, *then*
|
" recorded position. If the position has actually changed, *then*
|
||||||
" we should echo something. Otherwise we can end up doing processing
|
" we should echo something. Otherwise we can end up doing processing
|
||||||
" the echo message far too frequently.
|
" the echo message far too frequently.
|
||||||
if l:pos != s:last_pos
|
if l:pos != w:last_pos
|
||||||
let l:delay = ale#Var(l:buffer, 'echo_delay')
|
let l:delay = ale#Var(l:buffer, 'echo_delay')
|
||||||
|
|
||||||
let s:last_pos = l:pos
|
let w:last_pos = l:pos
|
||||||
let s:cursor_timer = timer_start(
|
let s:cursor_timer = timer_start(
|
||||||
\ l:delay,
|
\ l:delay,
|
||||||
\ function('ale#cursor#EchoCursorWarning')
|
\ function('ale#cursor#EchoCursorWarning')
|
||||||
|
@ -139,11 +142,16 @@ function! s:ShowCursorDetailForItem(loc, options) abort
|
||||||
let s:last_detailed_line = line('.')
|
let s:last_detailed_line = line('.')
|
||||||
let l:message = get(a:loc, 'detail', a:loc.text)
|
let l:message = get(a:loc, 'detail', a:loc.text)
|
||||||
let l:lines = split(l:message, "\n")
|
let l:lines = split(l:message, "\n")
|
||||||
call ale#preview#Show(l:lines, {'stay_here': l:stay_here})
|
|
||||||
|
|
||||||
" Clear the echo message if we manually displayed details.
|
if g:ale_floating_preview || g:ale_detail_to_floating_preview
|
||||||
if !l:stay_here
|
call ale#floating_preview#Show(l:lines)
|
||||||
execute 'echo'
|
else
|
||||||
|
call ale#preview#Show(l:lines, {'stay_here': l:stay_here})
|
||||||
|
|
||||||
|
" Clear the echo message if we manually displayed details.
|
||||||
|
if !l:stay_here
|
||||||
|
execute 'echo'
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ let s:default_registry = {
|
||||||
\ },
|
\ },
|
||||||
\ 'scalafmt': {
|
\ 'scalafmt': {
|
||||||
\ 'function': 'ale#fixers#scalafmt#Fix',
|
\ 'function': 'ale#fixers#scalafmt#Fix',
|
||||||
\ 'suggested_filetypes': ['scala'],
|
\ 'suggested_filetypes': ['sbt', 'scala'],
|
||||||
\ 'description': 'Fix Scala files using scalafmt',
|
\ 'description': 'Fix Scala files using scalafmt',
|
||||||
\ },
|
\ },
|
||||||
\ 'sorbet': {
|
\ 'sorbet': {
|
||||||
|
|
91
autoload/ale/floating_preview.vim
Normal file
91
autoload/ale/floating_preview.vim
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
" Author: Jan-Grimo Sobez <jan-grimo.sobez@phys.chem.ethz.ch>
|
||||||
|
" Author: Kevin Clark <kevin.clark@gmail.com>
|
||||||
|
" Description: Floating preview window for showing whatever information in.
|
||||||
|
|
||||||
|
" Precondition: exists('*nvim_open_win')
|
||||||
|
|
||||||
|
function! ale#floating_preview#Show(lines, ...) abort
|
||||||
|
if !exists('*nvim_open_win')
|
||||||
|
execute 'echom ''Floating windows not supported in this vim instance.'''
|
||||||
|
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Remove the close autocmd so it doesn't happen mid update
|
||||||
|
augroup ale_floating_preview_window
|
||||||
|
autocmd!
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
let l:options = get(a:000, 0, {})
|
||||||
|
|
||||||
|
" Only create a new window if we need it
|
||||||
|
if !exists('w:preview') || index(nvim_list_wins(), w:preview['id']) is# -1
|
||||||
|
call s:Create(l:options)
|
||||||
|
else
|
||||||
|
call nvim_buf_set_option(w:preview['buffer'], 'modifiable', v:true)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Execute commands in window context
|
||||||
|
let l:parent_window = nvim_get_current_win()
|
||||||
|
|
||||||
|
call nvim_set_current_win(w:preview['id'])
|
||||||
|
|
||||||
|
for l:command in get(l:options, 'commands', [])
|
||||||
|
call execute(l:command)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
call nvim_set_current_win(l:parent_window)
|
||||||
|
|
||||||
|
" Return to parent context on move
|
||||||
|
augroup ale_floating_preview_window
|
||||||
|
autocmd!
|
||||||
|
|
||||||
|
if g:ale_close_preview_on_insert
|
||||||
|
autocmd CursorMoved,TabLeave,WinLeave,InsertEnter <buffer> ++once call s:Close()
|
||||||
|
else
|
||||||
|
autocmd CursorMoved,TabLeave,WinLeave <buffer> ++once call s:Close()
|
||||||
|
endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
let l:width = max(map(copy(a:lines), 'strdisplaywidth(v:val)'))
|
||||||
|
let l:height = min([len(a:lines), 10])
|
||||||
|
call nvim_win_set_width(w:preview['id'], l:width)
|
||||||
|
call nvim_win_set_height(w:preview['id'], l:height)
|
||||||
|
|
||||||
|
call nvim_buf_set_lines(w:preview['buffer'], 0, -1, v:false, a:lines)
|
||||||
|
call nvim_buf_set_option(w:preview['buffer'], 'modified', v:false)
|
||||||
|
call nvim_buf_set_option(w:preview['buffer'], 'modifiable', v:false)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:Create(options) abort
|
||||||
|
let l:buffer = nvim_create_buf(v:false, v:false)
|
||||||
|
let l:winid = nvim_open_win(l:buffer, v:false, {
|
||||||
|
\ 'relative': 'cursor',
|
||||||
|
\ 'row': 1,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'width': 42,
|
||||||
|
\ 'height': 4,
|
||||||
|
\ 'style': 'minimal'
|
||||||
|
\ })
|
||||||
|
call nvim_buf_set_option(l:buffer, 'buftype', 'acwrite')
|
||||||
|
call nvim_buf_set_option(l:buffer, 'bufhidden', 'delete')
|
||||||
|
call nvim_buf_set_option(l:buffer, 'swapfile', v:false)
|
||||||
|
call nvim_buf_set_option(l:buffer, 'filetype', get(a:options, 'filetype', 'ale-preview'))
|
||||||
|
|
||||||
|
let w:preview = {'id': l:winid, 'buffer': l:buffer}
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:Close() abort
|
||||||
|
if !exists('w:preview')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call setbufvar(w:preview['buffer'], '&modified', 0)
|
||||||
|
|
||||||
|
if win_id2win(w:preview['id']) > 0
|
||||||
|
execute win_id2win(w:preview['id']).'wincmd c'
|
||||||
|
endif
|
||||||
|
|
||||||
|
unlet w:preview
|
||||||
|
endfunction
|
||||||
|
|
37
autoload/ale/handlers/inko.vim
Normal file
37
autoload/ale/handlers/inko.vim
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
" Author: Yorick Peterse <yorick@yorickpeterse.com>
|
||||||
|
" Description: output handlers for the Inko JSON format
|
||||||
|
|
||||||
|
function! ale#handlers#inko#GetType(severity) abort
|
||||||
|
if a:severity is? 'warning'
|
||||||
|
return 'W'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return 'E'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#handlers#inko#Handle(buffer, lines) abort
|
||||||
|
try
|
||||||
|
let l:errors = json_decode(join(a:lines, ''))
|
||||||
|
catch
|
||||||
|
return []
|
||||||
|
endtry
|
||||||
|
|
||||||
|
if empty(l:errors)
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:output = []
|
||||||
|
let l:dir = expand('#' . a:buffer . ':p:h')
|
||||||
|
|
||||||
|
for l:error in l:errors
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:error['file']),
|
||||||
|
\ 'lnum': l:error['line'],
|
||||||
|
\ 'col': l:error['column'],
|
||||||
|
\ 'text': l:error['message'],
|
||||||
|
\ 'type': ale#handlers#inko#GetType(l:error['level']),
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
|
@ -46,6 +46,10 @@ function! ale#hover#HandleTSServerResponse(conn_id, response) abort
|
||||||
call balloon_show(a:response.body.displayString)
|
call balloon_show(a:response.body.displayString)
|
||||||
elseif get(l:options, 'truncated_echo', 0)
|
elseif get(l:options, 'truncated_echo', 0)
|
||||||
call ale#cursor#TruncatedEcho(split(a:response.body.displayString, "\n")[0])
|
call ale#cursor#TruncatedEcho(split(a:response.body.displayString, "\n")[0])
|
||||||
|
elseif g:ale_hover_to_floating_preview || g:ale_floating_preview
|
||||||
|
call ale#floating_preview#Show(split(a:response.body.displayString, "\n"), {
|
||||||
|
\ 'filetype': 'ale-preview.message',
|
||||||
|
\})
|
||||||
elseif g:ale_hover_to_preview
|
elseif g:ale_hover_to_preview
|
||||||
call ale#preview#Show(split(a:response.body.displayString, "\n"), {
|
call ale#preview#Show(split(a:response.body.displayString, "\n"), {
|
||||||
\ 'filetype': 'ale-preview.message',
|
\ 'filetype': 'ale-preview.message',
|
||||||
|
@ -226,6 +230,11 @@ function! ale#hover#HandleLSPResponse(conn_id, response) abort
|
||||||
call balloon_show(join(l:lines, "\n"))
|
call balloon_show(join(l:lines, "\n"))
|
||||||
elseif get(l:options, 'truncated_echo', 0)
|
elseif get(l:options, 'truncated_echo', 0)
|
||||||
call ale#cursor#TruncatedEcho(l:lines[0])
|
call ale#cursor#TruncatedEcho(l:lines[0])
|
||||||
|
elseif g:ale_hover_to_floating_preview || g:ale_floating_preview
|
||||||
|
call ale#floating_preview#Show(l:lines, {
|
||||||
|
\ 'filetype': 'ale-preview.message',
|
||||||
|
\ 'commands': l:commands,
|
||||||
|
\})
|
||||||
elseif g:ale_hover_to_preview
|
elseif g:ale_hover_to_preview
|
||||||
call ale#preview#Show(l:lines, {
|
call ale#preview#Show(l:lines, {
|
||||||
\ 'filetype': 'ale-preview.message',
|
\ 'filetype': 'ale-preview.message',
|
||||||
|
|
|
@ -43,6 +43,7 @@ let s:default_ale_linters = {
|
||||||
\ 'go': ['gofmt', 'golint', 'go vet'],
|
\ 'go': ['gofmt', 'golint', 'go vet'],
|
||||||
\ 'hack': ['hack'],
|
\ 'hack': ['hack'],
|
||||||
\ 'help': [],
|
\ 'help': [],
|
||||||
|
\ 'inko': ['inko'],
|
||||||
\ 'perl': ['perlcritic'],
|
\ 'perl': ['perlcritic'],
|
||||||
\ 'perl6': [],
|
\ 'perl6': [],
|
||||||
\ 'python': ['flake8', 'mypy', 'pylint', 'pyright'],
|
\ 'python': ['flake8', 'mypy', 'pylint', 'pyright'],
|
||||||
|
|
|
@ -32,6 +32,8 @@ function! ale#python#FindProjectRootIni(buffer) abort
|
||||||
\|| filereadable(l:path . '/.pylintrc')
|
\|| filereadable(l:path . '/.pylintrc')
|
||||||
\|| filereadable(l:path . '/Pipfile')
|
\|| filereadable(l:path . '/Pipfile')
|
||||||
\|| filereadable(l:path . '/Pipfile.lock')
|
\|| filereadable(l:path . '/Pipfile.lock')
|
||||||
|
\|| filereadable(l:path . '/poetry.lock')
|
||||||
|
\|| filereadable(l:path . '/pyproject.toml')
|
||||||
return l:path
|
return l:path
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
|
@ -486,7 +486,7 @@ function! ale#util#Input(message, value) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#util#HasBuflineApi() abort
|
function! ale#util#HasBuflineApi() abort
|
||||||
return exists('*deletebufline') && exists('*appendbufline') && exists('*getpos') && exists('*setpos')
|
return exists('*deletebufline') && exists('*setbufline')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Sets buffer contents to lines
|
" Sets buffer contents to lines
|
||||||
|
@ -507,11 +507,8 @@ function! ale#util#SetBufferContents(buffer, lines) abort
|
||||||
|
|
||||||
" Use a Vim API for setting lines in other buffers, if available.
|
" Use a Vim API for setting lines in other buffers, if available.
|
||||||
if l:has_bufline_api
|
if l:has_bufline_api
|
||||||
let l:save_cursor = getpos('.')
|
call setbufline(a:buffer, 1, l:new_lines)
|
||||||
call deletebufline(a:buffer, 1, '$')
|
call deletebufline(a:buffer, l:first_line_to_remove, '$')
|
||||||
call appendbufline(a:buffer, 1, l:new_lines)
|
|
||||||
call deletebufline(a:buffer, 1, 1)
|
|
||||||
call setpos('.', l:save_cursor)
|
|
||||||
" Fall back on setting lines the old way, for the current buffer.
|
" Fall back on setting lines the old way, for the current buffer.
|
||||||
else
|
else
|
||||||
let l:old_line_length = line('$')
|
let l:old_line_length = line('$')
|
||||||
|
|
|
@ -46,6 +46,14 @@ g:ale_erlang_elvis_executable *g:ale_erlang_elvis_executable*
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
erlc *ale-erlang-erlc*
|
erlc *ale-erlang-erlc*
|
||||||
|
|
||||||
|
g:ale_erlang_erlc_executable *g:ale_erlang_erlc_executable*
|
||||||
|
*b:ale_erlang_erlc_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'erlc'`
|
||||||
|
|
||||||
|
This variable can be changed to specify the erlc executable.
|
||||||
|
|
||||||
|
|
||||||
g:ale_erlang_erlc_options *g:ale_erlang_erlc_options*
|
g:ale_erlang_erlc_options *g:ale_erlang_erlc_options*
|
||||||
*b:ale_erlang_erlc_options*
|
*b:ale_erlang_erlc_options*
|
||||||
Type: |String|
|
Type: |String|
|
||||||
|
|
22
doc/ale-inko.txt
Normal file
22
doc/ale-inko.txt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
===============================================================================
|
||||||
|
ALE Inko Integration *ale-inko-options*
|
||||||
|
*ale-integration-inko*
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
Integration Information
|
||||||
|
|
||||||
|
Currently, the only supported linter for Inko is the Inko compiler itself.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
inko *ale-inko-inko*
|
||||||
|
|
||||||
|
g:ale_inko_inko_executable *g:ale_inko_inko_executable*
|
||||||
|
*b:ale_inko_inko_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'inko'`
|
||||||
|
|
||||||
|
This variable can be modified to change the executable path for `inko`.
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
|
@ -36,6 +36,8 @@ ALE will look for configuration files with the following filenames. >
|
||||||
.pylintrc
|
.pylintrc
|
||||||
Pipfile
|
Pipfile
|
||||||
Pipfile.lock
|
Pipfile.lock
|
||||||
|
poetry.lock
|
||||||
|
pyproject.toml
|
||||||
<
|
<
|
||||||
|
|
||||||
The first directory containing any of the files named above will be used.
|
The first directory containing any of the files named above will be used.
|
||||||
|
|
|
@ -50,8 +50,8 @@ Notes:
|
||||||
* `astyle`
|
* `astyle`
|
||||||
* `ccls`
|
* `ccls`
|
||||||
* `clang` (`cc`)
|
* `clang` (`cc`)
|
||||||
* `clangd`
|
|
||||||
* `clang-format`
|
* `clang-format`
|
||||||
|
* `clangd`
|
||||||
* `clangtidy`!!
|
* `clangtidy`!!
|
||||||
* `cppcheck`
|
* `cppcheck`
|
||||||
* `cpplint`!!
|
* `cpplint`!!
|
||||||
|
@ -68,9 +68,9 @@ Notes:
|
||||||
* `astyle`
|
* `astyle`
|
||||||
* `ccls`
|
* `ccls`
|
||||||
* `clang` (`cc`)
|
* `clang` (`cc`)
|
||||||
|
* `clang-format`
|
||||||
* `clangcheck`!!
|
* `clangcheck`!!
|
||||||
* `clangd`
|
* `clangd`
|
||||||
* `clang-format`
|
|
||||||
* `clangtidy`!!
|
* `clangtidy`!!
|
||||||
* `clazy`!!
|
* `clazy`!!
|
||||||
* `cppcheck`
|
* `cppcheck`
|
||||||
|
@ -141,9 +141,9 @@ Notes:
|
||||||
* `erubis`
|
* `erubis`
|
||||||
* `ruumba`
|
* `ruumba`
|
||||||
* Erlang
|
* Erlang
|
||||||
|
* `SyntaxErl`
|
||||||
* `elvis`!!
|
* `elvis`!!
|
||||||
* `erlc`
|
* `erlc`
|
||||||
* `SyntaxErl`
|
|
||||||
* Fish
|
* Fish
|
||||||
* `fish` (-n flag)
|
* `fish` (-n flag)
|
||||||
* Fortran
|
* Fortran
|
||||||
|
@ -161,17 +161,17 @@ Notes:
|
||||||
* Go
|
* Go
|
||||||
* `bingo`
|
* `bingo`
|
||||||
* `go build`!!
|
* `go build`!!
|
||||||
|
* `go mod`!!
|
||||||
|
* `go vet`!!
|
||||||
* `gofmt`
|
* `gofmt`
|
||||||
* `goimports`
|
* `goimports`
|
||||||
* `golangci-lint`!!
|
* `golangci-lint`!!
|
||||||
* `golangserver`
|
* `golangserver`
|
||||||
* `golint`
|
* `golint`
|
||||||
* `gometalinter`!!
|
* `gometalinter`!!
|
||||||
* `go mod`!!
|
|
||||||
* `gopls`
|
* `gopls`
|
||||||
* `gosimple`!!
|
* `gosimple`!!
|
||||||
* `gotype`!!
|
* `gotype`!!
|
||||||
* `go vet`!!
|
|
||||||
* `revive`!!
|
* `revive`!!
|
||||||
* `staticcheck`!!
|
* `staticcheck`!!
|
||||||
* GraphQL
|
* GraphQL
|
||||||
|
@ -204,10 +204,10 @@ Notes:
|
||||||
* HCL
|
* HCL
|
||||||
* `terraform-fmt`
|
* `terraform-fmt`
|
||||||
* HTML
|
* HTML
|
||||||
|
* `HTMLHint`
|
||||||
* `alex`!!
|
* `alex`!!
|
||||||
* `fecs`
|
* `fecs`
|
||||||
* `html-beautify`
|
* `html-beautify`
|
||||||
* `HTMLHint`
|
|
||||||
* `prettier`
|
* `prettier`
|
||||||
* `proselint`
|
* `proselint`
|
||||||
* `tidy`
|
* `tidy`
|
||||||
|
@ -216,15 +216,17 @@ Notes:
|
||||||
* `idris`
|
* `idris`
|
||||||
* Ink
|
* Ink
|
||||||
* `ink-language-server`
|
* `ink-language-server`
|
||||||
|
* Inko
|
||||||
|
* `inko` !!
|
||||||
* ISPC
|
* ISPC
|
||||||
* `ispc`!!
|
* `ispc`!!
|
||||||
* Java
|
* Java
|
||||||
|
* `PMD`
|
||||||
* `checkstyle`
|
* `checkstyle`
|
||||||
* `eclipselsp`
|
* `eclipselsp`
|
||||||
* `google-java-format`
|
* `google-java-format`
|
||||||
* `javac`
|
* `javac`
|
||||||
* `javalsp`
|
* `javalsp`
|
||||||
* `PMD`
|
|
||||||
* `uncrustify`
|
* `uncrustify`
|
||||||
* JavaScript
|
* JavaScript
|
||||||
* `eslint`
|
* `eslint`
|
||||||
|
@ -331,10 +333,10 @@ Notes:
|
||||||
* `intelephense`
|
* `intelephense`
|
||||||
* `langserver`
|
* `langserver`
|
||||||
* `phan`
|
* `phan`
|
||||||
|
* `php -l`
|
||||||
|
* `php-cs-fixer`
|
||||||
* `phpcbf`
|
* `phpcbf`
|
||||||
* `phpcs`
|
* `phpcs`
|
||||||
* `php-cs-fixer`
|
|
||||||
* `php -l`
|
|
||||||
* `phpmd`
|
* `phpmd`
|
||||||
* `phpstan`
|
* `phpstan`
|
||||||
* `psalm`!!
|
* `psalm`!!
|
||||||
|
@ -395,6 +397,8 @@ Notes:
|
||||||
* `styler`
|
* `styler`
|
||||||
* Racket
|
* Racket
|
||||||
* `raco`
|
* `raco`
|
||||||
|
* Re:VIEW
|
||||||
|
* `redpen`
|
||||||
* ReasonML
|
* ReasonML
|
||||||
* `merlin`
|
* `merlin`
|
||||||
* `ols`
|
* `ols`
|
||||||
|
@ -408,8 +412,6 @@ Notes:
|
||||||
* `textlint`
|
* `textlint`
|
||||||
* `vale`
|
* `vale`
|
||||||
* `write-good`
|
* `write-good`
|
||||||
* Re:VIEW
|
|
||||||
* `redpen`
|
|
||||||
* RPM spec
|
* RPM spec
|
||||||
* `rpmlint`
|
* `rpmlint`
|
||||||
* Ruby
|
* Ruby
|
||||||
|
@ -456,10 +458,10 @@ Notes:
|
||||||
* `solium`
|
* `solium`
|
||||||
* SQL
|
* SQL
|
||||||
* `pgformatter`
|
* `pgformatter`
|
||||||
|
* `sql-lint`
|
||||||
* `sqlfmt`
|
* `sqlfmt`
|
||||||
* `sqlformat`
|
* `sqlformat`
|
||||||
* `sqlint`
|
* `sqlint`
|
||||||
* `sql-lint`
|
|
||||||
* Stylus
|
* Stylus
|
||||||
* `stylelint`
|
* `stylelint`
|
||||||
* SugarSS
|
* SugarSS
|
||||||
|
|
37
doc/ale.txt
37
doc/ale.txt
|
@ -646,6 +646,9 @@ problem will be displayed in a balloon instead of hover information.
|
||||||
Hover information can be displayed in the preview window instead by setting
|
Hover information can be displayed in the preview window instead by setting
|
||||||
|g:ale_hover_to_preview| to `1`.
|
|g:ale_hover_to_preview| to `1`.
|
||||||
|
|
||||||
|
When using Neovim, if |g:ale_hover_to_floating_preview| or |g:ale_floating_preview|
|
||||||
|
is set to 1, the hover information will show in a floating window.
|
||||||
|
|
||||||
For Vim 8.1+ terminals, mouse hovering is disabled by default. Enabling
|
For Vim 8.1+ terminals, mouse hovering is disabled by default. Enabling
|
||||||
|balloonexpr| commands in terminals can cause scrolling issues in terminals,
|
|balloonexpr| commands in terminals can cause scrolling issues in terminals,
|
||||||
so ALE will not attempt to show balloons unless |g:ale_set_balloons| is set to
|
so ALE will not attempt to show balloons unless |g:ale_set_balloons| is set to
|
||||||
|
@ -954,6 +957,15 @@ g:ale_default_navigation *g:ale_default_navigation*
|
||||||
buffer, such as for |ALEFindReferences|, or |ALEGoToDefinition|.
|
buffer, such as for |ALEFindReferences|, or |ALEGoToDefinition|.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_detail_to_floating_preview *g:ale_detail_to_floating_preview*
|
||||||
|
*b:ale_detail_to_floating_preview*
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
When this option is set to `1`, Neovim will use a floating window for
|
||||||
|
ALEDetail output.
|
||||||
|
|
||||||
|
|
||||||
g:ale_disable_lsp *g:ale_disable_lsp*
|
g:ale_disable_lsp *g:ale_disable_lsp*
|
||||||
*b:ale_disable_lsp*
|
*b:ale_disable_lsp*
|
||||||
|
|
||||||
|
@ -1177,6 +1189,16 @@ g:ale_fix_on_save_ignore *g:ale_fix_on_save_ignore*
|
||||||
let g:ale_fix_on_save_ignore = [g:AddBar]
|
let g:ale_fix_on_save_ignore = [g:AddBar]
|
||||||
<
|
<
|
||||||
|
|
||||||
|
g:ale_floating_preview *g:ale_floating_preview*
|
||||||
|
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
When set to `1`, Neovim will use a floating window for ale's preview window.
|
||||||
|
This is equivalent to setting |g:ale_hover_to_floating_preview| and
|
||||||
|
|g:ale_detail_to_floating_preview| to `1`.
|
||||||
|
|
||||||
|
|
||||||
g:ale_history_enabled *g:ale_history_enabled*
|
g:ale_history_enabled *g:ale_history_enabled*
|
||||||
|
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
|
@ -1235,6 +1257,14 @@ g:ale_hover_to_preview *g:ale_hover_to_preview*
|
||||||
instead of in balloons or the message line.
|
instead of in balloons or the message line.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_hover_to_floating_preview *g:ale_hover_to_floating_preview*
|
||||||
|
*b:ale_hover_to_floating_preview*
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
If set to `1`, Neovim will use floating windows for hover messages.
|
||||||
|
|
||||||
|
|
||||||
g:ale_keep_list_window_open *g:ale_keep_list_window_open*
|
g:ale_keep_list_window_open *g:ale_keep_list_window_open*
|
||||||
*b:ale_keep_list_window_open*
|
*b:ale_keep_list_window_open*
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
|
@ -1531,6 +1561,7 @@ g:ale_linters *g:ale_linters*
|
||||||
\ 'go': ['gofmt', 'golint', 'go vet'],
|
\ 'go': ['gofmt', 'golint', 'go vet'],
|
||||||
\ 'hack': ['hack'],
|
\ 'hack': ['hack'],
|
||||||
\ 'help': [],
|
\ 'help': [],
|
||||||
|
\ 'inko': ['inko'],
|
||||||
\ 'perl': ['perlcritic'],
|
\ 'perl': ['perlcritic'],
|
||||||
\ 'perl6': [],
|
\ 'perl6': [],
|
||||||
\ 'python': ['flake8', 'mypy', 'pylint', 'pyright'],
|
\ 'python': ['flake8', 'mypy', 'pylint', 'pyright'],
|
||||||
|
@ -2709,6 +2740,8 @@ documented in additional help files.
|
||||||
idris.................................|ale-idris-idris|
|
idris.................................|ale-idris-idris|
|
||||||
ink.....................................|ale-ink-options|
|
ink.....................................|ale-ink-options|
|
||||||
ink-language-server...................|ale-ink-language-server|
|
ink-language-server...................|ale-ink-language-server|
|
||||||
|
inko....................................|ale-inko-options|
|
||||||
|
inko..................................|ale-inko-inko|
|
||||||
ispc....................................|ale-ispc-options|
|
ispc....................................|ale-ispc-options|
|
||||||
ispc..................................|ale-ispc-ispc|
|
ispc..................................|ale-ispc-ispc|
|
||||||
java....................................|ale-java-options|
|
java....................................|ale-java-options|
|
||||||
|
@ -2959,11 +2992,11 @@ documented in additional help files.
|
||||||
hdl-checker...........................|ale-vhdl-hdl-checker|
|
hdl-checker...........................|ale-vhdl-hdl-checker|
|
||||||
vcom..................................|ale-vhdl-vcom|
|
vcom..................................|ale-vhdl-vcom|
|
||||||
xvhdl.................................|ale-vhdl-xvhdl|
|
xvhdl.................................|ale-vhdl-xvhdl|
|
||||||
|
vim help................................|ale-vim-help-options|
|
||||||
|
write-good............................|ale-vim-help-write-good|
|
||||||
vim.....................................|ale-vim-options|
|
vim.....................................|ale-vim-options|
|
||||||
vimls.................................|ale-vim-vimls|
|
vimls.................................|ale-vim-vimls|
|
||||||
vint..................................|ale-vim-vint|
|
vint..................................|ale-vim-vint|
|
||||||
vim help................................|ale-vim-help-options|
|
|
||||||
write-good............................|ale-vim-help-write-good|
|
|
||||||
vue.....................................|ale-vue-options|
|
vue.....................................|ale-vue-options|
|
||||||
prettier..............................|ale-vue-prettier|
|
prettier..............................|ale-vue-prettier|
|
||||||
vls...................................|ale-vue-vls|
|
vls...................................|ale-vue-vls|
|
||||||
|
|
|
@ -138,6 +138,15 @@ let g:ale_set_balloons = get(g:, 'ale_set_balloons', has('balloon_eval') && has(
|
||||||
" Use preview window for hover messages.
|
" Use preview window for hover messages.
|
||||||
let g:ale_hover_to_preview = get(g:, 'ale_hover_to_preview', 0)
|
let g:ale_hover_to_preview = get(g:, 'ale_hover_to_preview', 0)
|
||||||
|
|
||||||
|
" Float preview windows in Neovim
|
||||||
|
let g:ale_floating_preview = get(g:, 'ale_floating_preview', 0)
|
||||||
|
|
||||||
|
" Hovers use floating windows in Neovim
|
||||||
|
let g:ale_hover_to_floating_preview = get(g:, 'ale_hover_to_floating_preview', 0)
|
||||||
|
|
||||||
|
" Detail uses floating windows in Neovim
|
||||||
|
let g:ale_detail_to_floating_preview = get(g:, 'ale_detail_to_floating_preview', 0)
|
||||||
|
|
||||||
" This flag can be set to 0 to disable warnings for trailing whitespace
|
" This flag can be set to 0 to disable warnings for trailing whitespace
|
||||||
let g:ale_warn_about_trailing_whitespace = get(g:, 'ale_warn_about_trailing_whitespace', 1)
|
let g:ale_warn_about_trailing_whitespace = get(g:, 'ale_warn_about_trailing_whitespace', 1)
|
||||||
" This flag can be set to 0 to disable warnings for trailing blank lines
|
" This flag can be set to 0 to disable warnings for trailing blank lines
|
||||||
|
|
|
@ -10,7 +10,7 @@ set -u
|
||||||
#
|
#
|
||||||
|
|
||||||
image=w0rp/ale
|
image=w0rp/ale
|
||||||
current_image_id=f58c7bf8900f
|
current_image_id=1c04720f5d17
|
||||||
|
|
||||||
# Used in all test scripts for running the selected Docker image.
|
# Used in all test scripts for running the selected Docker image.
|
||||||
DOCKER_RUN_IMAGE="$image"
|
DOCKER_RUN_IMAGE="$image"
|
||||||
|
|
|
@ -59,8 +59,8 @@ formatting.
|
||||||
* [astyle](http://astyle.sourceforge.net/)
|
* [astyle](http://astyle.sourceforge.net/)
|
||||||
* [ccls](https://github.com/MaskRay/ccls)
|
* [ccls](https://github.com/MaskRay/ccls)
|
||||||
* [clang](http://clang.llvm.org/)
|
* [clang](http://clang.llvm.org/)
|
||||||
* [clangd](https://clang.llvm.org/extra/clangd.html)
|
|
||||||
* [clang-format](https://clang.llvm.org/docs/ClangFormat.html)
|
* [clang-format](https://clang.llvm.org/docs/ClangFormat.html)
|
||||||
|
* [clangd](https://clang.llvm.org/extra/clangd.html)
|
||||||
* [clangtidy](http://clang.llvm.org/extra/clang-tidy/) :floppy_disk:
|
* [clangtidy](http://clang.llvm.org/extra/clang-tidy/) :floppy_disk:
|
||||||
* [cppcheck](http://cppcheck.sourceforge.net)
|
* [cppcheck](http://cppcheck.sourceforge.net)
|
||||||
* [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint)
|
* [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint)
|
||||||
|
@ -77,9 +77,9 @@ formatting.
|
||||||
* [astyle](http://astyle.sourceforge.net/)
|
* [astyle](http://astyle.sourceforge.net/)
|
||||||
* [ccls](https://github.com/MaskRay/ccls)
|
* [ccls](https://github.com/MaskRay/ccls)
|
||||||
* [clang](http://clang.llvm.org/)
|
* [clang](http://clang.llvm.org/)
|
||||||
|
* [clang-format](https://clang.llvm.org/docs/ClangFormat.html)
|
||||||
* [clangcheck](http://clang.llvm.org/docs/ClangCheck.html) :floppy_disk:
|
* [clangcheck](http://clang.llvm.org/docs/ClangCheck.html) :floppy_disk:
|
||||||
* [clangd](https://clang.llvm.org/extra/clangd.html)
|
* [clangd](https://clang.llvm.org/extra/clangd.html)
|
||||||
* [clang-format](https://clang.llvm.org/docs/ClangFormat.html)
|
|
||||||
* [clangtidy](http://clang.llvm.org/extra/clang-tidy/) :floppy_disk:
|
* [clangtidy](http://clang.llvm.org/extra/clang-tidy/) :floppy_disk:
|
||||||
* [clazy](https://github.com/KDE/clazy) :floppy_disk:
|
* [clazy](https://github.com/KDE/clazy) :floppy_disk:
|
||||||
* [cppcheck](http://cppcheck.sourceforge.net)
|
* [cppcheck](http://cppcheck.sourceforge.net)
|
||||||
|
@ -150,9 +150,9 @@ formatting.
|
||||||
* [erubis](https://github.com/kwatch/erubis)
|
* [erubis](https://github.com/kwatch/erubis)
|
||||||
* [ruumba](https://github.com/ericqweinstein/ruumba)
|
* [ruumba](https://github.com/ericqweinstein/ruumba)
|
||||||
* Erlang
|
* Erlang
|
||||||
|
* [SyntaxErl](https://github.com/ten0s/syntaxerl)
|
||||||
* [elvis](https://github.com/inaka/elvis) :floppy_disk:
|
* [elvis](https://github.com/inaka/elvis) :floppy_disk:
|
||||||
* [erlc](http://erlang.org/doc/man/erlc.html)
|
* [erlc](http://erlang.org/doc/man/erlc.html)
|
||||||
* [SyntaxErl](https://github.com/ten0s/syntaxerl)
|
|
||||||
* Fish
|
* Fish
|
||||||
* fish [-n flag](https://linux.die.net/man/1/fish)
|
* fish [-n flag](https://linux.die.net/man/1/fish)
|
||||||
* Fortran
|
* Fortran
|
||||||
|
@ -170,17 +170,17 @@ formatting.
|
||||||
* Go
|
* Go
|
||||||
* [bingo](https://github.com/saibing/bingo) :warning:
|
* [bingo](https://github.com/saibing/bingo) :warning:
|
||||||
* [go build](https://golang.org/cmd/go/) :warning: :floppy_disk:
|
* [go build](https://golang.org/cmd/go/) :warning: :floppy_disk:
|
||||||
|
* [go mod](https://golang.org/cmd/go/) :warning: :floppy_disk:
|
||||||
|
* [go vet](https://golang.org/cmd/vet/) :floppy_disk:
|
||||||
* [gofmt](https://golang.org/cmd/gofmt/)
|
* [gofmt](https://golang.org/cmd/gofmt/)
|
||||||
* [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports) :warning:
|
* [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports) :warning:
|
||||||
* [golangci-lint](https://github.com/golangci/golangci-lint) :warning: :floppy_disk:
|
* [golangci-lint](https://github.com/golangci/golangci-lint) :warning: :floppy_disk:
|
||||||
* [golangserver](https://github.com/sourcegraph/go-langserver) :warning:
|
* [golangserver](https://github.com/sourcegraph/go-langserver) :warning:
|
||||||
* [golint](https://godoc.org/github.com/golang/lint)
|
* [golint](https://godoc.org/github.com/golang/lint)
|
||||||
* [gometalinter](https://github.com/alecthomas/gometalinter) :warning: :floppy_disk:
|
* [gometalinter](https://github.com/alecthomas/gometalinter) :warning: :floppy_disk:
|
||||||
* [go mod](https://golang.org/cmd/go/) :warning: :floppy_disk:
|
|
||||||
* [gopls](https://github.com/golang/go/wiki/gopls) :warning:
|
* [gopls](https://github.com/golang/go/wiki/gopls) :warning:
|
||||||
* [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple) :warning: :floppy_disk:
|
* [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple) :warning: :floppy_disk:
|
||||||
* [gotype](https://godoc.org/golang.org/x/tools/cmd/gotype) :warning: :floppy_disk:
|
* [gotype](https://godoc.org/golang.org/x/tools/cmd/gotype) :warning: :floppy_disk:
|
||||||
* [go vet](https://golang.org/cmd/vet/) :floppy_disk:
|
|
||||||
* [revive](https://github.com/mgechev/revive) :warning: :floppy_disk:
|
* [revive](https://github.com/mgechev/revive) :warning: :floppy_disk:
|
||||||
* [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) :warning: :floppy_disk:
|
* [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) :warning: :floppy_disk:
|
||||||
* GraphQL
|
* GraphQL
|
||||||
|
@ -213,10 +213,10 @@ formatting.
|
||||||
* HCL
|
* HCL
|
||||||
* [terraform-fmt](https://github.com/hashicorp/terraform)
|
* [terraform-fmt](https://github.com/hashicorp/terraform)
|
||||||
* HTML
|
* HTML
|
||||||
|
* [HTMLHint](http://htmlhint.com/)
|
||||||
* [alex](https://github.com/wooorm/alex) :floppy_disk:
|
* [alex](https://github.com/wooorm/alex) :floppy_disk:
|
||||||
* [fecs](http://fecs.baidu.com/)
|
* [fecs](http://fecs.baidu.com/)
|
||||||
* [html-beautify](https://beautifier.io/)
|
* [html-beautify](https://beautifier.io/)
|
||||||
* [HTMLHint](http://htmlhint.com/)
|
|
||||||
* [prettier](https://github.com/prettier/prettier)
|
* [prettier](https://github.com/prettier/prettier)
|
||||||
* [proselint](http://proselint.com/)
|
* [proselint](http://proselint.com/)
|
||||||
* [tidy](http://www.html-tidy.org/)
|
* [tidy](http://www.html-tidy.org/)
|
||||||
|
@ -225,15 +225,17 @@ formatting.
|
||||||
* [idris](http://www.idris-lang.org/)
|
* [idris](http://www.idris-lang.org/)
|
||||||
* Ink
|
* Ink
|
||||||
* [ink-language-server](https://github.com/ephread/ink-language-server)
|
* [ink-language-server](https://github.com/ephread/ink-language-server)
|
||||||
|
* Inko
|
||||||
|
* [inko](https://inko-lang.org/) :floppy_disk:
|
||||||
* ISPC
|
* ISPC
|
||||||
* [ispc](https://ispc.github.io/) :floppy_disk:
|
* [ispc](https://ispc.github.io/) :floppy_disk:
|
||||||
* Java
|
* Java
|
||||||
|
* [PMD](https://pmd.github.io/)
|
||||||
* [checkstyle](http://checkstyle.sourceforge.net)
|
* [checkstyle](http://checkstyle.sourceforge.net)
|
||||||
* [eclipselsp](https://github.com/eclipse/eclipse.jdt.ls)
|
* [eclipselsp](https://github.com/eclipse/eclipse.jdt.ls)
|
||||||
* [google-java-format](https://github.com/google/google-java-format)
|
* [google-java-format](https://github.com/google/google-java-format)
|
||||||
* [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
|
* [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
|
||||||
* [javalsp](https://github.com/georgewfraser/vscode-javac)
|
* [javalsp](https://github.com/georgewfraser/vscode-javac)
|
||||||
* [PMD](https://pmd.github.io/)
|
|
||||||
* [uncrustify](https://github.com/uncrustify/uncrustify)
|
* [uncrustify](https://github.com/uncrustify/uncrustify)
|
||||||
* JavaScript
|
* JavaScript
|
||||||
* [eslint](http://eslint.org/)
|
* [eslint](http://eslint.org/)
|
||||||
|
@ -340,10 +342,10 @@ formatting.
|
||||||
* [intelephense](https://github.com/bmewburn/intelephense-docs)
|
* [intelephense](https://github.com/bmewburn/intelephense-docs)
|
||||||
* [langserver](https://github.com/felixfbecker/php-language-server)
|
* [langserver](https://github.com/felixfbecker/php-language-server)
|
||||||
* [phan](https://github.com/phan/phan) see `:help ale-php-phan` to instructions
|
* [phan](https://github.com/phan/phan) see `:help ale-php-phan` to instructions
|
||||||
|
* [php -l](https://secure.php.net/)
|
||||||
|
* [php-cs-fixer](http://cs.sensiolabs.org/)
|
||||||
* [phpcbf](https://github.com/squizlabs/PHP_CodeSniffer)
|
* [phpcbf](https://github.com/squizlabs/PHP_CodeSniffer)
|
||||||
* [phpcs](https://github.com/squizlabs/PHP_CodeSniffer)
|
* [phpcs](https://github.com/squizlabs/PHP_CodeSniffer)
|
||||||
* [php-cs-fixer](http://cs.sensiolabs.org/)
|
|
||||||
* [php -l](https://secure.php.net/)
|
|
||||||
* [phpmd](https://phpmd.org)
|
* [phpmd](https://phpmd.org)
|
||||||
* [phpstan](https://github.com/phpstan/phpstan)
|
* [phpstan](https://github.com/phpstan/phpstan)
|
||||||
* [psalm](https://getpsalm.org) :floppy_disk:
|
* [psalm](https://getpsalm.org) :floppy_disk:
|
||||||
|
@ -404,6 +406,8 @@ formatting.
|
||||||
* [styler](https://github.com/r-lib/styler)
|
* [styler](https://github.com/r-lib/styler)
|
||||||
* Racket
|
* Racket
|
||||||
* [raco](https://docs.racket-lang.org/raco/)
|
* [raco](https://docs.racket-lang.org/raco/)
|
||||||
|
* Re:VIEW
|
||||||
|
* [redpen](http://redpen.cc/)
|
||||||
* ReasonML
|
* ReasonML
|
||||||
* [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-reasonml-ols` for configuration instructions
|
* [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-reasonml-ols` for configuration instructions
|
||||||
* [ols](https://github.com/freebroccolo/ocaml-language-server)
|
* [ols](https://github.com/freebroccolo/ocaml-language-server)
|
||||||
|
@ -417,8 +421,6 @@ formatting.
|
||||||
* [textlint](https://textlint.github.io/)
|
* [textlint](https://textlint.github.io/)
|
||||||
* [vale](https://github.com/ValeLint/vale)
|
* [vale](https://github.com/ValeLint/vale)
|
||||||
* [write-good](https://github.com/btford/write-good)
|
* [write-good](https://github.com/btford/write-good)
|
||||||
* Re:VIEW
|
|
||||||
* [redpen](http://redpen.cc/)
|
|
||||||
* RPM spec
|
* RPM spec
|
||||||
* [rpmlint](https://github.com/rpm-software-management/rpmlint) :warning: (see `:help ale-integration-spec`)
|
* [rpmlint](https://github.com/rpm-software-management/rpmlint) :warning: (see `:help ale-integration-spec`)
|
||||||
* Ruby
|
* Ruby
|
||||||
|
@ -465,10 +467,10 @@ formatting.
|
||||||
* [solium](https://github.com/duaraghav8/Solium)
|
* [solium](https://github.com/duaraghav8/Solium)
|
||||||
* SQL
|
* SQL
|
||||||
* [pgformatter](https://github.com/darold/pgFormatter)
|
* [pgformatter](https://github.com/darold/pgFormatter)
|
||||||
|
* [sql-lint](https://github.com/joereynolds/sql-lint)
|
||||||
* [sqlfmt](https://github.com/jackc/sqlfmt)
|
* [sqlfmt](https://github.com/jackc/sqlfmt)
|
||||||
* [sqlformat](https://github.com/andialbrecht/sqlparse)
|
* [sqlformat](https://github.com/andialbrecht/sqlparse)
|
||||||
* [sqlint](https://github.com/purcell/sqlint)
|
* [sqlint](https://github.com/purcell/sqlint)
|
||||||
* [sql-lint](https://github.com/joereynolds/sql-lint)
|
|
||||||
* Stylus
|
* Stylus
|
||||||
* [stylelint](https://github.com/stylelint/stylelint)
|
* [stylelint](https://github.com/stylelint/stylelint)
|
||||||
* SugarSS
|
* SugarSS
|
||||||
|
|
0
test/command_callback/inko_paths/test.inko
Normal file
0
test/command_callback/inko_paths/test.inko
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('erlang', 'erlc')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The default command should be correct.):
|
||||||
|
let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr(''))
|
||||||
|
let g:regex = 'erlc.\+-o.\+%t'
|
||||||
|
let g:matched = match(g:cmd, g:regex)
|
||||||
|
|
||||||
|
" match returns -1 if not found
|
||||||
|
AssertNotEqual
|
||||||
|
\ g:matched,
|
||||||
|
\ -1,
|
||||||
|
\ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']'
|
||||||
|
|
||||||
|
Execute(The command should accept configured executable.):
|
||||||
|
let b:ale_erlang_erlc_executable = '/usr/bin/erlc'
|
||||||
|
let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr(''))
|
||||||
|
let g:regex = '/usr/bin/erlc.\+-o.\+%t'
|
||||||
|
let g:matched = match(g:cmd, g:regex)
|
||||||
|
|
||||||
|
" match returns -1 if not found
|
||||||
|
AssertNotEqual
|
||||||
|
\ g:matched,
|
||||||
|
\ -1,
|
||||||
|
\ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']'
|
||||||
|
|
||||||
|
Execute(The command should accept configured options.):
|
||||||
|
let b:ale_erlang_erlc_options = '-I include'
|
||||||
|
let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr(''))
|
||||||
|
let g:regex = 'erlc.\+-o.\+-I include.\+%t'
|
||||||
|
let g:matched = match(g:cmd, g:regex)
|
||||||
|
|
||||||
|
" match returns -1 if not found
|
||||||
|
AssertNotEqual
|
||||||
|
\ g:matched,
|
||||||
|
\ -1,
|
||||||
|
\ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']'
|
|
@ -1,5 +1,6 @@
|
||||||
Before:
|
Before:
|
||||||
call ale#assert#SetUpLinterTest('javascript', 'fecs')
|
call ale#assert#SetUpLinterTest('javascript', 'fecs')
|
||||||
|
runtime autoload/ale/handlers/fecs.vim
|
||||||
|
|
||||||
After:
|
After:
|
||||||
call ale#assert#TearDownLinterTest()
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
20
test/command_callback/test_inko_inko_callbacks.vader
Normal file
20
test/command_callback/test_inko_inko_callbacks.vader
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('inko', 'inko')
|
||||||
|
call ale#test#SetFilename('inko_paths/test.inko')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The default executable path should be correct):
|
||||||
|
AssertLinter 'inko', ale#Escape('inko') . ' build --check --format=json %s'
|
||||||
|
|
||||||
|
Execute(The inko callback should include tests/ for test paths):
|
||||||
|
call ale#engine#Cleanup(bufnr(''))
|
||||||
|
noautocmd e! inko_paths/tests/test/test_foo.inko
|
||||||
|
call ale#engine#InitBufferInfo(bufnr(''))
|
||||||
|
|
||||||
|
AssertLinter 'inko',
|
||||||
|
\ ale#Escape('inko')
|
||||||
|
\ . ' build --check --format=json --include '
|
||||||
|
\ . ale#Escape(ale#path#Simplify(g:dir . '/inko_paths/tests/'))
|
||||||
|
\ . ' %s'
|
54
test/handler/test_inko_handler.vader
Normal file
54
test/handler/test_inko_handler.vader
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
Before:
|
||||||
|
runtime ale_linters/inko/inko.vim
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#linter#Reset()
|
||||||
|
|
||||||
|
Execute(The inko handler should parse errors correctly):
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'filename': ale#path#Simplify('/tmp/foo.inko'),
|
||||||
|
\ 'lnum': 4,
|
||||||
|
\ 'col': 5,
|
||||||
|
\ 'text': 'this is an error',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ }
|
||||||
|
\ ],
|
||||||
|
\ ale#handlers#inko#Handle(bufnr(''), [
|
||||||
|
\ '[',
|
||||||
|
\ ' {',
|
||||||
|
\ ' "file": "/tmp/foo.inko",',
|
||||||
|
\ ' "line": 4,',
|
||||||
|
\ ' "column": 5,',
|
||||||
|
\ ' "message": "this is an error",',
|
||||||
|
\ ' "level": "error"',
|
||||||
|
\ ' }',
|
||||||
|
\ ']'
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
Execute(The inko handler should parse warnings correctly):
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'filename': ale#path#Simplify('/tmp/foo.inko'),
|
||||||
|
\ 'lnum': 4,
|
||||||
|
\ 'col': 5,
|
||||||
|
\ 'text': 'this is a warning',
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ }
|
||||||
|
\ ],
|
||||||
|
\ ale#handlers#inko#Handle(bufnr(''), [
|
||||||
|
\ '[',
|
||||||
|
\ ' {',
|
||||||
|
\ ' "file": "/tmp/foo.inko",',
|
||||||
|
\ ' "line": 4,',
|
||||||
|
\ ' "column": 5,',
|
||||||
|
\ ' "message": "this is a warning",',
|
||||||
|
\ ' "level": "warning"',
|
||||||
|
\ ' }',
|
||||||
|
\ ']'
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
Execute(The inko handler should handle empty output):
|
||||||
|
AssertEqual [], ale#handlers#inko#Handle(bufnr(''), [])
|
5
test/script/check-duplicate-tags
Executable file
5
test/script/check-duplicate-tags
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
grep --exclude=tags -roh '\*.*\*$' doc | sort | uniq -d
|
|
@ -15,14 +15,13 @@ while read -r; do
|
||||||
if [[ "$REPLY" =~ ^! ]]; then
|
if [[ "$REPLY" =~ ^! ]]; then
|
||||||
language="${REPLY/!/}"
|
language="${REPLY/!/}"
|
||||||
else
|
else
|
||||||
# shellcheck disable=SC2001
|
|
||||||
echo "$language - $REPLY"
|
echo "$language - $REPLY"
|
||||||
fi
|
fi
|
||||||
done < <(
|
done < <(
|
||||||
grep '^\*\|^ *\*' doc/ale-supported-languages-and-tools.txt \
|
grep '^\*\|^ *\*' doc/ale-supported-languages-and-tools.txt \
|
||||||
| sed -e '1,2d' \
|
| sed -e '1,2d' \
|
||||||
| sed 's/^\* */!/' \
|
| sed 's/^\* */!/' \
|
||||||
| sed 's/^ *\* *\|!!\|\^\|(.*)\|`//g' \
|
| sed -E 's/^ *\* *|!!|\^|\(.*\)|`//g' \
|
||||||
| sed 's/ *$//'
|
| sed 's/ *$//'
|
||||||
) > "$doc_file"
|
) > "$doc_file"
|
||||||
|
|
||||||
|
@ -30,13 +29,12 @@ while read -r; do
|
||||||
if [[ "$REPLY" =~ ^! ]]; then
|
if [[ "$REPLY" =~ ^! ]]; then
|
||||||
language="${REPLY/!/}"
|
language="${REPLY/!/}"
|
||||||
else
|
else
|
||||||
# shellcheck disable=SC2001
|
|
||||||
echo "$language - $REPLY"
|
echo "$language - $REPLY"
|
||||||
fi
|
fi
|
||||||
done < <(
|
done < <(
|
||||||
grep '^\*\|^ *\*' supported-tools.md \
|
grep '^\*\|^ *\*' supported-tools.md \
|
||||||
| sed 's/^\* */!/' \
|
| sed 's/^\* */!/' \
|
||||||
| sed 's/^ *\* *\|:floppy_disk:\|:warning:\|(.*)\|\[\|\].*\|-n flag//g' \
|
| sed -E 's/^ *\* *|:floppy_disk:|:warning:|\(.*\)|\[|\].*|-n flag//g' \
|
||||||
| sed 's/ *$//'
|
| sed 's/ *$//'
|
||||||
) > "$readme_file"
|
) > "$readme_file"
|
||||||
|
|
||||||
|
|
11
test/script/check-tag-alignment
Executable file
11
test/script/check-tag-alignment
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
exit_code=0
|
||||||
|
|
||||||
|
# Documentation tags need to be aligned to the right margin, so look for
|
||||||
|
# tags which aren't at the right margin.
|
||||||
|
grep ' \*[^*]\+\*$' doc/ -r \
|
||||||
|
| awk '{ sep = index($0, ":"); if (length(substr($0, sep + 1 )) < 79) { print } }' \
|
||||||
|
| grep . && exit_code=1
|
||||||
|
|
||||||
|
exit $exit_code
|
22
test/script/check-tag-references
Executable file
22
test/script/check-tag-references
Executable file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
exit_code=0
|
||||||
|
tag_regex='[gb]\?:\?\(ale\|ALE\)[a-zA-Z_\-]\+'
|
||||||
|
|
||||||
|
tags="$(mktemp -t tags.XXXXXXXX)"
|
||||||
|
refs="$(mktemp -t refs.XXXXXXXX)"
|
||||||
|
# Grep for tags and references, and complain if we find a reference without
|
||||||
|
# a tag for the reference. Only our tags will be included.
|
||||||
|
grep --exclude=tags -roh "\\*$tag_regex\\*" doc | sed 's/*//g' | sort -u > "$tags"
|
||||||
|
grep --exclude=tags -roh "|$tag_regex|" doc | sed 's/|//g' | sort -u > "$refs"
|
||||||
|
|
||||||
|
exit_code=0
|
||||||
|
|
||||||
|
if ! [[ $(comm -23 $refs $tags | wc -l) -eq 0 ]]; then
|
||||||
|
exit_code=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm "$tags"
|
||||||
|
rm "$refs"
|
|
@ -35,7 +35,7 @@ sed -n "$toc_start_line,$toc_end_line"p doc/ale.txt \
|
||||||
> "$toc_file"
|
> "$toc_file"
|
||||||
|
|
||||||
# Get all of the doc files in a natural sorted order.
|
# Get all of the doc files in a natural sorted order.
|
||||||
doc_files="$(/usr/bin/env ls -1v doc | grep ^ale- | sed 's/^/doc\//' | paste -sd ' ' -)"
|
doc_files="$(/usr/bin/env ls -1v doc | grep '^ale-' | sed 's/^/doc\//' | paste -sd ' ' -)"
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
grep -h '\*ale-.*-options\|^[a-z].*\*ale-.*\*$' $doc_files \
|
grep -h '\*ale-.*-options\|^[a-z].*\*ale-.*\*$' $doc_files \
|
||||||
|
|
|
@ -13,7 +13,7 @@ echo 'Custom warnings/errors follow:'
|
||||||
echo
|
echo
|
||||||
|
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
docker run -a stdout "${docker_flags[@]}" test/script/custom-linting-rules . || exit_code=$?
|
docker run "${docker_flags[@]}" test/script/custom-linting-rules . || exit_code=$?
|
||||||
set +o pipefail
|
set +o pipefail
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
@ -23,7 +23,10 @@ echo '========================================'
|
||||||
echo 'Duplicate tags follow:'
|
echo 'Duplicate tags follow:'
|
||||||
echo
|
echo
|
||||||
|
|
||||||
grep --exclude=tags -roh '\*.*\*$' doc | sort | uniq -d || exit_code=$?
|
set -o pipefail
|
||||||
|
docker run "${docker_flags[@]}" test/script/check-duplicate-tags . || exit_code=$?
|
||||||
|
set +o pipefail
|
||||||
|
echo
|
||||||
|
|
||||||
echo '========================================'
|
echo '========================================'
|
||||||
echo 'Checking for invalid tag references'
|
echo 'Checking for invalid tag references'
|
||||||
|
@ -31,14 +34,9 @@ echo '========================================'
|
||||||
echo 'Invalid tag references tags follow:'
|
echo 'Invalid tag references tags follow:'
|
||||||
echo
|
echo
|
||||||
|
|
||||||
tag_regex='[gb]\?:\?\(ale\|ALE\)[a-zA-Z_\-]\+'
|
set -o pipefail
|
||||||
|
docker run "${docker_flags[@]}" test/script/check-tag-references || exit_code=$?
|
||||||
# Grep for tags and references, and complain if we find a reference without
|
set +o pipefail
|
||||||
# a tag for the reference. Only our tags will be included.
|
|
||||||
diff -u \
|
|
||||||
<(grep --exclude=tags -roh "\\*$tag_regex\\*" doc | sort -u | sed 's/*//g') \
|
|
||||||
<(grep --exclude=tags -roh "|$tag_regex|" doc | sort -u | sed 's/|//g') \
|
|
||||||
| grep '^+[^+]' && exit_code=1
|
|
||||||
|
|
||||||
echo '========================================'
|
echo '========================================'
|
||||||
echo 'diff supported-tools.md and doc/ale-supported-languages-and-tools.txt tables'
|
echo 'diff supported-tools.md and doc/ale-supported-languages-and-tools.txt tables'
|
||||||
|
@ -46,7 +44,9 @@ echo '========================================'
|
||||||
echo 'Differences follow:'
|
echo 'Differences follow:'
|
||||||
echo
|
echo
|
||||||
|
|
||||||
test/script/check-supported-tools-tables || exit_code=$?
|
set -o pipefail
|
||||||
|
docker run "${docker_flags[@]}" test/script/check-supported-tools-tables || exit_code=$?
|
||||||
|
set +o pipefail
|
||||||
|
|
||||||
echo '========================================'
|
echo '========================================'
|
||||||
echo 'Look for badly aligned doc tags'
|
echo 'Look for badly aligned doc tags'
|
||||||
|
@ -54,18 +54,18 @@ echo '========================================'
|
||||||
echo 'Badly aligned tags follow:'
|
echo 'Badly aligned tags follow:'
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# Documentation tags need to be aligned to the right margin, so look for
|
set -o pipefail
|
||||||
# tags which aren't at the right margin.
|
docker run "${docker_flags[@]}" test/script/check-tag-alignment || exit_code=$?
|
||||||
grep ' \*[^*]\+\*$' doc/ -r \
|
set +o pipefail
|
||||||
| awk '{ sep = index($0, ":"); if (length(substr($0, sep + 1 )) < 79) { print } }' \
|
|
||||||
| grep . && exit_code=1
|
|
||||||
|
|
||||||
echo '========================================'
|
echo '========================================'
|
||||||
echo 'Look for table of contents issues'
|
echo 'Look for table of contents issues'
|
||||||
echo '========================================'
|
echo '========================================'
|
||||||
echo
|
echo
|
||||||
|
|
||||||
test/script/check-toc || exit_code=$?
|
set -o pipefail
|
||||||
|
docker run "${docker_flags[@]}" test/script/check-toc || exit_code=$?
|
||||||
|
set +o pipefail
|
||||||
|
|
||||||
echo '========================================'
|
echo '========================================'
|
||||||
echo 'Check Python code'
|
echo 'Check Python code'
|
||||||
|
|
|
@ -53,17 +53,29 @@ check_errors() {
|
||||||
regex="$1"
|
regex="$1"
|
||||||
message="$2"
|
message="$2"
|
||||||
include_arg=''
|
include_arg=''
|
||||||
|
exclude_arg=''
|
||||||
|
|
||||||
if [ $# -gt 2 ]; then
|
if [ $# -gt 2 ]; then
|
||||||
include_arg="--include $3"
|
include_arg="--include $3"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $# -gt 3 ]; then
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
|
||||||
|
while (( "$#" )); do
|
||||||
|
exclude_arg="$exclude_arg --exclude $1"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
for directory in "${directories[@]}"; do
|
for directory in "${directories[@]}"; do
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
while read -r; do
|
while read -r; do
|
||||||
RETURN_CODE=1
|
RETURN_CODE=1
|
||||||
echo "$REPLY $message"
|
echo "$REPLY $message"
|
||||||
done < <(grep -H -n "$regex" $include_arg "$directory"/**/*.vim \
|
done < <(grep -H -n "$regex" $include_arg $exclude_arg "$directory"/**/*.vim \
|
||||||
| grep -v 'no-custom-checks' \
|
| grep -v 'no-custom-checks' \
|
||||||
| grep -o '^[^:]\+:[0-9]\+' \
|
| grep -o '^[^:]\+:[0-9]\+' \
|
||||||
| sed 's:^\./::')
|
| sed 's:^\./::')
|
||||||
|
@ -92,7 +104,7 @@ if (( FIX_ERRORS )); then
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# The arguments are: regex, explanation, [filename_filter]
|
# The arguments are: regex, explanation, [filename_filter], [list, of, exclusions]
|
||||||
check_errors \
|
check_errors \
|
||||||
'^function.*) *$' \
|
'^function.*) *$' \
|
||||||
'Function without abort keyword (See :help except-compat)'
|
'Function without abort keyword (See :help except-compat)'
|
||||||
|
@ -114,7 +126,10 @@ check_errors '==?' "Use 'is?' instead of '==?'. 0 ==? 'foobar' is true"
|
||||||
check_errors '!=#' "Use 'isnot#' instead of '!=#'. 0 !=# 'foobar' is false"
|
check_errors '!=#' "Use 'isnot#' instead of '!=#'. 0 !=# 'foobar' is false"
|
||||||
check_errors '!=?' "Use 'isnot?' instead of '!=?'. 0 !=? 'foobar' is false"
|
check_errors '!=?' "Use 'isnot?' instead of '!=?'. 0 !=? 'foobar' is false"
|
||||||
check_errors '^ *:\?echo' "Stray echo line. Use \`execute echo\` if you want to echo something"
|
check_errors '^ *:\?echo' "Stray echo line. Use \`execute echo\` if you want to echo something"
|
||||||
check_errors $'name.:.*\'[a-z_]*[^a-z_0-9][a-z_0-9]*\',$' 'Use snake_case names for linters' '*/ale_linters/*'
|
# Exclusions for grandfathered-in exceptions
|
||||||
|
exclusions="clojure/clj_kondo.vim elixir/elixir_ls.vim go/golangci_lint.vim swift/swiftformat.vim"
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
check_errors $'name.:.*\'[a-z_]*[^a-z_0-9][a-z_0-9]*\',$' 'Use snake_case names for linters' '*/ale_linters/*' $exclusions
|
||||||
# Checks for improving type checks.
|
# Checks for improving type checks.
|
||||||
check_errors $'\\(==.\\?\\|is\\) type([\'"]\+)' "Use 'is v:t_string' instead"
|
check_errors $'\\(==.\\?\\|is\\) type([\'"]\+)' "Use 'is v:t_string' instead"
|
||||||
check_errors '\(==.\?\|is\) type([0-9]\+)' "Use 'is v:t_number' instead"
|
check_errors '\(==.\?\|is\) type([0-9]\+)' "Use 'is v:t_number' instead"
|
||||||
|
|
92
test/test_floating_preview.vader
Normal file
92
test/test_floating_preview.vader
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
Before:
|
||||||
|
let g:ale_floating_preview = 0
|
||||||
|
let g:ale_hover_to_floating_preview = 0
|
||||||
|
let g:ale_detail_to_floating_preview = 0
|
||||||
|
|
||||||
|
runtime autoload/ale/floating_preview.vim
|
||||||
|
|
||||||
|
let g:floated_lines = []
|
||||||
|
let g:floating_preview_show_called = 0
|
||||||
|
|
||||||
|
" Stub out so we can track the call
|
||||||
|
function! ale#floating_preview#Show(lines, ...) abort
|
||||||
|
let g:floating_preview_show_called = 1
|
||||||
|
let g:floated_lines = a:lines
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let g:ale_buffer_info = {
|
||||||
|
\ bufnr('%'): {
|
||||||
|
\ 'loclist': [
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 1,
|
||||||
|
\ 'col': 10,
|
||||||
|
\ 'bufnr': bufnr('%'),
|
||||||
|
\ 'vcol': 0,
|
||||||
|
\ 'linter_name': 'notalinter',
|
||||||
|
\ 'nr': -1,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'code': 'semi',
|
||||||
|
\ 'text': "Missing semicolon.\r",
|
||||||
|
\ 'detail': "Every statement should end with a semicolon\nsecond line",
|
||||||
|
\ },
|
||||||
|
\ ],
|
||||||
|
\ }
|
||||||
|
\}
|
||||||
|
|
||||||
|
call ale#linter#Reset()
|
||||||
|
call ale#linter#PreventLoading('javascript')
|
||||||
|
|
||||||
|
After:
|
||||||
|
Restore
|
||||||
|
|
||||||
|
let g:ale_floating_preview = 0
|
||||||
|
let g:ale_hover_to_floating_preview = 0
|
||||||
|
let g:ale_detail_to_floating_preview = 0
|
||||||
|
|
||||||
|
call cursor(1, 1)
|
||||||
|
|
||||||
|
let g:ale_buffer_info = {}
|
||||||
|
|
||||||
|
" Close the preview window if it's open.
|
||||||
|
if &filetype is# 'ale-preview'
|
||||||
|
noautocmd :q!
|
||||||
|
endif
|
||||||
|
|
||||||
|
call ale#linter#Reset()
|
||||||
|
|
||||||
|
|
||||||
|
Given javascript(A file with warnings/errors):
|
||||||
|
var x = 3 + 12345678
|
||||||
|
var x = 5*2 + parseInt("10");
|
||||||
|
// comment
|
||||||
|
|
||||||
|
Execute(Floating preview is used with ALEDetail when g:ale_floating_preview set):
|
||||||
|
let g:ale_floating_preview = 1
|
||||||
|
|
||||||
|
call cursor(1, 10)
|
||||||
|
|
||||||
|
ALEDetail
|
||||||
|
|
||||||
|
let expected = ["Every statement should end with a semicolon", "second line"]
|
||||||
|
|
||||||
|
AssertEqual 1, g:floating_preview_show_called
|
||||||
|
AssertEqual expected, g:floated_lines
|
||||||
|
|
||||||
|
Execute(Floating preview is used with ALEDetail when g:ale_detail_to_floating_preview set):
|
||||||
|
let g:ale_detail_to_floating_preview = 1
|
||||||
|
|
||||||
|
call cursor(1, 10)
|
||||||
|
|
||||||
|
ALEDetail
|
||||||
|
|
||||||
|
let expected = ["Every statement should end with a semicolon", "second line"]
|
||||||
|
|
||||||
|
AssertEqual 1, g:floating_preview_show_called
|
||||||
|
AssertEqual expected, g:floated_lines
|
||||||
|
|
||||||
|
Execute(Floating preview is not used with ALEDetail by default):
|
||||||
|
call cursor(1, 10)
|
||||||
|
|
||||||
|
ALEDetail
|
||||||
|
|
||||||
|
AssertEqual 0, g:floating_preview_show_called
|
|
@ -7,9 +7,25 @@ Before:
|
||||||
let g:item_list = []
|
let g:item_list = []
|
||||||
let g:show_message_arg_list = []
|
let g:show_message_arg_list = []
|
||||||
|
|
||||||
|
let g:ale_floating_preview = 0
|
||||||
|
let g:ale_hover_to_floating_preview = 0
|
||||||
|
let g:ale_detail_to_floating_preview = 0
|
||||||
|
|
||||||
runtime autoload/ale/linter.vim
|
runtime autoload/ale/linter.vim
|
||||||
runtime autoload/ale/lsp.vim
|
runtime autoload/ale/lsp.vim
|
||||||
|
runtime autoload/ale/lsp_linter.vim
|
||||||
runtime autoload/ale/util.vim
|
runtime autoload/ale/util.vim
|
||||||
|
runtime autoload/ale/floating_preview.vim
|
||||||
|
runtime autoload/ale/hover.vim
|
||||||
|
|
||||||
|
let g:floated_lines = []
|
||||||
|
let g:floating_preview_show_called = 0
|
||||||
|
|
||||||
|
" Stub out so we can track the call
|
||||||
|
function! ale#floating_preview#Show(lines, ...) abort
|
||||||
|
let g:floating_preview_show_called = 1
|
||||||
|
let g:floated_lines = a:lines
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale#lsp_linter#StartLSP(buffer, linter, callback) abort
|
function! ale#lsp_linter#StartLSP(buffer, linter, callback) abort
|
||||||
let g:Callback = a:callback
|
let g:Callback = a:callback
|
||||||
|
@ -50,6 +66,7 @@ Before:
|
||||||
\)
|
\)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
After:
|
After:
|
||||||
call ale#hover#SetMap({})
|
call ale#hover#SetMap({})
|
||||||
call ale#test#RestoreDirectory()
|
call ale#test#RestoreDirectory()
|
||||||
|
@ -65,6 +82,7 @@ After:
|
||||||
runtime autoload/ale/lsp_linter.vim
|
runtime autoload/ale/lsp_linter.vim
|
||||||
runtime autoload/ale/lsp.vim
|
runtime autoload/ale/lsp.vim
|
||||||
runtime autoload/ale/util.vim
|
runtime autoload/ale/util.vim
|
||||||
|
runtime autoload/ale/floating_preview.vim
|
||||||
|
|
||||||
Given python(Some Python file):
|
Given python(Some Python file):
|
||||||
foo
|
foo
|
||||||
|
@ -168,6 +186,28 @@ Execute(LSP hover response with lists of strings and marked strings should be ha
|
||||||
\], g:show_message_arg_list
|
\], g:show_message_arg_list
|
||||||
AssertEqual {}, ale#hover#GetMap()
|
AssertEqual {}, ale#hover#GetMap()
|
||||||
|
|
||||||
|
Execute(LSP hover with ale_floating_preview should float):
|
||||||
|
let g:ale_floating_preview = 1
|
||||||
|
|
||||||
|
call HandleValidLSPResult({'contents': "the message\ncontinuing"})
|
||||||
|
|
||||||
|
AssertEqual 1, g:floating_preview_show_called
|
||||||
|
AssertEqual ["the message", "continuing"], g:floated_lines
|
||||||
|
|
||||||
|
Execute(LSP hover ale_hover_to_floating_preview should float):
|
||||||
|
let g:ale_hover_to_floating_preview = 1
|
||||||
|
|
||||||
|
call HandleValidLSPResult({'contents': "the message\ncontinuing"})
|
||||||
|
|
||||||
|
AssertEqual 1, g:floating_preview_show_called
|
||||||
|
AssertEqual ["the message", "continuing"], g:floated_lines
|
||||||
|
|
||||||
|
|
||||||
|
Execute(LSP hover by default should not float):
|
||||||
|
call HandleValidLSPResult({'contents': "the message\ncontinuing"})
|
||||||
|
|
||||||
|
AssertEqual 0, g:floating_preview_show_called
|
||||||
|
|
||||||
Execute(tsserver responses for documentation requests should be handled):
|
Execute(tsserver responses for documentation requests should be handled):
|
||||||
call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}})
|
call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}})
|
||||||
|
|
||||||
|
@ -187,3 +227,46 @@ Execute(tsserver responses for documentation requests should be handled):
|
||||||
" The preview window should show the text.
|
" The preview window should show the text.
|
||||||
AssertEqual ['foo is a very good method'], ale#test#GetPreviewWindowText()
|
AssertEqual ['foo is a very good method'], ale#test#GetPreviewWindowText()
|
||||||
silent! pclose
|
silent! pclose
|
||||||
|
|
||||||
|
Execute(hover with show_documentation should be in the preview window, not floating):
|
||||||
|
let g:ale_hover_to_floating_preview = 1
|
||||||
|
let g:ale_floating_preview = 1
|
||||||
|
|
||||||
|
call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}})
|
||||||
|
|
||||||
|
call ale#hover#HandleTSServerResponse(
|
||||||
|
\ 1,
|
||||||
|
\ {
|
||||||
|
\ 'command': 'quickinfo',
|
||||||
|
\ 'request_seq': 3,
|
||||||
|
\ 'success': v:true,
|
||||||
|
\ 'body': {
|
||||||
|
\ 'documentation': 'foo is a very good method',
|
||||||
|
\ 'displayString': 'foo bar ',
|
||||||
|
\ },
|
||||||
|
\ }
|
||||||
|
\)
|
||||||
|
|
||||||
|
let expected = ["Every statement should end with a semicolon", "second line"]
|
||||||
|
|
||||||
|
AssertEqual 0, g:floating_preview_show_called
|
||||||
|
|
||||||
|
Execute(TSServer hover without show_documentation and ale_floating_preview should float):
|
||||||
|
let g:ale_floating_preview = 1
|
||||||
|
|
||||||
|
call ale#hover#SetMap({3: {'buffer': bufnr('')}})
|
||||||
|
|
||||||
|
call ale#hover#HandleTSServerResponse(
|
||||||
|
\ 1,
|
||||||
|
\ {
|
||||||
|
\ 'command': 'quickinfo',
|
||||||
|
\ 'request_seq': 3,
|
||||||
|
\ 'success': v:true,
|
||||||
|
\ 'body': {
|
||||||
|
\ 'displayString': "the message\ncontinuing",
|
||||||
|
\ },
|
||||||
|
\ }
|
||||||
|
\)
|
||||||
|
|
||||||
|
AssertEqual 1, g:floating_preview_show_called
|
||||||
|
AssertEqual ["the message", "continuing"], g:floated_lines
|
||||||
|
|
Reference in a new issue