Remove golang plugin, don't need two
parent
47b80cef11
commit
990da336e6
@ -1,103 +0,0 @@
|
|||||||
" 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
|
|
@ -1,30 +0,0 @@
|
|||||||
" 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
|
|
@ -1,23 +0,0 @@
|
|||||||
" 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()
|
|
@ -1,17 +0,0 @@
|
|||||||
" 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 comments=s1:/*,mb:*,ex:*/,://
|
|
||||||
setlocal commentstring=//\ %s
|
|
||||||
|
|
||||||
let b:undo_ftplugin = "setl com< cms<"
|
|
||||||
|
|
||||||
" vim:ts=4:sw=4:et
|
|
@ -1,69 +0,0 @@
|
|||||||
" 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
|
|
@ -1,250 +0,0 @@
|
|||||||
" 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.
|
|
||||||
"
|
|
||||||
" import.vim: Vim commands to import/drop Go packages.
|
|
||||||
"
|
|
||||||
" This filetype plugin adds three new commands for go buffers:
|
|
||||||
"
|
|
||||||
" :Import {path}
|
|
||||||
"
|
|
||||||
" Import ensures that the provided package {path} is imported
|
|
||||||
" in the current Go buffer, using proper style and ordering.
|
|
||||||
" If {path} is already being imported, an error will be
|
|
||||||
" displayed and the buffer will be untouched.
|
|
||||||
"
|
|
||||||
" :ImportAs {localname} {path}
|
|
||||||
"
|
|
||||||
" Same as Import, but uses a custom local name for the package.
|
|
||||||
"
|
|
||||||
" :Drop {path}
|
|
||||||
"
|
|
||||||
" Remove the import line for the provided package {path}, if
|
|
||||||
" present in the current Go buffer. If {path} is not being
|
|
||||||
" imported, an error will be displayed and the buffer will be
|
|
||||||
" untouched.
|
|
||||||
"
|
|
||||||
" If you would like to add shortcuts, you can do so by doing the following:
|
|
||||||
"
|
|
||||||
" Import fmt
|
|
||||||
" au Filetype go nnoremap <buffer> <LocalLeader>f :Import fmt<CR>
|
|
||||||
"
|
|
||||||
" Drop fmt
|
|
||||||
" au Filetype go nnoremap <buffer> <LocalLeader>F :Drop fmt<CR>
|
|
||||||
"
|
|
||||||
" Import the word under your cursor
|
|
||||||
" au Filetype go nnoremap <buffer> <LocalLeader>k
|
|
||||||
" \ :exe 'Import ' . expand('<cword>')<CR>
|
|
||||||
"
|
|
||||||
" The backslash '\' is the default maplocalleader, so it is possible that
|
|
||||||
" your vim is set to use a different character (:help maplocalleader).
|
|
||||||
"
|
|
||||||
" Options:
|
|
||||||
"
|
|
||||||
" g:go_import_commands [default=1]
|
|
||||||
"
|
|
||||||
" Flag to indicate whether to enable the commands listed above.
|
|
||||||
"
|
|
||||||
if exists("b:did_ftplugin_go_import")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:go_import_commands")
|
|
||||||
let g:go_import_commands = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if g:go_import_commands
|
|
||||||
command! -buffer -nargs=? -complete=customlist,go#complete#Package Drop call s:SwitchImport(0, '', <f-args>)
|
|
||||||
command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', <f-args>)
|
|
||||||
command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, <f-args>)
|
|
||||||
endif
|
|
||||||
|
|
||||||
function! s:SwitchImport(enabled, localname, path)
|
|
||||||
let view = winsaveview()
|
|
||||||
let path = a:path
|
|
||||||
|
|
||||||
" Quotes are not necessary, so remove them if provided.
|
|
||||||
if path[0] == '"'
|
|
||||||
let path = strpart(path, 1)
|
|
||||||
endif
|
|
||||||
if path[len(path)-1] == '"'
|
|
||||||
let path = strpart(path, 0, len(path) - 1)
|
|
||||||
endif
|
|
||||||
if path == ''
|
|
||||||
call s:Error('Import path not provided')
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Extract any site prefix (e.g. github.com/).
|
|
||||||
" If other imports with the same prefix are grouped separately,
|
|
||||||
" we will add this new import with them.
|
|
||||||
" Only up to and including the first slash is used.
|
|
||||||
let siteprefix = matchstr(path, "^[^/]*/")
|
|
||||||
|
|
||||||
let qpath = '"' . path . '"'
|
|
||||||
if a:localname != ''
|
|
||||||
let qlocalpath = a:localname . ' ' . qpath
|
|
||||||
else
|
|
||||||
let qlocalpath = qpath
|
|
||||||
endif
|
|
||||||
let indentstr = 0
|
|
||||||
let packageline = -1 " Position of package name statement
|
|
||||||
let appendline = -1 " Position to introduce new import
|
|
||||||
let deleteline = -1 " Position of line with existing import
|
|
||||||
let linesdelta = 0 " Lines added/removed
|
|
||||||
|
|
||||||
" Find proper place to add/remove import.
|
|
||||||
let line = 0
|
|
||||||
while line <= line('$')
|
|
||||||
let linestr = getline(line)
|
|
||||||
|
|
||||||
if linestr =~# '^package\s'
|
|
||||||
let packageline = line
|
|
||||||
let appendline = line
|
|
||||||
|
|
||||||
elseif linestr =~# '^import\s\+('
|
|
||||||
let appendstr = qlocalpath
|
|
||||||
let indentstr = 1
|
|
||||||
let appendline = line
|
|
||||||
let firstblank = -1
|
|
||||||
let lastprefix = ""
|
|
||||||
while line <= line("$")
|
|
||||||
let line = line + 1
|
|
||||||
let linestr = getline(line)
|
|
||||||
let m = matchlist(getline(line), '^\()\|\(\s\+\)\(\S*\s*\)"\(.\+\)"\)')
|
|
||||||
if empty(m)
|
|
||||||
if siteprefix == "" && a:enabled
|
|
||||||
" must be in the first group
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
" record this position, but keep looking
|
|
||||||
if firstblank < 0
|
|
||||||
let firstblank = line
|
|
||||||
endif
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
if m[1] == ')'
|
|
||||||
" if there's no match, add it to the first group
|
|
||||||
if appendline < 0 && firstblank >= 0
|
|
||||||
let appendline = firstblank
|
|
||||||
endif
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
let lastprefix = matchstr(m[4], "^[^/]*/")
|
|
||||||
if a:localname != '' && m[3] != ''
|
|
||||||
let qlocalpath = printf('%-' . (len(m[3])-1) . 's %s', a:localname, qpath)
|
|
||||||
endif
|
|
||||||
let appendstr = m[2] . qlocalpath
|
|
||||||
let indentstr = 0
|
|
||||||
if m[4] == path
|
|
||||||
let appendline = -1
|
|
||||||
let deleteline = line
|
|
||||||
break
|
|
||||||
elseif m[4] < path
|
|
||||||
" don't set candidate position if we have a site prefix,
|
|
||||||
" we've passed a blank line, and this doesn't share the same
|
|
||||||
" site prefix.
|
|
||||||
if siteprefix == "" || firstblank < 0 || match(m[4], "^" . siteprefix) >= 0
|
|
||||||
let appendline = line
|
|
||||||
endif
|
|
||||||
elseif siteprefix != "" && match(m[4], "^" . siteprefix) >= 0
|
|
||||||
" first entry of site group
|
|
||||||
let appendline = line - 1
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
break
|
|
||||||
|
|
||||||
elseif linestr =~# '^import '
|
|
||||||
if appendline == packageline
|
|
||||||
let appendstr = 'import ' . qlocalpath
|
|
||||||
let appendline = line - 1
|
|
||||||
endif
|
|
||||||
let m = matchlist(linestr, '^import\(\s\+\)\(\S*\s*\)"\(.\+\)"')
|
|
||||||
if !empty(m)
|
|
||||||
if m[3] == path
|
|
||||||
let appendline = -1
|
|
||||||
let deleteline = line
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
if m[3] < path
|
|
||||||
let appendline = line
|
|
||||||
endif
|
|
||||||
if a:localname != '' && m[2] != ''
|
|
||||||
let qlocalpath = printf("%s %" . len(m[2])-1 . "s", a:localname, qpath)
|
|
||||||
endif
|
|
||||||
let appendstr = 'import' . m[1] . qlocalpath
|
|
||||||
endif
|
|
||||||
|
|
||||||
elseif linestr =~# '^\(var\|const\|type\|func\)\>'
|
|
||||||
break
|
|
||||||
|
|
||||||
endif
|
|
||||||
let line = line + 1
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" Append or remove the package import, as requested.
|
|
||||||
if a:enabled
|
|
||||||
if deleteline != -1
|
|
||||||
call s:Error(qpath . ' already being imported')
|
|
||||||
elseif appendline == -1
|
|
||||||
call s:Error('No package line found')
|
|
||||||
else
|
|
||||||
if appendline == packageline
|
|
||||||
call append(appendline + 0, '')
|
|
||||||
call append(appendline + 1, 'import (')
|
|
||||||
call append(appendline + 2, ')')
|
|
||||||
let appendline += 2
|
|
||||||
let linesdelta += 3
|
|
||||||
let appendstr = qlocalpath
|
|
||||||
let indentstr = 1
|
|
||||||
endif
|
|
||||||
call append(appendline, appendstr)
|
|
||||||
execute appendline + 1
|
|
||||||
if indentstr
|
|
||||||
execute 'normal >>'
|
|
||||||
endif
|
|
||||||
let linesdelta += 1
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
if deleteline == -1
|
|
||||||
call s:Error(qpath . ' not being imported')
|
|
||||||
else
|
|
||||||
execute deleteline . 'd'
|
|
||||||
let linesdelta -= 1
|
|
||||||
|
|
||||||
if getline(deleteline-1) =~# '^import\s\+(' && getline(deleteline) =~# '^)'
|
|
||||||
" Delete empty import block
|
|
||||||
let deleteline -= 1
|
|
||||||
execute deleteline . "d"
|
|
||||||
execute deleteline . "d"
|
|
||||||
let linesdelta -= 2
|
|
||||||
endif
|
|
||||||
|
|
||||||
if getline(deleteline) == '' && getline(deleteline - 1) == ''
|
|
||||||
" Delete spacing for removed line too.
|
|
||||||
execute deleteline . "d"
|
|
||||||
let linesdelta -= 1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Adjust view for any changes.
|
|
||||||
let view.lnum += linesdelta
|
|
||||||
let view.topline += linesdelta
|
|
||||||
if view.topline < 0
|
|
||||||
let view.topline = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Put buffer back where it was.
|
|
||||||
call winrestview(view)
|
|
||||||
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Error(s)
|
|
||||||
echohl Error | echo a:s | echohl None
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
let b:did_ftplugin_go_import = 1
|
|
||||||
|
|
||||||
" vim:ts=4:sw=4:et
|
|
@ -1,78 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
#
|
|
||||||
# Copyright 2012 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.
|
|
||||||
#
|
|
||||||
# Tests for import.vim.
|
|
||||||
|
|
||||||
cd $(dirname $0)
|
|
||||||
|
|
||||||
cat > base.go <<EOF
|
|
||||||
package test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"io"
|
|
||||||
"net"
|
|
||||||
|
|
||||||
"mycorp/foo"
|
|
||||||
)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
fail=0
|
|
||||||
|
|
||||||
# usage: test_one command pattern
|
|
||||||
# Pattern is a PCRE expression that will match across lines.
|
|
||||||
test_one() {
|
|
||||||
echo 2>&1 -n "$1: "
|
|
||||||
vim -e -s -u /dev/null -U /dev/null --noplugin -c "source import.vim" \
|
|
||||||
-c "$1" -c 'wq! test.go' base.go
|
|
||||||
# ensure blank lines are treated correctly
|
|
||||||
if ! gofmt test.go | cmp test.go -; then
|
|
||||||
echo 2>&1 "gofmt conflict"
|
|
||||||
gofmt test.go | diff -u test.go - | sed "s/^/ /" 2>&1
|
|
||||||
fail=1
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
if ! [[ $(cat test.go) =~ $2 ]]; then
|
|
||||||
echo 2>&1 "$2 did not match"
|
|
||||||
cat test.go | sed "s/^/ /" 2>&1
|
|
||||||
fail=1
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
echo 2>&1 "ok"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Tests for Import
|
|
||||||
|
|
||||||
test_one "Import baz" '"baz".*"bytes"'
|
|
||||||
test_one "Import io/ioutil" '"io".*"io/ioutil".*"net"'
|
|
||||||
test_one "Import myc" '"io".*"myc".*"net"' # prefix of a site prefix
|
|
||||||
test_one "Import nat" '"io".*"nat".*"net"'
|
|
||||||
test_one "Import net/http" '"net".*"net/http".*"mycorp/foo"'
|
|
||||||
test_one "Import zoo" '"net".*"zoo".*"mycorp/foo"'
|
|
||||||
test_one "Import mycorp/bar" '"net".*"mycorp/bar".*"mycorp/foo"'
|
|
||||||
test_one "Import mycorp/goo" '"net".*"mycorp/foo".*"mycorp/goo"'
|
|
||||||
|
|
||||||
# Tests for Drop
|
|
||||||
|
|
||||||
cat > base.go <<EOF
|
|
||||||
package test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"foo"
|
|
||||||
|
|
||||||
"something"
|
|
||||||
"zoo"
|
|
||||||
)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
test_one "Drop something" '\([^"]*"foo"[^"]*"zoo"[^"]*\)'
|
|
||||||
|
|
||||||
rm -f base.go test.go
|
|
||||||
if [ $fail -gt 0 ]; then
|
|
||||||
echo 2>&1 "FAIL"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo 2>&1 "PASS"
|
|
@ -1,65 +0,0 @@
|
|||||||
" 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.
|
|
||||||
"
|
|
||||||
" indent/go.vim: Vim indent file for Go.
|
|
||||||
"
|
|
||||||
" TODO:
|
|
||||||
" - function invocations split across lines
|
|
||||||
" - general line splits (line ends in an operator)
|
|
||||||
|
|
||||||
if exists("b:did_indent")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let b:did_indent = 1
|
|
||||||
|
|
||||||
" C indentation is too far off useful, mainly due to Go's := operator.
|
|
||||||
" Let's just define our own.
|
|
||||||
setlocal nolisp
|
|
||||||
setlocal autoindent
|
|
||||||
setlocal indentexpr=GoIndent(v:lnum)
|
|
||||||
setlocal indentkeys+=<:>,0=},0=)
|
|
||||||
|
|
||||||
if exists("*GoIndent")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
function! GoIndent(lnum)
|
|
||||||
let prevlnum = prevnonblank(a:lnum-1)
|
|
||||||
if prevlnum == 0
|
|
||||||
" top of file
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
" grab the previous and current line, stripping comments.
|
|
||||||
let prevl = substitute(getline(prevlnum), '//.*$', '', '')
|
|
||||||
let thisl = substitute(getline(a:lnum), '//.*$', '', '')
|
|
||||||
let previ = indent(prevlnum)
|
|
||||||
|
|
||||||
let ind = previ
|
|
||||||
|
|
||||||
if prevl =~ '[({]\s*$'
|
|
||||||
" previous line opened a block
|
|
||||||
let ind += &sw
|
|
||||||
endif
|
|
||||||
if prevl =~# '^\s*\(case .*\|default\):$'
|
|
||||||
" previous line is part of a switch statement
|
|
||||||
let ind += &sw
|
|
||||||
endif
|
|
||||||
" TODO: handle if the previous line is a label.
|
|
||||||
|
|
||||||
if thisl =~ '^\s*[)}]'
|
|
||||||
" this line closed a block
|
|
||||||
let ind -= &sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Colons are tricky.
|
|
||||||
" We want to outdent if it's part of a switch ("case foo:" or "default:").
|
|
||||||
" We ignore trying to deal with jump labels because (a) they're rare, and
|
|
||||||
" (b) they're hard to disambiguate from a composite literal key.
|
|
||||||
if thisl =~# '^\s*\(case .*\|default\):$'
|
|
||||||
let ind -= &sw
|
|
||||||
endif
|
|
||||||
|
|
||||||
return ind
|
|
||||||
endfunction
|
|
@ -1,6 +0,0 @@
|
|||||||
This is a mirror of the misc/vim portion of the official Go repository. It is
|
|
||||||
automatically updated.
|
|
||||||
|
|
||||||
Any contributions or issues should be made to the official repository.
|
|
||||||
|
|
||||||
http://golang.org/doc/contribute.html
|
|
@ -1,130 +0,0 @@
|
|||||||
" 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.
|
|
||||||
"
|
|
||||||
" godoc.vim: Vim command to see godoc.
|
|
||||||
"
|
|
||||||
"
|
|
||||||
" Commands:
|
|
||||||
"
|
|
||||||
" :Godoc
|
|
||||||
"
|
|
||||||
" Open the relevant Godoc for either the word[s] passed to the command or
|
|
||||||
" the, by default, the word under the cursor.
|
|
||||||
"
|
|
||||||
" Options:
|
|
||||||
"
|
|
||||||
" g:go_godoc_commands [default=1]
|
|
||||||
"
|
|
||||||
" Flag to indicate whether to enable the commands listed above.
|
|
||||||
|
|
||||||
if exists("g:loaded_godoc")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:loaded_godoc = 1
|
|
||||||
|
|
||||||
let s:buf_nr = -1
|
|
||||||
let s:last_word = ''
|
|
||||||
|
|
||||||
if !exists('g:go_godoc_commands')
|
|
||||||
let g:go_godoc_commands = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if g:go_godoc_commands
|
|
||||||
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>
|
|
||||||
|
|
||||||
function! s:GodocView()
|
|
||||||
if !bufexists(s:buf_nr)
|
|
||||||
leftabove new
|
|
||||||
file `="[Godoc]"`
|
|
||||||
let s:buf_nr = bufnr('%')
|
|
||||||
elseif bufwinnr(s:buf_nr) == -1
|
|
||||||
leftabove split
|
|
||||||
execute s:buf_nr . 'buffer'
|
|
||||||
delete _
|
|
||||||
elseif bufwinnr(s:buf_nr) != bufwinnr('%')
|
|
||||||
execute bufwinnr(s:buf_nr) . 'wincmd w'
|
|
||||||
endif
|
|
||||||
|
|
||||||
setlocal filetype=godoc
|
|
||||||
setlocal bufhidden=delete
|
|
||||||
setlocal buftype=nofile
|
|
||||||
setlocal noswapfile
|
|
||||||
setlocal nobuflisted
|
|
||||||
setlocal modifiable
|
|
||||||
setlocal nocursorline
|
|
||||||
setlocal nocursorcolumn
|
|
||||||
setlocal iskeyword+=:
|
|
||||||
setlocal iskeyword-=-
|
|
||||||
|
|
||||||
nnoremap <buffer> <silent> K :Godoc<cr>
|
|
||||||
|
|
||||||
au BufHidden <buffer> call let <SID>buf_nr = -1
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:GodocWord(word)
|
|
||||||
if !executable('godoc')
|
|
||||||
echohl WarningMsg
|
|
||||||
echo "godoc command not found."
|
|
||||||
echo " install with: go get code.google.com/p/go.tools/cmd/godoc"
|
|
||||||
echohl None
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
let word = a:word
|
|
||||||
silent! let content = system('godoc ' . word)
|
|
||||||
if v:shell_error || !len(content)
|
|
||||||
if len(s:last_word)
|
|
||||||
silent! let content = system('godoc ' . s:last_word.'/'.word)
|
|
||||||
if v:shell_error || !len(content)
|
|
||||||
echo 'No documentation found for "' . word . '".'
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
let word = s:last_word.'/'.word
|
|
||||||
else
|
|
||||||
echo 'No documentation found for "' . word . '".'
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
let s:last_word = word
|
|
||||||
silent! call s:GodocView()
|
|
||||||
setlocal modifiable
|
|
||||||
silent! %d _
|
|
||||||
silent! put! =content
|
|
||||||
silent! normal gg
|
|
||||||
setlocal nomodifiable
|
|
||||||
setfiletype godoc
|
|
||||||
return 1
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Godoc(...)
|
|
||||||
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
|
|
||||||
if !len(words)
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
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
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" vim:ts=4:sw=4:et
|
|
@ -1,101 +0,0 @@
|
|||||||
Vim plugins for Go (http://golang.org)
|
|
||||||
======================================
|
|
||||||
|
|
||||||
To use all the Vim plugins, add these lines to your $HOME/.vimrc.
|
|
||||||
|
|
||||||
" Some Linux distributions set filetype in /etc/vimrc.
|
|
||||||
" Clear filetype flags before changing runtimepath to force Vim to reload them.
|
|
||||||
filetype off
|
|
||||||
filetype plugin indent off
|
|
||||||
set runtimepath+=$GOROOT/misc/vim
|
|
||||||
filetype plugin indent on
|
|
||||||
syntax on
|
|
||||||
|
|
||||||
If you want to select fewer plugins, use the instructions in the rest of
|
|
||||||
this file.
|
|
||||||
|
|
||||||
A popular configuration is to gofmt Go source files when they are saved.
|
|
||||||
To do that, add this line to the end of your $HOME/.vimrc.
|
|
||||||
|
|
||||||
autocmd FileType go autocmd BufWritePre <buffer> Fmt
|
|
||||||
|
|
||||||
|
|
||||||
Vim syntax highlighting
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
To install automatic syntax highlighting for GO programs:
|
|
||||||
|
|
||||||
1. Copy or link the filetype detection script to the ftdetect directory
|
|
||||||
underneath your vim runtime directory (normally $HOME/.vim/ftdetect)
|
|
||||||
2. Copy or link syntax/go.vim to the syntax directory underneath your vim
|
|
||||||
runtime directory (normally $HOME/.vim/syntax). Linking this file rather
|
|
||||||
than just copying it will ensure any changes are automatically reflected
|
|
||||||
in your syntax highlighting.
|
|
||||||
3. Add the following line to your .vimrc file (normally $HOME/.vimrc):
|
|
||||||
|
|
||||||
syntax on
|
|
||||||
|
|
||||||
In a typical unix environment you might accomplish this using the following
|
|
||||||
commands:
|
|
||||||
|
|
||||||
mkdir -p $HOME/.vim/ftdetect
|
|
||||||
mkdir -p $HOME/.vim/syntax
|
|
||||||
mkdir -p $HOME/.vim/autoload/go
|
|
||||||
ln -s $GOROOT/misc/vim/ftdetect/gofiletype.vim $HOME/.vim/ftdetect/
|
|
||||||
ln -s $GOROOT/misc/vim/syntax/go.vim $HOME/.vim/syntax
|
|
||||||
ln -s $GOROOT/misc/vim/autoload/go/complete.vim $HOME/.vim/autoload/go
|
|
||||||
echo "syntax on" >> $HOME/.vimrc
|
|
||||||
|
|
||||||
|
|
||||||
Vim filetype plugins
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
To install one of the available filetype plugins:
|
|
||||||
|
|
||||||
1. Same as 1 above.
|
|
||||||
2. Copy or link ftplugin/go.vim to the ftplugin directory underneath your vim
|
|
||||||
runtime directory (normally $HOME/.vim/ftplugin). Copy or link one or more
|
|
||||||
additional plugins from ftplugin/go/*.vim to the Go-specific subdirectory
|
|
||||||
in the same place ($HOME/.vim/ftplugin/go/*.vim).
|
|
||||||
3. Add the following line to your .vimrc file (normally $HOME/.vimrc):
|
|
||||||
|
|
||||||
filetype plugin on
|
|
||||||
|
|
||||||
|
|
||||||
Vim indentation plugin
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
To install automatic indentation:
|
|
||||||
|
|
||||||
1. Same as 1 above.
|
|
||||||
2. Copy or link indent/go.vim to the indent directory underneath your vim
|
|
||||||
runtime directory (normally $HOME/.vim/indent).
|
|
||||||
3. Add the following line to your .vimrc file (normally $HOME/.vimrc):
|
|
||||||
|
|
||||||
filetype indent on
|
|
||||||
|
|
||||||
|
|
||||||
Vim compiler plugin
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
To install the compiler plugin:
|
|
||||||
|
|
||||||
1. Same as 1 above.
|
|
||||||
2. Copy or link compiler/go.vim to the compiler directory underneath your vim
|
|
||||||
runtime directory (normally $HOME/.vim/compiler).
|
|
||||||
3. Activate the compiler plugin with ":compiler go". To always enable the
|
|
||||||
compiler plugin in Go source files add an autocommand to your .vimrc file
|
|
||||||
(normally $HOME/.vimrc):
|
|
||||||
|
|
||||||
autocmd FileType go compiler go
|
|
||||||
|
|
||||||
|
|
||||||
Godoc plugin
|
|
||||||
------------
|
|
||||||
|
|
||||||
To install godoc plugin:
|
|
||||||
|
|
||||||
1. Same as 1 above.
|
|
||||||
2. Copy or link plugin/godoc.vim to $HOME/.vim/plugin/godoc,
|
|
||||||
syntax/godoc.vim to $HOME/.vim/syntax/godoc.vim,
|
|
||||||
and autoload/go/complete.vim to $HOME/.vim/autoload/go/complete.vim.
|
|
@ -1,207 +0,0 @@
|
|||||||
" Copyright 2009 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 syntax file for Go.
|
|
||||||
"
|
|
||||||
" Options:
|
|
||||||
" There are some options for customizing the highlighting; the recommended
|
|
||||||
" settings are the default values, but you can write:
|
|
||||||
" let OPTION_NAME = 0
|
|
||||||
" in your ~/.vimrc file to disable particular options. You can also write:
|
|
||||||
" let OPTION_NAME = 1
|
|
||||||
" to enable particular options. At present, all options default to on.
|
|
||||||
"
|
|
||||||
" - go_highlight_array_whitespace_error
|
|
||||||
" Highlights white space after "[]".
|
|
||||||
" - go_highlight_chan_whitespace_error
|
|
||||||
" Highlights white space around the communications operator that don't follow
|
|
||||||
" the standard style.
|
|
||||||
" - go_highlight_extra_types
|
|
||||||
" Highlights commonly used library types (io.Reader, etc.).
|
|
||||||
" - go_highlight_space_tab_error
|
|
||||||
" Highlights instances of tabs following spaces.
|
|
||||||
" - go_highlight_trailing_whitespace_error
|
|
||||||
" Highlights trailing white space.
|
|
||||||
|
|
||||||
" Quit when a (custom) syntax file was already loaded
|
|
||||||
if exists("b:current_syntax")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("go_highlight_array_whitespace_error")
|
|
||||||
let go_highlight_array_whitespace_error = 1
|
|
||||||
endif
|
|
||||||
if !exists("go_highlight_chan_whitespace_error")
|
|
||||||
let go_highlight_chan_whitespace_error = 1
|
|
||||||
endif
|
|
||||||
if !exists("go_highlight_extra_types")
|
|
||||||
let go_highlight_extra_types = 1
|
|
||||||
endif
|
|
||||||
if !exists("go_highlight_space_tab_error")
|
|
||||||
let go_highlight_space_tab_error = 1
|
|
||||||
endif
|
|
||||||
if !exists("go_highlight_trailing_whitespace_error")
|
|
||||||
let go_highlight_trailing_whitespace_error = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
syn case match
|
|
||||||
|
|
||||||
syn keyword goDirective package import
|
|
||||||
syn keyword goDeclaration var const type
|
|
||||||
syn keyword goDeclType struct interface
|
|
||||||
|
|
||||||
hi def link goDirective Statement
|
|
||||||
hi def link goDeclaration Keyword
|
|
||||||
hi def link goDeclType Keyword
|
|
||||||
|
|
||||||
" Keywords within functions
|
|
||||||
syn keyword goStatement defer go goto return break continue fallthrough
|
|
||||||
syn keyword goConditional if else switch select
|
|
||||||
syn keyword goLabel case default
|
|
||||||
syn keyword goRepeat for range
|
|
||||||
|
|
||||||
hi def link goStatement Statement
|
|
||||||
hi def link goConditional Conditional
|
|
||||||
hi def link goLabel Label
|
|
||||||
hi def link goRepeat Repeat
|
|
||||||
|
|
||||||
" Predefined types
|
|
||||||
syn keyword goType chan map bool string error
|
|
||||||
syn keyword goSignedInts int int8 int16 int32 int64 rune
|
|
||||||
syn keyword goUnsignedInts byte uint uint8 uint16 uint32 uint64 uintptr
|
|
||||||
syn keyword goFloats float32 float64
|
|
||||||
syn keyword goComplexes complex64 complex128
|
|
||||||
|
|
||||||
hi def link goType Type
|
|
||||||
hi def link goSignedInts Type
|
|
||||||
hi def link goUnsignedInts Type
|
|
||||||
hi def link goFloats Type
|
|
||||||
hi def link goComplexes Type
|
|
||||||
|
|
||||||
" Treat func specially: it's a declaration at the start of a line, but a type
|
|
||||||
" elsewhere. Order matters here.
|
|
||||||
syn match goType /\<func\>/
|
|
||||||
syn match goDeclaration /^func\>/
|
|
||||||
|
|
||||||
" Predefined functions and values
|
|
||||||
syn keyword goBuiltins append cap close complex copy delete imag len
|
|
||||||
syn keyword goBuiltins make new panic print println real recover
|
|
||||||
syn keyword goConstants iota true false nil
|
|
||||||
|
|
||||||
hi def link goBuiltins Keyword
|
|
||||||
hi def link goConstants Keyword
|
|
||||||
|
|
||||||
" Comments; their contents
|
|
||||||
syn keyword goTodo contained TODO FIXME XXX BUG
|
|
||||||
syn cluster goCommentGroup contains=goTodo
|
|
||||||
syn region goComment start="/\*" end="\*/" contains=@goCommentGroup,@Spell
|
|
||||||
syn region goComment start="//" end="$" contains=@goCommentGroup,@Spell
|
|
||||||
|
|
||||||
hi def link goComment Comment
|
|
||||||
hi def link goTodo Todo
|
|
||||||
|
|
||||||
" Go escapes
|
|
||||||
syn match goEscapeOctal display contained "\\[0-7]\{3}"
|
|
||||||
syn match goEscapeC display contained +\\[abfnrtv\\'"]+
|
|
||||||
syn match goEscapeX display contained "\\x\x\{2}"
|
|
||||||
syn match goEscapeU display contained "\\u\x\{4}"
|
|
||||||
syn match goEscapeBigU display contained "\\U\x\{8}"
|
|
||||||
syn match goEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+
|
|
||||||
|
|
||||||
hi def link goEscapeOctal goSpecialString
|
|
||||||
hi def link goEscapeC goSpecialString
|
|
||||||
hi def link goEscapeX goSpecialString
|
|
||||||
hi def link goEscapeU goSpecialString
|
|
||||||
hi def link goEscapeBigU goSpecialString
|
|
||||||
hi def link goSpecialString Special
|
|
||||||
hi def link goEscapeError Error
|
|
||||||
|
|
||||||
" Strings and their contents
|
|
||||||
syn cluster goStringGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError
|
|
||||||
syn region goString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup
|
|
||||||
syn region goRawString start=+`+ end=+`+
|
|
||||||
|
|
||||||
hi def link goString String
|
|
||||||
hi def link goRawString String
|
|
||||||
|
|
||||||
" Characters; their contents
|
|
||||||
syn cluster goCharacterGroup contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU
|
|
||||||
syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup
|
|
||||||
|
|
||||||
hi def link goCharacter Character
|
|
||||||
|
|
||||||
" Regions
|
|
||||||
syn region goBlock start="{" end="}" transparent fold
|
|
||||||
syn region goParen start='(' end=')' transparent
|
|
||||||
|
|
||||||
" Integers
|
|
||||||
syn match goDecimalInt "\<\d\+\([Ee]\d\+\)\?\>"
|
|
||||||
syn match goHexadecimalInt "\<0x\x\+\>"
|
|
||||||
syn match goOctalInt "\<0\o\+\>"
|
|
||||||
syn match goOctalError "\<0\o*[89]\d*\>"
|
|
||||||
|
|
||||||
hi def link goDecimalInt Integer
|
|
||||||
hi def link goHexadecimalInt Integer
|
|
||||||
hi def link goOctalInt Integer
|
|
||||||
hi def link Integer Number
|
|
||||||
|
|
||||||
" Floating point
|
|
||||||
syn match goFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>"
|
|
||||||
syn match goFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>"
|
|
||||||
syn match goFloat "\<\d\+[Ee][-+]\d\+\>"
|
|
||||||
|
|
||||||
hi def link goFloat Float
|
|
||||||
|
|
||||||
" Imaginary literals
|
|
||||||
syn match goImaginary "\<\d\+i\>"
|
|
||||||
syn match goImaginary "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>"
|
|
||||||
syn match goImaginary "\<\.\d\+\([Ee][-+]\d\+\)\?i\>"
|
|
||||||
syn match goImaginary "\<\d\+[Ee][-+]\d\+i\>"
|
|
||||||
|
|
||||||
hi def link goImaginary Number
|
|
||||||
|
|
||||||
" Spaces after "[]"
|
|
||||||
if go_highlight_array_whitespace_error != 0
|
|
||||||
syn match goSpaceError display "\(\[\]\)\@<=\s\+"
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Spacing errors around the 'chan' keyword
|
|
||||||
if go_highlight_chan_whitespace_error != 0
|
|
||||||
" receive-only annotation on chan type
|
|
||||||
syn match goSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@="
|
|
||||||
" send-only annotation on chan type
|
|
||||||
syn match goSpaceError display "\(\<chan\)\@<=\s\+\(<-\)\@="
|
|
||||||
" value-ignoring receives in a few contexts
|
|
||||||
syn match goSpaceError display "\(\(^\|[={(,;]\)\s*<-\)\@<=\s\+"
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Extra types commonly seen
|
|
||||||
if go_highlight_extra_types != 0
|
|
||||||
syn match goExtraType /\<bytes\.\(Buffer\)\>/
|
|
||||||
syn match goExtraType /\<io\.\(Reader\|Writer\|ReadWriter\|ReadWriteCloser\)\>/
|
|
||||||
syn match goExtraType /\<reflect\.\(Kind\|Type\|Value\)\>/
|
|
||||||
syn match goExtraType /\<unsafe\.Pointer\>/
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Space-tab error
|
|
||||||
if go_highlight_space_tab_error != 0
|
|
||||||
syn match goSpaceError display " \+\t"me=e-1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Trailing white space error
|
|
||||||
if go_highlight_trailing_whitespace_error != 0
|
|
||||||
syn match goSpaceError display excludenl "\s\+$"
|
|
||||||
endif
|
|
||||||
|
|
||||||
hi def link goExtraType Type
|
|
||||||
hi def link goSpaceError Error
|
|
||||||
|
|
||||||
" Search backwards for a global declaration to start processing the syntax.
|
|
||||||
"syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/
|
|
||||||
|
|
||||||
" There's a bug in the implementation of grouphere. For now, use the
|
|
||||||
" following as a more expensive/less precise workaround.
|
|
||||||
syn sync minlines=500
|
|
||||||
|
|
||||||
let b:current_syntax = "go"
|
|
@ -1,20 +0,0 @@
|
|||||||
" 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.
|
|
||||||
|
|
||||||
if exists("b:current_syntax")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
syn case match
|
|
||||||
syn match godocTitle "^\([A-Z][A-Z ]*\)$"
|
|
||||||
|
|
||||||
command -nargs=+ HiLink hi def link <args>
|
|
||||||
|
|
||||||
HiLink godocTitle Title
|
|
||||||
|
|
||||||
delcommand HiLink
|
|
||||||
|
|
||||||
let b:current_syntax = "godoc"
|
|
||||||
|
|
||||||
" vim:ts=4 sts=2 sw=2:
|
|
Loading…
Reference in New Issue