Add support for error details
Some review needed.
This commit is contained in:
parent
18508f7453
commit
70711022db
@ -25,6 +25,7 @@ function! ale_linters#elm#make#Handle(buffer, lines) abort
|
|||||||
\ 'col': l:error.region.start.column,
|
\ 'col': l:error.region.start.column,
|
||||||
\ 'type': (l:error.type ==? 'error') ? 'E' : 'W',
|
\ 'type': (l:error.type ==? 'error') ? 'E' : 'W',
|
||||||
\ 'text': l:error.overview,
|
\ 'text': l:error.overview,
|
||||||
|
\ 'detail': l:error.overview . "\n\n" . l:error.details
|
||||||
\})
|
\})
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
@ -93,3 +93,28 @@ function! ale#cursor#EchoCursorWarningWithDelay() abort
|
|||||||
let s:cursor_timer = timer_start(10, function('ale#cursor#EchoCursorWarning'))
|
let s:cursor_timer = timer_start(10, function('ale#cursor#EchoCursorWarning'))
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! ale#cursor#ShowCursorDetail(...) abort
|
||||||
|
" Only show the details in normal mode, otherwise we will get problems.
|
||||||
|
if mode() !=# 'n'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:buffer = bufnr('%')
|
||||||
|
|
||||||
|
if !has_key(g:ale_buffer_info, l:buffer)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:pos = getcurpos()
|
||||||
|
let l:loclist = g:ale_buffer_info[l:buffer].loclist
|
||||||
|
let l:index = ale#util#BinarySearch(l:loclist, l:pos[1], l:pos[2])
|
||||||
|
|
||||||
|
if l:index >= 0
|
||||||
|
let l:loc = l:loclist[l:index]
|
||||||
|
if has_key(l:loc, 'detail')
|
||||||
|
echo l:loc.detail
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
@ -332,6 +332,10 @@ function! ale#engine#FixLocList(buffer, linter, loclist) abort
|
|||||||
\ 'linter_name': a:linter.name,
|
\ 'linter_name': a:linter.name,
|
||||||
\}
|
\}
|
||||||
|
|
||||||
|
if has_key(l:old_item, 'detail')
|
||||||
|
let l:item.detail = l:old_item.detail
|
||||||
|
endif
|
||||||
|
|
||||||
if l:item.lnum == 0
|
if l:item.lnum == 0
|
||||||
" When errors appear at line 0, put them at line 1 instead.
|
" When errors appear at line 0, put them at line 1 instead.
|
||||||
let l:item.lnum = 1
|
let l:item.lnum = 1
|
||||||
|
@ -208,6 +208,9 @@ command! ALEPreviousWrap :call ale#loclist_jumping#Jump('before', 1)
|
|||||||
command! ALENext :call ale#loclist_jumping#Jump('after', 0)
|
command! ALENext :call ale#loclist_jumping#Jump('after', 0)
|
||||||
command! ALENextWrap :call ale#loclist_jumping#Jump('after', 1)
|
command! ALENextWrap :call ale#loclist_jumping#Jump('after', 1)
|
||||||
|
|
||||||
|
" A command for showing error details.
|
||||||
|
command! ALEDetail :call ale#cursor#ShowCursorDetail()
|
||||||
|
|
||||||
" A command for turning ALE on or off.
|
" A command for turning ALE on or off.
|
||||||
command! ALEToggle :call s:ALEToggle()
|
command! ALEToggle :call s:ALEToggle()
|
||||||
" A command for linting manually.
|
" A command for linting manually.
|
||||||
@ -225,6 +228,7 @@ nnoremap <silent> <Plug>(ale_next) :ALENext<Return>
|
|||||||
nnoremap <silent> <Plug>(ale_next_wrap) :ALENextWrap<Return>
|
nnoremap <silent> <Plug>(ale_next_wrap) :ALENextWrap<Return>
|
||||||
nnoremap <silent> <Plug>(ale_toggle) :ALEToggle<Return>
|
nnoremap <silent> <Plug>(ale_toggle) :ALEToggle<Return>
|
||||||
nnoremap <silent> <Plug>(ale_lint) :ALELint<Return>
|
nnoremap <silent> <Plug>(ale_lint) :ALELint<Return>
|
||||||
|
nnoremap <silent> <Plug>(ale_detail) :ALEDetail<Return>
|
||||||
|
|
||||||
" Housekeeping
|
" Housekeeping
|
||||||
|
|
||||||
|
@ -10,7 +10,8 @@ Before:
|
|||||||
\ 'nr': -1,
|
\ 'nr': -1,
|
||||||
\ 'type': 'E',
|
\ 'type': 'E',
|
||||||
\ 'col': 10,
|
\ 'col': 10,
|
||||||
\ 'text': 'Missing semicolon. (semi)'
|
\ 'text': 'Missing semicolon. (semi)',
|
||||||
|
\ 'detail': 'Every statement should end with a semicolon'
|
||||||
\ },
|
\ },
|
||||||
\ {
|
\ {
|
||||||
\ 'lnum': 2,
|
\ 'lnum': 2,
|
||||||
@ -84,3 +85,14 @@ Then(Check the cursor output):
|
|||||||
let g:lines = split(g:output, "\n")
|
let g:lines = split(g:output, "\n")
|
||||||
|
|
||||||
AssertEqual 'Missing radix parameter (radix)', g:lines[-1]
|
AssertEqual 'Missing radix parameter (radix)', g:lines[-1]
|
||||||
|
|
||||||
|
Execute(Evaluate the cursor detail function at line 1):
|
||||||
|
:1
|
||||||
|
call ale#cursor#ShowCursorDetail()
|
||||||
|
|
||||||
|
Then(Check the cursor output):
|
||||||
|
redir => g:output
|
||||||
|
:mess
|
||||||
|
redir END
|
||||||
|
|
||||||
|
AssertEqual "Every statement should end with a semicolon", g:output[-1]
|
||||||
|
Loading…
Reference in New Issue
Block a user