]> Cypherpunks repositories - gostls13.git/commitdiff
misc/vim: Autocompletion for :Godoc command
authorYasuhiro Matsumoto <mattn.jp@gmail.com>
Thu, 3 Oct 2013 03:32:07 +0000 (13:32 +1000)
committerDavid Symonds <dsymonds@golang.org>
Thu, 3 Oct 2013 03:32:07 +0000 (13:32 +1000)
R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/14259043

misc/vim/autoload/go/complete.vim

index 5b8406b771f3af1e46f9ca0758ad30646dc6a1c2..ea6e0104b9722ac7de37e0613081b4e8b8e28b79 100644 (file)
@@ -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')