-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 7ea3cd7
Showing
12 changed files
with
1,109 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
" Copyright 2011 The Go Authors. All rights reserved. | ||
" Use of this source code is governed by a BSD-style | ||
" license that can be found in the LICENSE file. | ||
" | ||
" This file provides a utility function that performs auto-completion of | ||
" package names, for use by other commands. | ||
|
||
let s:goos = $GOOS | ||
let s:goarch = $GOARCH | ||
|
||
if len(s:goos) == 0 | ||
if exists('g:golang_goos') | ||
let s:goos = g:golang_goos | ||
elseif has('win32') || has('win64') | ||
let s:goos = 'windows' | ||
elseif has('macunix') | ||
let s:goos = 'darwin' | ||
else | ||
let s:goos = '*' | ||
endif | ||
endif | ||
|
||
if len(s:goarch) == 0 | ||
if exists('g:golang_goarch') | ||
let s:goarch = g:golang_goarch | ||
else | ||
let s:goarch = '*' | ||
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 | ||
" Complete package members | ||
return go#complete#PackageMembers(words[1], words[2]) | ||
endif | ||
|
||
if executable('go') | ||
let goroot = substitute(system('go env GOROOT'), '\n', '', 'g') | ||
if v:shell_error | ||
echomsg '''go env GOROOT'' failed' | ||
endif | ||
else | ||
let goroot = $GOROOT | ||
endif | ||
|
||
if len(goroot) != 0 && isdirectory(goroot) | ||
let dirs += [goroot] | ||
endif | ||
|
||
let pathsep = ':' | ||
if s:goos == 'windows' | ||
let pathsep = ';' | ||
endif | ||
let workspaces = split($GOPATH, pathsep) | ||
if workspaces != [] | ||
let dirs += workspaces | ||
endif | ||
|
||
if len(dirs) == 0 | ||
" should not happen | ||
return [] | ||
endif | ||
|
||
let ret = {} | ||
for dir in dirs | ||
" this may expand to multiple lines | ||
let root = split(expand(dir . '/pkg/' . s:goos . '_' . s:goarch), "\n") | ||
call add(root, expand(dir . '/src')) | ||
for r in root | ||
for i in split(globpath(r, a:ArgLead.'*'), "\n") | ||
if isdirectory(i) | ||
let i .= '/' | ||
elseif i !~ '\.a$' | ||
continue | ||
endif | ||
let i = substitute(substitute(i[len(r)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g') | ||
let ret[i] = i | ||
endfor | ||
endfor | ||
endfor | ||
return sort(keys(ret)) | ||
endfunction |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
" Copyright 2013 The Go Authors. All rights reserved. | ||
" Use of this source code is governed by a BSD-style | ||
" license that can be found in the LICENSE file. | ||
" | ||
" compiler/go.vim: Vim compiler file for Go. | ||
|
||
if exists("current_compiler") | ||
finish | ||
endif | ||
let current_compiler = "go" | ||
|
||
if exists(":CompilerSet") != 2 | ||
command -nargs=* CompilerSet setlocal <args> | ||
endif | ||
|
||
let s:save_cpo = &cpo | ||
set cpo-=C | ||
|
||
CompilerSet makeprg=go\ build | ||
CompilerSet errorformat= | ||
\%-G#\ %.%#, | ||
\%A%f:%l:%c:\ %m, | ||
\%A%f:%l:\ %m, | ||
\%C%*\\s%m, | ||
\%-G%.%# | ||
|
||
let &cpo = s:save_cpo | ||
unlet s:save_cpo | ||
|
||
" vim:ts=4:sw=4:et |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
" We take care to preserve the user's fileencodings and fileformats, | ||
" because those settings are global (not buffer local), yet we want | ||
" to override them for loading Go files, which are defined to be UTF-8. | ||
let s:current_fileformats = '' | ||
let s:current_fileencodings = '' | ||
|
||
" define fileencodings to open as utf-8 encoding even if it's ascii. | ||
function! s:gofiletype_pre() | ||
let s:current_fileformats = &g:fileformats | ||
let s:current_fileencodings = &g:fileencodings | ||
set fileencodings=utf-8 fileformats=unix | ||
setlocal filetype=go | ||
endfunction | ||
|
||
" restore fileencodings as others | ||
function! s:gofiletype_post() | ||
let &g:fileformats = s:current_fileformats | ||
let &g:fileencodings = s:current_fileencodings | ||
endfunction | ||
|
||
au BufNewFile *.go setlocal filetype=go fileencoding=utf-8 fileformat=unix | ||
au BufRead *.go call s:gofiletype_pre() | ||
au BufReadPost *.go call s:gofiletype_post() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
" Copyright 2013 The Go Authors. All rights reserved. | ||
" Use of this source code is governed by a BSD-style | ||
" license that can be found in the LICENSE file. | ||
" | ||
" go.vim: Vim filetype plugin for Go. | ||
|
||
if exists("b:did_ftplugin") | ||
finish | ||
endif | ||
let b:did_ftplugin = 1 | ||
|
||
setlocal formatoptions-=t | ||
|
||
setlocal comments=s1:/*,mb:*,ex:*/,:// | ||
setlocal commentstring=//\ %s | ||
|
||
let b:undo_ftplugin = "setl fo< com< cms<" | ||
|
||
" vim:ts=4:sw=4:et |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
" Copyright 2011 The Go Authors. All rights reserved. | ||
" Use of this source code is governed by a BSD-style | ||
" license that can be found in the LICENSE file. | ||
" | ||
" fmt.vim: Vim command to format Go files with gofmt. | ||
" | ||
" This filetype plugin add a new commands for go buffers: | ||
" | ||
" :Fmt | ||
" | ||
" Filter the current Go buffer through gofmt. | ||
" It tries to preserve cursor position and avoids | ||
" replacing the buffer with stderr output. | ||
" | ||
" Options: | ||
" | ||
" g:go_fmt_commands [default=1] | ||
" | ||
" Flag to indicate whether to enable the commands listed above. | ||
" | ||
" g:gofmt_command [default="gofmt"] | ||
" | ||
" Flag naming the gofmt executable to use. | ||
" | ||
if exists("b:did_ftplugin_go_fmt") | ||
finish | ||
endif | ||
|
||
if !exists("g:go_fmt_commands") | ||
let g:go_fmt_commands = 1 | ||
endif | ||
|
||
if !exists("g:gofmt_command") | ||
let g:gofmt_command = "gofmt" | ||
endif | ||
|
||
if g:go_fmt_commands | ||
command! -buffer Fmt call s:GoFormat() | ||
endif | ||
|
||
function! s:GoFormat() | ||
let view = winsaveview() | ||
silent execute "%!" . g:gofmt_command | ||
if v:shell_error | ||
let errors = [] | ||
for line in getline(1, line('$')) | ||
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\)\s*\(.*\)') | ||
if !empty(tokens) | ||
call add(errors, {"filename": @%, | ||
\"lnum": tokens[2], | ||
\"col": tokens[3], | ||
\"text": tokens[4]}) | ||
endif | ||
endfor | ||
if empty(errors) | ||
% | " Couldn't detect gofmt error format, output errors | ||
endif | ||
undo | ||
if !empty(errors) | ||
call setqflist(errors, 'r') | ||
endif | ||
echohl Error | echomsg "Gofmt returned error" | echohl None | ||
endif | ||
call winrestview(view) | ||
endfunction | ||
|
||
let b:did_ftplugin_go_fmt = 1 | ||
|
||
" vim:ts=4:sw=4:et |
Oops, something went wrong.