From: Yasuhiro Matsumoto Date: Thu, 3 Oct 2013 03:32:07 +0000 (+1000) Subject: misc/vim: Autocompletion for :Godoc command X-Git-Tag: go1.2rc2~82 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=45b830ed319ee1d82ff9d41c35d6145ab7ecbb82;p=gostls13.git misc/vim: Autocompletion for :Godoc command R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/14259043 --- diff --git a/misc/vim/autoload/go/complete.vim b/misc/vim/autoload/go/complete.vim index 5b8406b771..ea6e0104b9 100644 --- a/misc/vim/autoload/go/complete.vim +++ b/misc/vim/autoload/go/complete.vim @@ -28,13 +28,31 @@ if len(s:goarch) == 0 endif endif +function! go#complete#PackageMembers(package, member) + silent! let content = system('godoc ' . a:package) + if v:shell_error || !len(content) + return [] + endif + let lines = filter(split(content, "\n"),"v:val !~ '^\\s\\+$'") + try + let mx1 = '^\s\+\(\S+\)\s\+=\s\+.*' + let mx2 = '^\%(const\|var\|type\|func\) \([A-Z][^ (]\+\).*' + let candidates = + \ map(filter(copy(lines), 'v:val =~ mx1'), 'substitute(v:val, mx1, "\\1", "")') + \ + map(filter(copy(lines), 'v:val =~ mx2'), 'substitute(v:val, mx2, "\\1", "")') + return filter(candidates, '!stridx(v:val, a:member)') + catch + return [] + endtry +endfunction + function! go#complete#Package(ArgLead, CmdLine, CursorPos) let dirs = [] let words = split(a:CmdLine, '\s\+', 1) if len(words) > 2 - " TODO Complete package members - return [] + " Complete package members + return go#complete#PackageMembers(words[1], words[2]) endif if executable('go')