From 3dc3fa0d8cda00202d1c2162cf6d93789822e7d6 Mon Sep 17 00:00:00 2001 From: Paul Sbarra Date: Fri, 23 Sep 2011 09:38:10 +1000 Subject: [PATCH] vim: Send GoFmt errors to a location list R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/5043046 --- misc/vim/ftplugin/go/fmt.vim | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/misc/vim/ftplugin/go/fmt.vim b/misc/vim/ftplugin/go/fmt.vim index a299dfcee7d..0ee44cd59ef 100644 --- a/misc/vim/ftplugin/go/fmt.vim +++ b/misc/vim/ftplugin/go/fmt.vim @@ -17,12 +17,26 @@ command! -buffer Fmt call s:GoFormat() function! s:GoFormat() let view = winsaveview() - %!gofmt + silent %!gofmt if v:shell_error - %| " output errors returned by gofmt - " TODO(dchest): perhaps, errors should go to quickfix + 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 - echohl Error | echomsg "Gofmt returned error" | echohl None + if !empty(errors) + call setloclist(0, errors, 'r') + endif + echohl Error | echomsg "Gofmt returned error" | echohl None endif call winrestview(view) endfunction