Updated plugins
This commit is contained in:
parent
26861f69b1
commit
6b48dc598f
19 changed files with 576 additions and 95 deletions
|
@ -19,7 +19,7 @@ if has('reltime')
|
||||||
lockvar! g:_SYNTASTIC_START
|
lockvar! g:_SYNTASTIC_START
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let g:_SYNTASTIC_VERSION = '3.7.0-55'
|
let g:_SYNTASTIC_VERSION = '3.7.0-62'
|
||||||
lockvar g:_SYNTASTIC_VERSION
|
lockvar g:_SYNTASTIC_VERSION
|
||||||
|
|
||||||
" Sanity checks {{{1
|
" Sanity checks {{{1
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
"============================================================================
|
||||||
|
"File: mixedindentlint.vim
|
||||||
|
"Description: Mixed indentation linter for vim
|
||||||
|
"Maintainer: Payton Swick <payton@foolord.com>
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
if exists('g:loaded_syntastic_css_mixedindentlint_checker')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_syntastic_css_mixedindentlint_checker = 1
|
||||||
|
|
||||||
|
call g:SyntasticRegistry.CreateAndRegisterChecker({
|
||||||
|
\ 'filetype': 'css',
|
||||||
|
\ 'name': 'mixedindentlint',
|
||||||
|
\ 'redirect': 'javascript/mixedindentlint'})
|
||||||
|
|
||||||
|
" vim: set et sts=4 sw=4:
|
|
@ -0,0 +1,40 @@
|
||||||
|
"============================================================================
|
||||||
|
"File: mixedindentlint.vim
|
||||||
|
"Description: Mixed indentation linter for vim
|
||||||
|
"Maintainer: Payton Swick <payton@foolord.com>
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
if exists('g:loaded_syntastic_javascript_mixedindentlint_checker')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_syntastic_javascript_mixedindentlint_checker = 1
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
function! SyntaxCheckers_javascript_mixedindentlint_GetLocList() dict
|
||||||
|
let makeprg = self.makeprgBuild({})
|
||||||
|
|
||||||
|
let errorformat = 'Line %l in "%f" %.%#'
|
||||||
|
|
||||||
|
return SyntasticMake({
|
||||||
|
\ 'makeprg': makeprg,
|
||||||
|
\ 'errorformat': errorformat,
|
||||||
|
\ 'subtype': 'Style',
|
||||||
|
\ 'defaults': { 'text': 'Indentation differs from rest of file' },
|
||||||
|
\ 'returns': [0, 1] })
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call g:SyntasticRegistry.CreateAndRegisterChecker({
|
||||||
|
\ 'filetype': 'javascript',
|
||||||
|
\ 'name': 'mixedindentlint'})
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
" vim: set sw=4 sts=4 et fdm=marker:
|
|
@ -44,7 +44,6 @@ endfunction
|
||||||
|
|
||||||
function! SyntaxCheckers_r_lint_GetLocList() dict
|
function! SyntaxCheckers_r_lint_GetLocList() dict
|
||||||
let setwd = syntastic#util#isRunningWindows() ? 'setwd("' . escape(getcwd(), '"\') . '"); ' : ''
|
let setwd = syntastic#util#isRunningWindows() ? 'setwd("' . escape(getcwd(), '"\') . '"); ' : ''
|
||||||
let setwd = 'setwd("' . escape(getcwd(), '"\') . '"); '
|
|
||||||
let makeprg = self.getExecEscaped() . ' --slave --restore --no-save' .
|
let makeprg = self.getExecEscaped() . ' --slave --restore --no-save' .
|
||||||
\ ' -e ' . syntastic#util#shescape(setwd . 'library(lint); ' .
|
\ ' -e ' . syntastic#util#shescape(setwd . 'library(lint); ' .
|
||||||
\ 'try(lint(commandArgs(TRUE), ' . g:syntastic_r_lint_styles . '))') .
|
\ 'try(lint(commandArgs(TRUE), ' . g:syntastic_r_lint_styles . '))') .
|
||||||
|
|
|
@ -50,7 +50,7 @@ function! SyntaxCheckers_r_lintr_IsAvailable() dict
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! SyntaxCheckers_r_lintr_GetLocList() dict
|
function! SyntaxCheckers_r_lintr_GetLocList() dict
|
||||||
let setwd = syntastic#util#isRunningWindows() ? 'setwd(''' . escape(getcwd(), '"\') . '''); ' : ''
|
let setwd = syntastic#util#isRunningWindows() ? 'setwd("' . escape(getcwd(), '"\') . '"); ' : ''
|
||||||
let makeprg = self.getExecEscaped() . ' --slave --no-restore --no-save' .
|
let makeprg = self.getExecEscaped() . ' --slave --no-restore --no-save' .
|
||||||
\ ' -e ' . syntastic#util#shescape(setwd . 'suppressPackageStartupMessages(library(lintr)); ' .
|
\ ' -e ' . syntastic#util#shescape(setwd . 'suppressPackageStartupMessages(library(lintr)); ' .
|
||||||
\ 'lint(cache = ' . g:syntastic_r_lintr_cache . ', commandArgs(TRUE), ' . g:syntastic_r_lintr_linters . ')') .
|
\ 'lint(cache = ' . g:syntastic_r_lintr_cache . ', commandArgs(TRUE), ' . g:syntastic_r_lintr_linters . ')') .
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
"============================================================================
|
||||||
|
"File: mixedindentlint.vim
|
||||||
|
"Description: Mixed indentation linter for vim
|
||||||
|
"Maintainer: Payton Swick <payton@foolord.com>
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
if exists('g:loaded_syntastic_scss_mixedindentlint_checker')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_syntastic_scss_mixedindentlint_checker = 1
|
||||||
|
|
||||||
|
call g:SyntasticRegistry.CreateAndRegisterChecker({
|
||||||
|
\ 'filetype': 'scss',
|
||||||
|
\ 'name': 'mixedindentlint',
|
||||||
|
\ 'redirect': 'javascript/mixedindentlint'})
|
||||||
|
|
||||||
|
" vim: set et sts=4 sw=4:
|
|
@ -320,6 +320,8 @@ function! s:repo_translate(spec) dict abort
|
||||||
return 'fugitive://'.self.dir().'//'.ref
|
return 'fugitive://'.self.dir().'//'.ref
|
||||||
elseif a:spec =~# '^:'
|
elseif a:spec =~# '^:'
|
||||||
return 'fugitive://'.self.dir().'//0/'.a:spec[1:-1]
|
return 'fugitive://'.self.dir().'//0/'.a:spec[1:-1]
|
||||||
|
elseif a:spec ==# '@'
|
||||||
|
return self.dir('HEAD')
|
||||||
elseif a:spec =~# 'HEAD\|^refs/' && a:spec !~ ':' && filereadable(self.dir(a:spec))
|
elseif a:spec =~# 'HEAD\|^refs/' && a:spec !~ ':' && filereadable(self.dir(a:spec))
|
||||||
return self.dir(a:spec)
|
return self.dir(a:spec)
|
||||||
elseif filereadable(self.dir('refs/'.a:spec))
|
elseif filereadable(self.dir('refs/'.a:spec))
|
||||||
|
@ -1258,7 +1260,7 @@ function! s:Grep(cmd,bang,arg) abort
|
||||||
try
|
try
|
||||||
execute cd.'`=s:repo().tree()`'
|
execute cd.'`=s:repo().tree()`'
|
||||||
let &grepprg = s:repo().git_command('--no-pager', 'grep', '-n', '--no-color')
|
let &grepprg = s:repo().git_command('--no-pager', 'grep', '-n', '--no-color')
|
||||||
let &grepformat = '%f:%l:%m,%f'
|
let &grepformat = '%f:%l:%m,%m %f match%ts,%f'
|
||||||
exe a:cmd.'! '.escape(matchstr(a:arg,'\v\C.{-}%($|[''" ]\@=\|)@='),'|')
|
exe a:cmd.'! '.escape(matchstr(a:arg,'\v\C.{-}%($|[''" ]\@=\|)@='),'|')
|
||||||
let list = a:cmd =~# '^l' ? getloclist(0) : getqflist()
|
let list = a:cmd =~# '^l' ? getloclist(0) : getqflist()
|
||||||
for entry in list
|
for entry in list
|
||||||
|
@ -1406,6 +1408,7 @@ function! s:Edit(cmd,bang,...) abort
|
||||||
catch /^fugitive:/
|
catch /^fugitive:/
|
||||||
return 'echoerr v:errmsg'
|
return 'echoerr v:errmsg'
|
||||||
endtry
|
endtry
|
||||||
|
let file = s:sub(file, '/$', '')
|
||||||
if a:cmd ==# 'read'
|
if a:cmd ==# 'read'
|
||||||
return 'silent %delete_|read '.s:fnameescape(file).'|silent 1delete_|diffupdate|'.line('.')
|
return 'silent %delete_|read '.s:fnameescape(file).'|silent 1delete_|diffupdate|'.line('.')
|
||||||
else
|
else
|
||||||
|
@ -2175,7 +2178,7 @@ call s:command("-bar -bang -range -nargs=* -complete=customlist,s:EditComplete G
|
||||||
|
|
||||||
function! s:Browse(bang,line1,count,...) abort
|
function! s:Browse(bang,line1,count,...) abort
|
||||||
try
|
try
|
||||||
let rev = a:0 ? substitute(join(a:000, ' '),'@[[:alnum:]_-]*\%(://.\{-\}\)\=$','','') : ''
|
let rev = a:0 ? substitute(join(a:000, ' '),'@[[:alnum:]_-]\w\+\%(://.\{-\}\)\=$','','') : ''
|
||||||
if rev ==# ''
|
if rev ==# ''
|
||||||
let expanded = s:buffer().rev()
|
let expanded = s:buffer().rev()
|
||||||
elseif rev ==# ':'
|
elseif rev ==# ':'
|
||||||
|
@ -2218,7 +2221,7 @@ function! s:Browse(bang,line1,count,...) abort
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if a:0 && join(a:000, ' ') =~# '@[[:alnum:]_-]*\%(://.\{-\}\)\=$'
|
if a:0 && join(a:000, ' ') =~# '@[[:alnum:]_-]\+\%(://.\{-\}\)\=$'
|
||||||
let remote = matchstr(join(a:000, ' '),'@\zs[[:alnum:]_-]\+\%(://.\{-\}\)\=$')
|
let remote = matchstr(join(a:000, ' '),'@\zs[[:alnum:]_-]\+\%(://.\{-\}\)\=$')
|
||||||
elseif path =~# '^\.git/refs/remotes/.'
|
elseif path =~# '^\.git/refs/remotes/.'
|
||||||
let remote = matchstr(path,'^\.git/refs/remotes/\zs[^/]\+')
|
let remote = matchstr(path,'^\.git/refs/remotes/\zs[^/]\+')
|
||||||
|
@ -2319,27 +2322,21 @@ function! s:github_url(opts, ...) abort
|
||||||
return root . '/commits/' . branch
|
return root . '/commits/' . branch
|
||||||
endif
|
endif
|
||||||
elseif path =~# '^\.git/refs/tags/'
|
elseif path =~# '^\.git/refs/tags/'
|
||||||
return root . '/releases/tag/' . matchstr(path,'[^/]\+$')
|
return root . '/releases/tag/' . path[15:-1]
|
||||||
elseif path =~# '^\.git/refs/.'
|
elseif path =~# '^\.git/refs/remotes/[^/]\+/.'
|
||||||
return root . '/commits/' . matchstr(path,'[^/]\+$')
|
return root . '/commits/' . matchstr(path,'remotes/[^/]\+/\zs.*')
|
||||||
elseif path =~# '.git/\%(config$\|hooks\>\)'
|
elseif path =~# '.git/\%(config$\|hooks\>\)'
|
||||||
return root . '/admin'
|
return root . '/admin'
|
||||||
elseif path =~# '^\.git\>'
|
elseif path =~# '^\.git\>'
|
||||||
return root
|
return root
|
||||||
endif
|
endif
|
||||||
if a:opts.revision =~# '^[[:alnum:]._-]\+:'
|
if a:opts.commit =~# '^\d\=$'
|
||||||
let commit = matchstr(a:opts.revision,'^[^:]*')
|
let commit = a:opts.repo.rev_parse('HEAD')
|
||||||
elseif a:opts.commit =~# '^\d\=$'
|
|
||||||
let local = matchstr(a:opts.repo.head_ref(),'\<refs/heads/\zs.*')
|
|
||||||
let commit = a:opts.repo.git_chomp('config','branch.'.local.'.merge')[11:-1]
|
|
||||||
if commit ==# ''
|
|
||||||
let commit = local
|
|
||||||
endif
|
|
||||||
else
|
else
|
||||||
let commit = a:opts.commit
|
let commit = a:opts.commit
|
||||||
endif
|
endif
|
||||||
if a:opts.type == 'tree'
|
if get(a:opts, 'type', '') ==# 'tree' || a:opts.path =~# '/$'
|
||||||
let url = s:sub(root . '/tree/' . commit . '/' . path,'/$','')
|
let url = substitute(root . '/tree/' . commit . '/' . path, '/$', '', 'g')
|
||||||
elseif a:opts.type == 'blob'
|
elseif a:opts.type == 'blob'
|
||||||
let url = root . '/blob/' . commit . '/' . path
|
let url = root . '/blob/' . commit . '/' . path
|
||||||
if get(a:opts, 'line2') && a:opts.line1 == a:opts.line2
|
if get(a:opts, 'line2') && a:opts.line1 == a:opts.line2
|
||||||
|
@ -2372,10 +2369,8 @@ function! s:instaweb_url(opts) abort
|
||||||
endif
|
endif
|
||||||
let url .= ';h=' . a:opts.repo.rev_parse(a:opts.commit . (a:opts.path == '' ? '' : ':' . a:opts.path))
|
let url .= ';h=' . a:opts.repo.rev_parse(a:opts.commit . (a:opts.path == '' ? '' : ':' . a:opts.path))
|
||||||
else
|
else
|
||||||
if a:opts.type ==# 'blob'
|
if a:opts.type ==# 'blob' && empty(a:opts.commit)
|
||||||
let tmp = tempname()
|
let url .= ';h='.a:opts.repo.git_chomp('hash-object', '-w', a:opts.path)
|
||||||
silent execute 'write !'.a:opts.repo.git_command('hash-object','-w','--stdin').' > '.tmp
|
|
||||||
let url .= ';h=' . readfile(tmp)[0]
|
|
||||||
else
|
else
|
||||||
try
|
try
|
||||||
let url .= ';h=' . a:opts.repo.rev_parse((a:opts.commit == '' ? 'HEAD' : ':' . a:opts.commit) . ':' . a:opts.path)
|
let url .= ';h=' . a:opts.repo.rev_parse((a:opts.commit == '' ? 'HEAD' : ':' . a:opts.commit) . ':' . a:opts.path)
|
||||||
|
@ -2855,7 +2850,7 @@ function! s:cfile() abort
|
||||||
elseif getline('.') =~# '^[+-]' && search('^@@ -\d\+,\d\+ +\d\+,','bnW')
|
elseif getline('.') =~# '^[+-]' && search('^@@ -\d\+,\d\+ +\d\+,','bnW')
|
||||||
let type = getline('.')[0]
|
let type = getline('.')[0]
|
||||||
let lnum = line('.') - 1
|
let lnum = line('.') - 1
|
||||||
let offset = -1
|
let offset = 0
|
||||||
while getline(lnum) !~# '^@@ -\d\+,\d\+ +\d\+,'
|
while getline(lnum) !~# '^@@ -\d\+,\d\+ +\d\+,'
|
||||||
if getline(lnum) =~# '^[ '.type.']'
|
if getline(lnum) =~# '^[ '.type.']'
|
||||||
let offset += 1
|
let offset += 1
|
||||||
|
|
|
@ -46,10 +46,11 @@ disabled/enabled easily.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
Vim-go follows the standard runtime path structure, so I highly recommend to use
|
Vim-go follows the standard runtime path structure, so I highly recommend to
|
||||||
a common and well known plugin manager to install vim-go. Do not use vim-go with
|
use a common and well known plugin manager to install vim-go. Do not use vim-go
|
||||||
other Go oriented vim plugins. For Pathogen just clone the repo. For other plugin managers
|
with other Go oriented vim plugins. For Pathogen just clone the repo. For other
|
||||||
add the appropriate lines and execute the plugin's install command.
|
plugin managers add the appropriate lines and execute the plugin's install
|
||||||
|
command.
|
||||||
|
|
||||||
* [Pathogen](https://github.com/tpope/vim-pathogen)
|
* [Pathogen](https://github.com/tpope/vim-pathogen)
|
||||||
* `git clone https://github.com/fatih/vim-go.git ~/.vim/bundle/vim-go`
|
* `git clone https://github.com/fatih/vim-go.git ~/.vim/bundle/vim-go`
|
||||||
|
@ -64,8 +65,9 @@ Please be sure all necessary binaries are installed (such as `gocode`, `godef`,
|
||||||
`goimports`, etc.). You can easily install them with the included
|
`goimports`, etc.). You can easily install them with the included
|
||||||
`:GoInstallBinaries` command. If invoked, all necessary binaries will be
|
`:GoInstallBinaries` command. If invoked, all necessary binaries will be
|
||||||
automatically downloaded and installed to your `$GOBIN` environment (if not set
|
automatically downloaded and installed to your `$GOBIN` environment (if not set
|
||||||
it will use `$GOPATH/bin`). Note that this command requires `git` for fetching the individual Go
|
it will use `$GOPATH/bin`). Note that this command requires `git` for fetching
|
||||||
packages. Additionally, use `:GoUpdateBinaries` to update the installed binaries.
|
the individual Go packages. Additionally, use `:GoUpdateBinaries` to update the
|
||||||
|
installed binaries.
|
||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
|
|
||||||
|
@ -156,19 +158,6 @@ More `<Plug>` mappings can be seen with `:he go-mappings`. Also these are just
|
||||||
recommendations, you are free to create more advanced mappings or functions
|
recommendations, you are free to create more advanced mappings or functions
|
||||||
based on `:he go-commands`.
|
based on `:he go-commands`.
|
||||||
|
|
||||||
### Location list navigation
|
|
||||||
|
|
||||||
All commands support collecting and displaying errors in Vim's location
|
|
||||||
list.
|
|
||||||
|
|
||||||
Quickly navigate through these location lists with `:lne` for next error and `:lp`
|
|
||||||
for previous. You can also bind these to keys, for example:
|
|
||||||
|
|
||||||
```vim
|
|
||||||
map <C-n> :lne<CR>
|
|
||||||
map <C-m> :lp<CR>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Settings
|
## Settings
|
||||||
Below are some settings you might find useful. For the full list see `:he go-settings`.
|
Below are some settings you might find useful. For the full list see `:he go-settings`.
|
||||||
|
|
||||||
|
@ -214,7 +203,21 @@ let g:go_bin_path = expand("~/.gotools")
|
||||||
let g:go_bin_path = "/home/fatih/.mypath" "or give absolute path
|
let g:go_bin_path = "/home/fatih/.mypath" "or give absolute path
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using with Syntastic
|
### Location list navigation
|
||||||
|
|
||||||
|
All commands support collecting and displaying errors in Vim's location
|
||||||
|
list.
|
||||||
|
|
||||||
|
Quickly navigate through these location lists with `:lne` for next error and `:lp`
|
||||||
|
for previous. You can also bind these to keys, for example:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
map <C-n> :lne<CR>
|
||||||
|
map <C-m> :lp<CR>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Using with Syntastic
|
||||||
Sometimes when using both `vim-go` and `syntastic` Vim will start lagging while saving and opening
|
Sometimes when using both `vim-go` and `syntastic` Vim will start lagging while saving and opening
|
||||||
files. The following fixes this:
|
files. The following fixes this:
|
||||||
|
|
||||||
|
|
|
@ -14,24 +14,30 @@ endfunction
|
||||||
" default it tries to call simply 'go build', but it first tries to get all
|
" default it tries to call simply 'go build', but it first tries to get all
|
||||||
" dependent files for the current folder and passes it to go build.
|
" dependent files for the current folder and passes it to go build.
|
||||||
function! go#cmd#Build(bang, ...)
|
function! go#cmd#Build(bang, ...)
|
||||||
let default_makeprg = &makeprg
|
" expand all wildcards(i.e: '%' to the current file name)
|
||||||
|
let goargs = map(copy(a:000), "expand(v:val)")
|
||||||
|
|
||||||
|
" escape all shell arguments before we pass it to make
|
||||||
|
let goargs = go#util#Shelllist(goargs, 1)
|
||||||
|
|
||||||
|
" create our command arguments. go build discards any results when it
|
||||||
|
" compiles multiple packages. So we pass the `errors` package just as an
|
||||||
|
" placeholder with the current folder (indicated with '.')
|
||||||
|
let args = ["build"] + goargs + [".", "errors"]
|
||||||
|
|
||||||
|
" if we have nvim, call it asynchronously and return early ;)
|
||||||
|
if has('nvim')
|
||||||
|
call go#jobcontrol#Spawn("build", args)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
let old_gopath = $GOPATH
|
let old_gopath = $GOPATH
|
||||||
let $GOPATH = go#path#Detect()
|
let $GOPATH = go#path#Detect()
|
||||||
|
let default_makeprg = &makeprg
|
||||||
|
let &makeprg = "go " . join(args, ' ')
|
||||||
|
|
||||||
let l:tmpname = tempname()
|
|
||||||
|
|
||||||
if v:shell_error
|
|
||||||
let &makeprg = "go build . errors"
|
|
||||||
else
|
|
||||||
" :make expands '%' and '#' wildcards, so they must also be escaped
|
|
||||||
let goargs = go#util#Shelljoin(map(copy(a:000), "expand(v:val)"), 1)
|
|
||||||
let gofiles = go#util#Shelljoin(go#tool#Files(), 1)
|
|
||||||
let &makeprg = "go build -o " . l:tmpname . ' ' . goargs . ' ' . gofiles
|
|
||||||
endif
|
|
||||||
|
|
||||||
echon "vim-go: " | echohl Identifier | echon "building ..."| echohl None
|
|
||||||
if g:go_dispatch_enabled && exists(':Make') == 2
|
if g:go_dispatch_enabled && exists(':Make') == 2
|
||||||
|
call go#util#EchoProgress("building dispatched ...")
|
||||||
silent! exe 'Make'
|
silent! exe 'Make'
|
||||||
else
|
else
|
||||||
silent! exe 'lmake!'
|
silent! exe 'lmake!'
|
||||||
|
@ -47,20 +53,30 @@ function! go#cmd#Build(bang, ...)
|
||||||
call go#list#JumpToFirst()
|
call go#list#JumpToFirst()
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
redraws! | echon "vim-go: " | echohl Function | echon "[build] SUCCESS"| echohl None
|
call go#util#EchoSuccess("[build] SUCCESS")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
call delete(l:tmpname)
|
|
||||||
let &makeprg = default_makeprg
|
let &makeprg = default_makeprg
|
||||||
let $GOPATH = old_gopath
|
let $GOPATH = old_gopath
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" Run runs the current file (and their dependencies if any) in a new terminal.
|
||||||
|
function! go#cmd#RunTerm(mode)
|
||||||
|
let cmd = "go run ". go#util#Shelljoin(go#tool#Files())
|
||||||
|
call go#term#newmode(cmd, a:mode)
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Run runs the current file (and their dependencies if any) and outputs it.
|
" Run runs the current file (and their dependencies if any) and outputs it.
|
||||||
" This is intented to test small programs and play with them. It's not
|
" This is intented to test small programs and play with them. It's not
|
||||||
" suitable for long running apps, because vim is blocking by default and
|
" suitable for long running apps, because vim is blocking by default and
|
||||||
" calling long running apps will block the whole UI.
|
" calling long running apps will block the whole UI.
|
||||||
function! go#cmd#Run(bang, ...)
|
function! go#cmd#Run(bang, ...)
|
||||||
|
if has('nvim')
|
||||||
|
call go#cmd#RunTerm('')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
let old_gopath = $GOPATH
|
let old_gopath = $GOPATH
|
||||||
let $GOPATH = go#path#Detect()
|
let $GOPATH = go#path#Detect()
|
||||||
|
|
||||||
|
@ -90,27 +106,8 @@ function! go#cmd#Run(bang, ...)
|
||||||
exe 'lmake!'
|
exe 'lmake!'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Remove any nonvalid filename from the location list to avoid opening an
|
|
||||||
" empty buffer. See https://github.com/fatih/vim-go/issues/287 for
|
|
||||||
" details.
|
|
||||||
let items = go#list#Get()
|
let items = go#list#Get()
|
||||||
let errors = []
|
let errors = go#tool#FilterValids(items)
|
||||||
let is_readable = {}
|
|
||||||
|
|
||||||
for item in items
|
|
||||||
let filename = bufname(item.bufnr)
|
|
||||||
if !has_key(is_readable, filename)
|
|
||||||
let is_readable[filename] = filereadable(filename)
|
|
||||||
endif
|
|
||||||
if is_readable[filename]
|
|
||||||
call add(errors, item)
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
for k in keys(filter(is_readable, '!v:val'))
|
|
||||||
echo "vim-go: " | echohl Identifier | echon "[run] Dropped " | echohl Constant | echon '"' . k . '"'
|
|
||||||
echohl Identifier | echon " from location list (nonvalid filename)" | echohl None
|
|
||||||
endfor
|
|
||||||
|
|
||||||
call go#list#Populate(errors)
|
call go#list#Populate(errors)
|
||||||
call go#list#Window(len(errors))
|
call go#list#Window(len(errors))
|
||||||
|
@ -149,33 +146,51 @@ endfunction
|
||||||
" compile the tests instead of running them (useful to catch errors in the
|
" compile the tests instead of running them (useful to catch errors in the
|
||||||
" test files). Any other argument is appendend to the final `go test` command
|
" test files). Any other argument is appendend to the final `go test` command
|
||||||
function! go#cmd#Test(bang, compile, ...)
|
function! go#cmd#Test(bang, compile, ...)
|
||||||
let command = "go test "
|
let args = ["test"]
|
||||||
|
|
||||||
" don't run the test, only compile it. Useful to capture and fix errors or
|
" don't run the test, only compile it. Useful to capture and fix errors or
|
||||||
" to create a test binary.
|
" to create a test binary.
|
||||||
if a:compile
|
if a:compile
|
||||||
let command .= "-c "
|
call add(args, "-c")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if a:0
|
if a:0
|
||||||
let command .= go#util#Shelljoin(map(copy(a:000), "expand(v:val)"))
|
" expand all wildcards(i.e: '%' to the current file name)
|
||||||
|
let goargs = map(copy(a:000), "expand(v:val)")
|
||||||
|
|
||||||
|
" escape all shell arguments before we pass it to test
|
||||||
|
call extend(args, go#util#Shelllist(goargs, 1))
|
||||||
else
|
else
|
||||||
" only add this if no custom flags are passed
|
" only add this if no custom flags are passed
|
||||||
let timeout = get(g:, 'go_test_timeout', '10s')
|
let timeout = get(g:, 'go_test_timeout', '10s')
|
||||||
let command .= "-timeout=" . timeout . " "
|
call add(args, printf("-timeout=%s", timeout))
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has('nvim')
|
||||||
|
if get(g:, 'go_term_enabled', 0)
|
||||||
|
call go#term#new(["go"] + args)
|
||||||
|
else
|
||||||
|
call go#jobcontrol#Spawn("test", args)
|
||||||
|
endif
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call go#cmd#autowrite()
|
|
||||||
if a:compile
|
if a:compile
|
||||||
echon "vim-go: " | echohl Identifier | echon "compiling tests ..." | echohl None
|
echon "vim-go: " | echohl Identifier | echon "compiling tests ..." | echohl None
|
||||||
else
|
else
|
||||||
echon "vim-go: " | echohl Identifier | echon "testing ..." | echohl None
|
echon "vim-go: " | echohl Identifier | echon "testing ..." | echohl None
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call go#cmd#autowrite()
|
||||||
redraw
|
redraw
|
||||||
|
|
||||||
|
let command = "go " . join(args, ' ')
|
||||||
|
|
||||||
let out = go#tool#ExecuteInDir(command)
|
let out = go#tool#ExecuteInDir(command)
|
||||||
if v:shell_error
|
if v:shell_error
|
||||||
let errors = go#tool#ParseErrors(split(out, '\n'))
|
let errors = go#tool#ParseErrors(split(out, '\n'))
|
||||||
|
let errors = go#tool#FilterValids(errors)
|
||||||
|
|
||||||
call go#list#Populate(errors)
|
call go#list#Populate(errors)
|
||||||
call go#list#Window(len(errors))
|
call go#list#Window(len(errors))
|
||||||
if !empty(errors) && !a:bang
|
if !empty(errors) && !a:bang
|
||||||
|
|
|
@ -43,6 +43,8 @@ if !exists("g:go_fmt_experimental")
|
||||||
let g:go_fmt_experimental = 0
|
let g:go_fmt_experimental = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let s:got_fmt_error = 0
|
||||||
|
|
||||||
" we have those problems :
|
" we have those problems :
|
||||||
" http://stackoverflow.com/questions/12741977/prevent-vim-from-updating-its-undo-tree
|
" http://stackoverflow.com/questions/12741977/prevent-vim-from-updating-its-undo-tree
|
||||||
" http://stackoverflow.com/questions/18532692/golang-formatter-and-vim-how-to-destroy-history-record?rq=1
|
" http://stackoverflow.com/questions/18532692/golang-formatter-and-vim-how-to-destroy-history-record?rq=1
|
||||||
|
@ -117,9 +119,12 @@ function! go#fmt#Format(withGoimport)
|
||||||
let &fileformat = old_fileformat
|
let &fileformat = old_fileformat
|
||||||
let &syntax = &syntax
|
let &syntax = &syntax
|
||||||
|
|
||||||
" clean up previous location list
|
" clean up previous location list, but only if it's due fmt
|
||||||
call go#list#Clean()
|
if s:got_fmt_error
|
||||||
call go#list#Window()
|
let s:got_fmt_error = 0
|
||||||
|
call go#list#Clean()
|
||||||
|
call go#list#Window()
|
||||||
|
endif
|
||||||
elseif g:go_fmt_fail_silently == 0
|
elseif g:go_fmt_fail_silently == 0
|
||||||
let splitted = split(out, '\n')
|
let splitted = split(out, '\n')
|
||||||
"otherwise get the errors and put them to location list
|
"otherwise get the errors and put them to location list
|
||||||
|
@ -141,6 +146,7 @@ function! go#fmt#Format(withGoimport)
|
||||||
echohl Error | echomsg "Gofmt returned error" | echohl None
|
echohl Error | echomsg "Gofmt returned error" | echohl None
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let s:got_fmt_error = 1
|
||||||
call go#list#Window(len(errors))
|
call go#list#Window(len(errors))
|
||||||
|
|
||||||
" We didn't use the temp file, so clean up
|
" We didn't use the temp file, so clean up
|
||||||
|
|
168
sources_non_forked/vim-go/autoload/go/jobcontrol.vim
Normal file
168
sources_non_forked/vim-go/autoload/go/jobcontrol.vim
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
" s:jobs is a global reference to all jobs started with Spawn() or with the
|
||||||
|
" internal function s:spawn
|
||||||
|
let s:jobs = {}
|
||||||
|
|
||||||
|
" Spawn is a wrapper around s:spawn. It can be executed by other files and
|
||||||
|
" scripts if needed. Desc defines the description for printing the status
|
||||||
|
" during the job execution (useful for statusline integration).
|
||||||
|
function! go#jobcontrol#Spawn(desc, args)
|
||||||
|
" autowrite is not enabled for jobs
|
||||||
|
call go#cmd#autowrite()
|
||||||
|
|
||||||
|
let job = s:spawn(a:desc, a:args)
|
||||||
|
return job.id
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Statusline returns the current status of the job
|
||||||
|
function! go#jobcontrol#Statusline() abort
|
||||||
|
if empty(s:jobs)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
let import_path = go#package#ImportPath(expand('%:p:h'))
|
||||||
|
|
||||||
|
for job in values(s:jobs)
|
||||||
|
if job.importpath != import_path
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if job.state == "SUCCESS"
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return printf("%s ... [%s]", job.desc, job.state)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" spawn spawns a go subcommand with the name and arguments with jobstart. Once
|
||||||
|
" a job is started a reference will be stored inside s:jobs. spawn changes the
|
||||||
|
" GOPATH when g:go_autodetect_gopath is enabled. The job is started inside the
|
||||||
|
" current files folder.
|
||||||
|
function! s:spawn(desc, args)
|
||||||
|
let job = {
|
||||||
|
\ 'desc': a:desc,
|
||||||
|
\ 'winnr': winnr(),
|
||||||
|
\ 'importpath': go#package#ImportPath(expand('%:p:h')),
|
||||||
|
\ 'state': "RUNNING",
|
||||||
|
\ 'stderr' : [],
|
||||||
|
\ 'stdout' : [],
|
||||||
|
\ 'on_stdout': function('s:on_stdout'),
|
||||||
|
\ 'on_stderr': function('s:on_stderr'),
|
||||||
|
\ 'on_exit' : function('s:on_exit'),
|
||||||
|
\ }
|
||||||
|
|
||||||
|
" modify GOPATH if needed
|
||||||
|
let old_gopath = $GOPATH
|
||||||
|
let $GOPATH = go#path#Detect()
|
||||||
|
|
||||||
|
" execute go build in the files directory
|
||||||
|
let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
|
||||||
|
|
||||||
|
" cleanup previous jobs for this file
|
||||||
|
for jb in values(s:jobs)
|
||||||
|
if jb.importpath == job.importpath
|
||||||
|
unlet s:jobs[jb.id]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let dir = getcwd()
|
||||||
|
|
||||||
|
execute cd . fnameescape(expand("%:p:h"))
|
||||||
|
|
||||||
|
" append the subcommand, such as 'build'
|
||||||
|
let argv = ['go'] + a:args
|
||||||
|
|
||||||
|
" run, forrest, run!
|
||||||
|
let id = jobstart(argv, job)
|
||||||
|
let job.id = id
|
||||||
|
let s:jobs[id] = job
|
||||||
|
|
||||||
|
execute cd . fnameescape(dir)
|
||||||
|
|
||||||
|
" restore back GOPATH
|
||||||
|
let $GOPATH = old_gopath
|
||||||
|
|
||||||
|
return job
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" on_exit is the exit handler for jobstart(). It handles cleaning up the job
|
||||||
|
" references and also displaying errors in the quickfix window collected by
|
||||||
|
" on_stderr handler. If there are no errors and a quickfix window is open,
|
||||||
|
" it'll be closed.
|
||||||
|
function! s:on_exit(job_id, data)
|
||||||
|
let std_combined = self.stderr + self.stdout
|
||||||
|
if empty(std_combined)
|
||||||
|
call go#list#Clean()
|
||||||
|
call go#list#Window()
|
||||||
|
|
||||||
|
let self.state = "SUCCESS"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let errors = go#tool#ParseErrors(std_combined)
|
||||||
|
let errors = go#tool#FilterValids(errors)
|
||||||
|
|
||||||
|
if !len(errors)
|
||||||
|
" no errors could be past, just return
|
||||||
|
call go#list#Clean()
|
||||||
|
call go#list#Window()
|
||||||
|
|
||||||
|
let self.state = "SUCCESS"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let self.state = "FAILED"
|
||||||
|
|
||||||
|
" if we are still in the same windows show the list
|
||||||
|
if self.winnr == winnr()
|
||||||
|
call go#list#Populate(errors)
|
||||||
|
call go#list#Window(len(errors))
|
||||||
|
call go#list#JumpToFirst()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" on_stdout is the stdout handler for jobstart(). It collects the output of
|
||||||
|
" stderr and stores them to the jobs internal stdout list.
|
||||||
|
function! s:on_stdout(job_id, data)
|
||||||
|
call extend(self.stdout, a:data)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" on_stderr is the stderr handler for jobstart(). It collects the output of
|
||||||
|
" stderr and stores them to the jobs internal stderr list.
|
||||||
|
function! s:on_stderr(job_id, data)
|
||||||
|
call extend(self.stderr, a:data)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" abort_all aborts all current jobs created with s:spawn()
|
||||||
|
function! s:abort_all()
|
||||||
|
if empty(s:jobs)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
for id in keys(s:jobs)
|
||||||
|
if id > 0
|
||||||
|
silent! call jobstop(id)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let s:jobs = {}
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" abort aborts the job with the given name, where name is the first argument
|
||||||
|
" passed to s:spawn()
|
||||||
|
function! s:abort(path)
|
||||||
|
if empty(s:jobs)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
for job in values(s:jobs)
|
||||||
|
if job.importpath == path && job.id > 0
|
||||||
|
silent! call jobstop(job.id)
|
||||||
|
unlet s:jobs['job.id']
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim:ts=2:sw=2:et
|
|
@ -36,6 +36,10 @@ function! go#list#Populate(items)
|
||||||
call setloclist(0, a:items, 'r')
|
call setloclist(0, a:items, 'r')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! go#list#PopulateWin(winnr, items)
|
||||||
|
call setloclist(a:winnr, a:items, 'r')
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Parse parses the given items based on the specified errorformat nad
|
" Parse parses the given items based on the specified errorformat nad
|
||||||
" populates the location list.
|
" populates the location list.
|
||||||
function! go#list#ParseFormat(errformat, items)
|
function! go#list#ParseFormat(errformat, items)
|
||||||
|
|
124
sources_non_forked/vim-go/autoload/go/term.vim
Normal file
124
sources_non_forked/vim-go/autoload/go/term.vim
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
if has('nvim') && !exists("g:go_term_mode")
|
||||||
|
let g:go_term_mode = 'vsplit'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" s:jobs is a global reference to all jobs started with new()
|
||||||
|
let s:jobs = {}
|
||||||
|
|
||||||
|
" new creates a new terminal with the given command. Mode is set based on the
|
||||||
|
" global variable g:go_term_mode, which is by default set to :vsplit
|
||||||
|
function! go#term#new(cmd)
|
||||||
|
call go#term#newmode(a:cmd, g:go_term_mode)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" new creates a new terminal with the given command and window mode.
|
||||||
|
function! go#term#newmode(cmd, mode)
|
||||||
|
let mode = a:mode
|
||||||
|
if empty(mode)
|
||||||
|
let mode = g:go_term_mode
|
||||||
|
endif
|
||||||
|
|
||||||
|
" modify GOPATH if needed
|
||||||
|
let old_gopath = $GOPATH
|
||||||
|
let $GOPATH = go#path#Detect()
|
||||||
|
|
||||||
|
" execute go build in the files directory
|
||||||
|
let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
|
||||||
|
let dir = getcwd()
|
||||||
|
|
||||||
|
execute cd . fnameescape(expand("%:p:h"))
|
||||||
|
|
||||||
|
execute mode.' __go_term__'
|
||||||
|
|
||||||
|
setlocal filetype=goterm
|
||||||
|
setlocal bufhidden=delete
|
||||||
|
setlocal winfixheight
|
||||||
|
setlocal noswapfile
|
||||||
|
setlocal nobuflisted
|
||||||
|
|
||||||
|
let job = {
|
||||||
|
\ 'stderr' : [],
|
||||||
|
\ 'stdout' : [],
|
||||||
|
\ 'on_stdout': function('s:on_stdout'),
|
||||||
|
\ 'on_stderr': function('s:on_stderr'),
|
||||||
|
\ 'on_exit' : function('s:on_exit'),
|
||||||
|
\ }
|
||||||
|
|
||||||
|
let id = termopen(a:cmd, job)
|
||||||
|
|
||||||
|
execute cd . fnameescape(dir)
|
||||||
|
|
||||||
|
" restore back GOPATH
|
||||||
|
let $GOPATH = old_gopath
|
||||||
|
|
||||||
|
let job.id = id
|
||||||
|
startinsert
|
||||||
|
|
||||||
|
" resize new term if needed.
|
||||||
|
let height = get(g:, 'go_term_height', winheight(0))
|
||||||
|
let width = get(g:, 'go_term_width', winwidth(0))
|
||||||
|
|
||||||
|
" we are careful how to resize. for example it's vertical we don't change
|
||||||
|
" the height. The below command resizes the buffer
|
||||||
|
if a:mode == "split"
|
||||||
|
exe 'resize ' . height
|
||||||
|
elseif a:mode == "vertical"
|
||||||
|
exe 'vertical resize ' . width
|
||||||
|
endif
|
||||||
|
|
||||||
|
" we also need to resize the pty, so there you go...
|
||||||
|
call jobresize(id, width, height)
|
||||||
|
|
||||||
|
let s:jobs[id] = job
|
||||||
|
return id
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:on_stdout(job_id, data)
|
||||||
|
if !has_key(s:jobs, a:job_id)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let job = s:jobs[a:job_id]
|
||||||
|
|
||||||
|
call extend(job.stdout, a:data)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:on_stderr(job_id, data)
|
||||||
|
if !has_key(s:jobs, a:job_id)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let job = s:jobs[a:job_id]
|
||||||
|
|
||||||
|
call extend(job.stderr, a:data)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:on_exit(job_id, data)
|
||||||
|
if !has_key(s:jobs, a:job_id)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let job = s:jobs[a:job_id]
|
||||||
|
|
||||||
|
" usually there is always output so never branch into this clause
|
||||||
|
if empty(job.stdout)
|
||||||
|
call go#list#Clean()
|
||||||
|
call go#list#Window()
|
||||||
|
else
|
||||||
|
let errors = go#tool#ParseErrors(job.stdout)
|
||||||
|
let errors = go#tool#FilterValids(errors)
|
||||||
|
if !empty(errors)
|
||||||
|
" close terminal we don't need it
|
||||||
|
close
|
||||||
|
|
||||||
|
call go#list#Populate(errors)
|
||||||
|
call go#list#Window(len(errors))
|
||||||
|
call go#list#JumpToFirst()
|
||||||
|
else
|
||||||
|
call go#list#Clean()
|
||||||
|
call go#list#Window()
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
unlet s:jobs[a:job_id]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim:ts=4:sw=4:et
|
|
@ -50,9 +50,14 @@ function! go#tool#ParseErrors(lines)
|
||||||
if !empty(fatalerrors)
|
if !empty(fatalerrors)
|
||||||
call add(errors, {"text": fatalerrors[1]})
|
call add(errors, {"text": fatalerrors[1]})
|
||||||
elseif !empty(tokens)
|
elseif !empty(tokens)
|
||||||
call add(errors, {"filename" : fnamemodify(tokens[1], ':p'),
|
" strip endlines of form ^M
|
||||||
\"lnum": tokens[2],
|
let out=substitute(tokens[3], '\r$', '', '')
|
||||||
\"text": tokens[3]})
|
|
||||||
|
call add(errors, {
|
||||||
|
\ "filename" : fnamemodify(tokens[1], ':p'),
|
||||||
|
\ "lnum" : tokens[2],
|
||||||
|
\ "text" : out,
|
||||||
|
\ })
|
||||||
elseif !empty(errors)
|
elseif !empty(errors)
|
||||||
" Preserve indented lines.
|
" Preserve indented lines.
|
||||||
" This comes up especially with multi-line test output.
|
" This comes up especially with multi-line test output.
|
||||||
|
@ -65,6 +70,42 @@ function! go#tool#ParseErrors(lines)
|
||||||
return errors
|
return errors
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
"FilterValids filters the given items with only items that have a valid
|
||||||
|
"filename. Any non valid filename is filtered out.
|
||||||
|
function! go#tool#FilterValids(items)
|
||||||
|
" Remove any nonvalid filename from the location list to avoid opening an
|
||||||
|
" empty buffer. See https://github.com/fatih/vim-go/issues/287 for
|
||||||
|
" details.
|
||||||
|
let filtered = []
|
||||||
|
let is_readable = {}
|
||||||
|
|
||||||
|
for item in a:items
|
||||||
|
if has_key(item, 'bufnr')
|
||||||
|
let filename = bufname(item.bufnr)
|
||||||
|
elseif has_key(item, 'filename')
|
||||||
|
let filename = item.filename
|
||||||
|
else
|
||||||
|
" nothing to do, add item back to the list
|
||||||
|
call add(filtered, item)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !has_key(is_readable, filename)
|
||||||
|
let is_readable[filename] = filereadable(filename)
|
||||||
|
endif
|
||||||
|
if is_readable[filename]
|
||||||
|
call add(filtered, item)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
for k in keys(filter(is_readable, '!v:val'))
|
||||||
|
echo "vim-go: " | echohl Identifier | echon "[run] Dropped " | echohl Constant | echon '"' . k . '"'
|
||||||
|
echohl Identifier | echon " from location list (nonvalid filename)" | echohl None
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return filtered
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! go#tool#ExecuteInDir(cmd) abort
|
function! go#tool#ExecuteInDir(cmd) abort
|
||||||
let old_gopath = $GOPATH
|
let old_gopath = $GOPATH
|
||||||
let $GOPATH = go#path#Detect()
|
let $GOPATH = go#path#Detect()
|
||||||
|
|
|
@ -53,7 +53,37 @@ endfunction
|
||||||
function! go#util#Shelljoin(arglist, ...)
|
function! go#util#Shelljoin(arglist, ...)
|
||||||
if a:0
|
if a:0
|
||||||
return join(map(copy(a:arglist), 'shellescape(v:val, ' . a:1 . ')'), ' ')
|
return join(map(copy(a:arglist), 'shellescape(v:val, ' . a:1 . ')'), ' ')
|
||||||
else
|
|
||||||
return join(map(copy(a:arglist), 'shellescape(v:val)'), ' ')
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
return join(map(copy(a:arglist), 'shellescape(v:val)'), ' ')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Shelljoin returns a shell-safe representation of the items in the given
|
||||||
|
" arglist. The {special} argument of shellescape() may optionally be passed.
|
||||||
|
function! go#util#Shelllist(arglist, ...)
|
||||||
|
if a:0
|
||||||
|
return map(copy(a:arglist), 'shellescape(v:val, ' . a:1 . ')')
|
||||||
|
endif
|
||||||
|
return map(copy(a:arglist), 'shellescape(v:val)')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" TODO(arslan): I couldn't parameterize the highlight types. Check if we can
|
||||||
|
" simplify the following functions
|
||||||
|
|
||||||
|
function! go#util#EchoSuccess(msg)
|
||||||
|
redraws! | echon "vim-go: " | echohl Function | echon a:msg | echohl None
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#util#EchoError(msg)
|
||||||
|
redraws! | echon "vim-go: " | echohl ErrorMsg | echon a:msg | echohl None
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#util#EchoWarning(msg)
|
||||||
|
redraws! | echon "vim-go: " | echohl WarningMsg | echon a:msg | echohl None
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! go#util#EchoProgress(msg)
|
||||||
|
redraws! | echon "vim-go: " | echohl Identifier | echon a:msg | echohl None
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim:ts=4:sw=4:et
|
||||||
|
|
|
@ -11,6 +11,13 @@ endif
|
||||||
|
|
||||||
" Some handy plug mappings
|
" Some handy plug mappings
|
||||||
nnoremap <silent> <Plug>(go-run) :<C-u>call go#cmd#Run(!g:go_jump_to_error, '%')<CR>
|
nnoremap <silent> <Plug>(go-run) :<C-u>call go#cmd#Run(!g:go_jump_to_error, '%')<CR>
|
||||||
|
|
||||||
|
if has("nvim")
|
||||||
|
nnoremap <silent> <Plug>(go-run-vertical) :<C-u>call go#cmd#RunTerm('vsplit')<CR>
|
||||||
|
nnoremap <silent> <Plug>(go-run-split) :<C-u>call go#cmd#RunTerm('split')<CR>
|
||||||
|
nnoremap <silent> <Plug>(go-run-tab) :<C-u>call go#cmd#RunTerm('tab')<CR>
|
||||||
|
endif
|
||||||
|
|
||||||
nnoremap <silent> <Plug>(go-build) :<C-u>call go#cmd#Build(!g:go_jump_to_error)<CR>
|
nnoremap <silent> <Plug>(go-build) :<C-u>call go#cmd#Build(!g:go_jump_to_error)<CR>
|
||||||
nnoremap <silent> <Plug>(go-generate) :<C-u>call go#cmd#Generate(!g:go_jump_to_error)<CR>
|
nnoremap <silent> <Plug>(go-generate) :<C-u>call go#cmd#Generate(!g:go_jump_to_error)<CR>
|
||||||
nnoremap <silent> <Plug>(go-install) :<C-u>call go#cmd#Install(!g:go_jump_to_error)<CR>
|
nnoremap <silent> <Plug>(go-install) :<C-u>call go#cmd#Install(!g:go_jump_to_error)<CR>
|
||||||
|
|
|
@ -137,7 +137,6 @@ augroup vim-go
|
||||||
if get(g:, "go_metalinter_autosave", 0)
|
if get(g:, "go_metalinter_autosave", 0)
|
||||||
autocmd BufWritePost *.go call go#lint#Gometa(1)
|
autocmd BufWritePost *.go call go#lint#Gometa(1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,8 @@ snippet mdoc
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
${0}
|
${0}
|
||||||
"""
|
"""
|
||||||
|
snippet mdocf
|
||||||
|
@moduledoc false
|
||||||
snippet rec
|
snippet rec
|
||||||
receive do
|
receive do
|
||||||
${1} ->
|
${1} ->
|
||||||
|
|
|
@ -16,6 +16,10 @@ snippet =>
|
||||||
(${0}) => {
|
(${0}) => {
|
||||||
${1}
|
${1}
|
||||||
}
|
}
|
||||||
|
snippet af
|
||||||
|
(${0}) => {
|
||||||
|
${1}
|
||||||
|
}
|
||||||
snippet sym
|
snippet sym
|
||||||
const ${0} = Symbol('${1}');
|
const ${0} = Symbol('${1}');
|
||||||
snippet ed
|
snippet ed
|
||||||
|
|
Loading…
Reference in a new issue