From 5e8de365dced2d35975361760c6df9e4357fd6b9 Mon Sep 17 00:00:00 2001 From: Tobias Columbus Date: Tue, 28 Aug 2012 03:59:16 +0800 Subject: [PATCH] misc/vim: fix for autocompletion Vim autocompletion respects the $GOPATH variable and does not ignore dashes ('-'), dots ('.') and underscores ('_') like found in many remote packages. Environment variable $GOROOT is determined by calling 'go env GOROOT' instead of relying on the user's environment variables. Fixes #3876 Fixes #3882 R=golang-dev, franciscossouza, dsymonds, minux.ma CC=golang-dev https://golang.org/cl/6443151 --- misc/vim/autoload/go/complete.vim | 48 ++++++++++++++++++++++--------- misc/vim/plugin/godoc.vim | 2 +- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/misc/vim/autoload/go/complete.vim b/misc/vim/autoload/go/complete.vim index d4ae3b97f7..cc1013b7d3 100644 --- a/misc/vim/autoload/go/complete.vim +++ b/misc/vim/autoload/go/complete.vim @@ -29,21 +29,43 @@ if len(s:goarch) == 0 endif function! go#complete#Package(ArgLead, CmdLine, CursorPos) - let goroot = $GOROOT - if len(goroot) == 0 - " should not occur. - return [] + let dirs = [] + + if executable('go') + let goroot = substitute(system('go env GOROOT'), '\n', '', 'g') + if v:shell_error + echo '\'go env GOROOT\' failed' + endif + else + let goroot = $GOROOT endif + + if len(goroot) != 0 && isdirectory(goroot) + let dirs += [ goroot ] + endif + + let workspaces = split($GOPATH, ':') + if workspaces != [] + let dirs += workspaces + endif + + if len(dirs) == 0 + " should not happen + return [] + endif + let ret = {} - let root = expand(goroot.'/pkg/'.s:goos.'_'.s:goarch) - for i in split(globpath(root, a:ArgLead.'*'), "\n") - if isdirectory(i) - let i .= '/' - elseif i !~ '\.a$' - continue - endif - let i = substitute(substitute(i[len(root)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g') - let ret[i] = i + for dir in dirs + let root = expand(dir . '/pkg/' . s:goos . '_' . s:goarch) + for i in split(globpath(root, a:ArgLead.'*'), "\n") + if isdirectory(i) + let i .= '/' + elseif i !~ '\.a$' + continue + endif + let i = substitute(substitute(i[len(root)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g') + let ret[i] = i + endfor endfor return sort(keys(ret)) endfunction diff --git a/misc/vim/plugin/godoc.vim b/misc/vim/plugin/godoc.vim index fdb4966312..a9abb7ae6c 100644 --- a/misc/vim/plugin/godoc.vim +++ b/misc/vim/plugin/godoc.vim @@ -72,7 +72,7 @@ function! s:Godoc(...) if !len(word) let word = expand('') endif - let word = substitute(word, '[^a-zA-Z0-9\/]', '', 'g') + let word = substitute(word, '[^a-zA-Z0-9\\/._~-]', '', 'g') if !len(word) return endif