455793dfd9
* Improve performance when using gometalinter Before this change when I opened a big project that had 6000+ warnings/errors it took ages to get the actual warnings/errors and it caused my CPU to be busy for quite some time. The call to gometalinter alone took about 24 seconds, but after that vim was struggling as well. After this change the gometalinter call just takes 2 seconds and nothing noticable happens with the CPU and/or vim. * Removed obsolete test This logic is no longer done by the `ale` plugin, but by `gometalinter` itself.
42 lines
1.3 KiB
VimL
42 lines
1.3 KiB
VimL
" Author: Ben Reedy <https://github.com/breed808>
|
|
" Description: Adds support for the gometalinter suite for Go files
|
|
|
|
if !exists('g:ale_go_gometalinter_options')
|
|
let g:ale_go_gometalinter_options = ''
|
|
endif
|
|
|
|
function! ale_linters#go#gometalinter#GetCommand(buffer) abort
|
|
return 'gometalinter --include=''^' . expand('%:p') . '.*$'' '
|
|
\ . ale#Var(a:buffer, 'go_gometalinter_options')
|
|
\ . ' ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
|
|
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:output = []
|
|
|
|
for l:match in ale_linters#go#gometalinter#GetMatches(a:lines)
|
|
call add(l:output, {
|
|
\ 'lnum': l:match[2] + 0,
|
|
\ 'col': l:match[3] + 0,
|
|
\ 'type': tolower(l:match[4]) ==# 'warning' ? 'W' : 'E',
|
|
\ 'text': l:match[5],
|
|
\})
|
|
endfor
|
|
|
|
return l:output
|
|
endfunction
|
|
|
|
call ale#linter#Define('go', {
|
|
\ 'name': 'gometalinter',
|
|
\ 'executable': 'gometalinter',
|
|
\ 'command_callback': 'ale_linters#go#gometalinter#GetCommand',
|
|
\ 'callback': 'ale_linters#go#gometalinter#Handler',
|
|
\ 'lint_file': 1,
|
|
\})
|