45 lines
1.3 KiB
VimL
45 lines
1.3 KiB
VimL
|
" don't spam the user when Vim is started in Vi compatibility mode
|
||
|
let s:cpo_save = &cpo
|
||
|
set cpo&vim
|
||
|
|
||
|
function! go#implements#Implements(selected) abort
|
||
|
let l:mode = go#config#ImplementsMode()
|
||
|
if l:mode == 'guru'
|
||
|
call go#guru#Implements(a:selected)
|
||
|
return
|
||
|
elseif l:mode == 'gopls'
|
||
|
if !go#config#GoplsEnabled()
|
||
|
call go#util#EchoError("go_implements_mode is 'gopls', but gopls is disabled")
|
||
|
endif
|
||
|
let [l:line, l:col] = getpos('.')[1:2]
|
||
|
let [l:line, l:col] = go#lsp#lsp#Position(l:line, l:col)
|
||
|
let l:fname = expand('%:p')
|
||
|
call go#lsp#Implements(l:fname, l:line, l:col, funcref('s:parse_output'))
|
||
|
return
|
||
|
else
|
||
|
call go#util#EchoWarning('unknown value for g:go_implements_mode')
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
" This uses Vim's errorformat to parse the output and put it into a quickfix
|
||
|
" or locationlist.
|
||
|
function! s:parse_output(exit_val, output, title) abort
|
||
|
if a:exit_val
|
||
|
call go#util#EchoError(a:output)
|
||
|
return
|
||
|
endif
|
||
|
|
||
|
let errformat = ",%f:%l:%c:\ %m"
|
||
|
let l:listtype = go#list#Type("GoImplements")
|
||
|
call go#list#ParseFormat(l:listtype, errformat, a:output, a:title, 0)
|
||
|
|
||
|
let errors = go#list#Get(l:listtype)
|
||
|
call go#list#Window(l:listtype, len(errors))
|
||
|
endfunction
|
||
|
|
||
|
" restore Vi compatibility settings
|
||
|
let &cpo = s:cpo_save
|
||
|
unlet s:cpo_save
|
||
|
|
||
|
" vim: sw=2 ts=2 et
|