Skip to content

Commit

Permalink
handle multiple code action commands
Browse files Browse the repository at this point in the history
Handle multiple code action commands that are being returned when trying
to use refactor.rewrite for fillstruct when the struct being filled
results in gopls providing that commannd and a command to split the line
into multiple lines.
  • Loading branch information
bhcleek committed Aug 18, 2024
1 parent a64d097 commit 0f23936
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
17 changes: 11 additions & 6 deletions autoload/go/lsp.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
2 changes: 2 additions & 0 deletions scripts/lint
Original file line number Diff line number Diff line change
Expand Up @@ -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" \
Expand All @@ -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
Expand Down

0 comments on commit 0f23936

Please sign in to comment.