]> Cypherpunks repositories - gostls13.git/commitdiff
misc/vim: Separate package and package members.
authorYasuhiro Matsumoto <mattn.jp@gmail.com>
Tue, 1 Oct 2013 22:52:51 +0000 (08:52 +1000)
committerDavid Symonds <dsymonds@golang.org>
Tue, 1 Oct 2013 22:52:51 +0000 (08:52 +1000)
This change allow to godoc:
    :Godoc github.com/mattn/go-gtk/gtk
    :Godoc github.com/mattn/go-gtk/gtk NewWindow
    :Godoc encoding/json
    :Godoc encoding/json Marshal

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/14171043

misc/vim/autoload/go/complete.vim
misc/vim/plugin/godoc.vim

index 80fa451583afc8bfc1b37d9fdfc588fcb7b074b2..5b8406b771f3af1e46f9ca0758ad30646dc6a1c2 100644 (file)
@@ -31,6 +31,12 @@ endif
 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 []
+  endif
+
   if executable('go')
     let goroot = substitute(system('go env GOROOT'), '\n', '', 'g')
     if v:shell_error
index 33c9ec05bf06407b08f3d446c0529e4164f2a07a..a145d313fe85615fb1fcaf10291f11432f533a3e 100644 (file)
@@ -31,7 +31,7 @@ if !exists('g:go_godoc_commands')
 endif
 
 if g:go_godoc_commands
-  command! -nargs=* -range -complete=customlist,go#complete#Package Godoc :call s:Godoc(<q-args>)
+  command! -nargs=* -range -complete=customlist,go#complete#Package Godoc :call s:Godoc(<f-args>)
 endif
 
 nnoremap <silent> <Plug>(godoc-keyword) :<C-u>call <SID>Godoc('')<CR>
@@ -71,7 +71,7 @@ function! s:GodocWord(word)
     echo "godoc command not found."
     echo "  install with: go get code.google.com/p/go.tools/cmd/godoc"
     echohl None
-    return
+    return 0
   endif
   let word = a:word
   silent! let content = system('godoc ' . word)
@@ -80,12 +80,12 @@ function! s:GodocWord(word)
       silent! let content = system('godoc ' . s:last_word.'/'.word)
       if v:shell_error || !len(content)
         echo 'No documentation found for "' . word . '".'
-        return
+        return 0
       endif
       let word = s:last_word.'/'.word
     else
       echo 'No documentation found for "' . word . '".'
-      return
+      return 0
     endif
   endif
   let s:last_word = word
@@ -96,30 +96,34 @@ function! s:GodocWord(word)
   silent! normal gg
   setlocal nomodifiable
   setfiletype godoc
+  return 1
 endfunction
 
 function! s:Godoc(...)
-  let word = join(a:000, ' ')
-  if !len(word)
+  if !len(a:000)
     let oldiskeyword = &iskeyword
     setlocal iskeyword+=.
     let word = expand('<cword>')
     let &iskeyword = oldiskeyword
+    let word = substitute(word, '[^a-zA-Z0-9\\/._~-]', '', 'g')
+    let words = split(word, '\.\ze[^./]\+$')
+  else
+    let words = a:000
   endif
-  let word = substitute(word, '[^a-zA-Z0-9\\/._~-]', '', 'g')
-  let words = split(word, '\.')
   if !len(words)
     return
   endif
-  call s:GodocWord(words[0])
-  if len(words) > 1
-    if search('^\%(const\|var\|type\|\s\+\) ' . words[1] . '\s\+=\s')
-      return
-    endif
-    if search('^func ' . words[1] . '(')
-      return
+  if s:GodocWord(words[0])
+    if len(words) > 1
+      if search('^\%(const\|var\|type\|\s\+\) ' . words[1] . '\s\+=\s')
+        return
+      endif
+      if search('^func ' . words[1] . '(')
+        silent! normal zt
+        return
+      endif
+      echo 'No documentation found for "' . words[1] . '".'
     endif
-    echo 'No documentation found for "' . word . '".'
   endif
 endfunction