diff --git a/autoload/go/lsp.vim b/autoload/go/lsp.vim index c76375801d..4ce354007f 100644 --- a/autoload/go/lsp.vim +++ b/autoload/go/lsp.vim @@ -1639,7 +1639,7 @@ function! go#lsp#Imports() abort let l:lsp = s:lspfactory.get() let l:state = s:newHandlerState('') - let l:handler = go#promise#New(function('s:handleCodeAction', ['source.organizeImports', ''], l:state), 10000, '') + let l:handler = go#promise#New(function('s:handleCodeAction', ['source.organizeImports', '', ''], l:state), 10000, '') let l:state.handleResult = l:handler.wrapper let l:state.error = l:handler.wrapper let l:state.handleError = function('s:handleCodeActionError', [l:fname], l:state) @@ -1663,7 +1663,7 @@ function! go#lsp#FillStruct() abort let l:lsp = s:lspfactory.get() let l:state = s:newHandlerState('') - let l:handler = go#promise#New(function('s:handleCodeAction', ['refactor.rewrite', 'apply_fix'], l:state), 10000, '') + let l:handler = go#promise#New(function('s:handleCodeAction', ['refactor.rewrite', 'apply_fix', 'fillstruct'], l:state), 10000, '') let l:state.handleResult = l:handler.wrapper let l:state.error = l:handler.wrapper let l:state.handleError = function('s:handleCodeActionError', [l:fname], l:state) @@ -1689,7 +1689,7 @@ function! go#lsp#Extract(line1, line2) abort let l:lsp = s:lspfactory.get() let l:state = s:newHandlerState('') - let l:handler = go#promise#New(function('s:handleCodeAction', ['refactor.extract', 'apply_fix'], l:state), 10000, '') + let l:handler = go#promise#New(function('s:handleCodeAction', ['refactor.extract', 'apply_fix', ''], l:state), 10000, '') let l:state.handleResult = l:handler.wrapper let l:state.error = l:handler.wrapper let l:state.handleError = function('s:handleCodeActionError', [l:fname], l:state) @@ -1818,7 +1818,7 @@ function! s:handleFormat(msg) abort dict call s:applyTextEdits(bufnr(''), a:msg) endfunction -function! s:handleCodeAction(kind, cmd, msg) abort dict +function! s:handleCodeAction(kind, cmd, fix, msg) abort dict if type(a:msg) is type('') call self.handleError(a:msg) return @@ -1829,14 +1829,19 @@ function! s:handleCodeAction(kind, cmd, msg) abort dict endif for l:item in a:msg - if get(l:item, 'kind', '') is a:kind + " TODO(bc): always pass in exactly the right kind and remove the fix + " paramter entirely after + " https://github.com/golang/go/issues/68791 is merged and released. + if get(l:item, 'kind', '') is a:kind || l:item.kind is printf('%s.%s', a:kind, a:fix) if has_key(l:item, 'disabled') && get(l:item.disabled, 'reason', '') isnot '' call go#util#EchoWarning(printf('code action is disabled: %s', l:item.disabled.reason)) continue endif if has_key(l:item, 'command') - if has_key(l:item.command, 'command') && (l:item.command.command is a:cmd || l:item.command.command is printf('gopls.%s', a:cmd)) + if has_key(l:item.command, 'command') && + (l:item.command.command is a:cmd || + (l:item.command.command is printf('gopls.%s', a:cmd) && (a:fix is '' || (has_key(l:item.command.arguments, 'Fix') && a:fix == l:item.command.arguments.Fix)))) call s:executeCommand(l:item.command.command, l:item.command.arguments) continue endif diff --git a/scripts/lint b/scripts/lint index 924bb96e8d..755db0775d 100755 --- a/scripts/lint +++ b/scripts/lint @@ -47,6 +47,7 @@ fi ### Run vim-vimlint ################### printf "Running vim-vimlint ... " +set +e lint=$(sh "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlint/bin/vimlint.sh" \ -p "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlparser" \ -l "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlint" \ @@ -56,6 +57,7 @@ lint=$(sh "$vimdir/share/vim/vimgo/pack/vim-go/start/vim-vimlint/bin/vimlint.sh" "$vimgodir" \ 2>&1) result="$?" +set -e if [ "$result" -eq "2" ]; then echo "$lint" echo