+errtags
This commit is contained in:
vim
99
vim/.vim/plugin/errtags.vim
Normal file
99
vim/.vim/plugin/errtags.vim
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
" --- Define our prop types ---
|
||||||
|
" #pragma region
|
||||||
|
call prop_type_delete('ErrtagsHighlight')
|
||||||
|
call prop_type_delete('ErrtagsMessage')
|
||||||
|
|
||||||
|
hi link ErrTagsError ErrorMsg
|
||||||
|
hi link ErrTagsMessage Comment
|
||||||
|
|
||||||
|
call prop_type_add('ErrtagsHighlight', {
|
||||||
|
\ 'highlight': 'ErrTagsError',
|
||||||
|
\ })
|
||||||
|
|
||||||
|
call prop_type_add('ErrtagsMessage', {
|
||||||
|
\ 'highlight': 'ErrTagsMessage',
|
||||||
|
\ })
|
||||||
|
" #pragma endregion
|
||||||
|
|
||||||
|
" --- Main logic ---
|
||||||
|
" #pragma region
|
||||||
|
function! AddErrtagsNotice(lnum, col, message)
|
||||||
|
try " NOTE: the column might have been deleted, thats no excuse to halt and catch fire
|
||||||
|
call prop_add(a:lnum, a:col, {
|
||||||
|
\ 'type': 'ErrtagsHighlight',
|
||||||
|
\ 'length': 1
|
||||||
|
\ })
|
||||||
|
catch /E964/ | endtry
|
||||||
|
|
||||||
|
call prop_add(a:lnum, 0, {
|
||||||
|
\ 'type': 'ErrtagsMessage',
|
||||||
|
\ 'text': ' # E: ' . a:message,
|
||||||
|
\ 'text_align': 'after'
|
||||||
|
\ })
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function AddErrtagsNotices(notices)
|
||||||
|
for l:notice in a:notices
|
||||||
|
if l:notice['fname'] == expand('%:t')
|
||||||
|
call AddErrtagsNotice(l:notice.lnum, l:notice.col, l:notice.text)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ParseErrtagsNotices(lines)
|
||||||
|
let l:errors = []
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
let l:fields = split(l:line, ':')
|
||||||
|
|
||||||
|
if len(l:fields) >= 2
|
||||||
|
let l:filename = l:fields[0]
|
||||||
|
let l:line_number = l:fields[1]
|
||||||
|
let l:column_number = l:fields[2]
|
||||||
|
let l:message = join(l:fields[3:], ':')
|
||||||
|
|
||||||
|
call add(l:errors, {
|
||||||
|
\ 'fname': l:filename,
|
||||||
|
\ 'lnum': l:line_number,
|
||||||
|
\ 'col': l:column_number,
|
||||||
|
\ 'text': l:message,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ })
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:errors
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! DoErrtagsNotices()
|
||||||
|
call prop_remove({ 'type': 'ErrtagsHighlight' })
|
||||||
|
call prop_remove({ 'type': 'ErrtagsMessage' })
|
||||||
|
|
||||||
|
try
|
||||||
|
let l:lines = readfile(g:errtags_cache)
|
||||||
|
catch /E484/
|
||||||
|
return
|
||||||
|
endtry
|
||||||
|
|
||||||
|
let l:notices = ParseErrtagsNotices(l:lines)
|
||||||
|
|
||||||
|
call AddErrtagsNotices(l:notices)
|
||||||
|
endfunction
|
||||||
|
" #pragma endregion
|
||||||
|
|
||||||
|
" --- Hook up everything ---
|
||||||
|
" #pragma region
|
||||||
|
if exists('g:errtags_events')
|
||||||
|
for e in g:errtags_events
|
||||||
|
execute "autocmd " . e . " * DoErrtagsNotices"
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
if expand('$ERRTAGS_CACHE_FILE') != '$ERRTAGS_CACHE_FILE'
|
||||||
|
let g:errtags_cache = expand('$ERRTAGS_CACHE_FILE')
|
||||||
|
else
|
||||||
|
let g:errtags_cache = expand('$XDG_CACHE_HOME/errtags.tags')
|
||||||
|
endif
|
||||||
|
|
||||||
|
command! DoErrtagsNotices :call DoErrtagsNotices()
|
||||||
|
" #pragma endregion
|
@ -262,6 +262,8 @@
|
|||||||
let g:hitags_events = ["BufWrite"]
|
let g:hitags_events = ["BufWrite"]
|
||||||
let g:sigs_events = ["BufWrite"]
|
let g:sigs_events = ["BufWrite"]
|
||||||
|
|
||||||
|
let g:errtags_events = ["BufEnter", "BufWrite"]
|
||||||
|
|
||||||
" -------------
|
" -------------
|
||||||
" ### NETRW ###
|
" ### NETRW ###
|
||||||
" -------------
|
" -------------
|
||||||
|
Reference in New Issue
Block a user