mirror of
https://github.com/amix/vimrc
synced 2025-07-08 18:04:59 +08:00
Add support with Go language.
This commit is contained in:
44
sources_non_forked/vim-go/autoload/go/implements.vim
Normal file
44
sources_non_forked/vim-go/autoload/go/implements.vim
Normal file
@ -0,0 +1,44 @@
|
||||
" 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
|
Reference in New Issue
Block a user