Skip to content

Commit eec6c61

Browse files
committed
Add :OmniSharpRepeatCodeAction command
1 parent bca5e80 commit eec6c61

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

autoload/OmniSharp/actions/codeactions.vim

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ function! s:StdioGet(mode, Callback) abort
4242
\ 'ResponseHandler': function('s:StdioGetRH', [a:Callback]),
4343
\ 'SavePosition': 1
4444
\}
45+
call s:PrepareParameters(opts, a:mode)
46+
call OmniSharp#stdio#Request('/v2/getcodeactions', opts)
47+
endfunction
48+
49+
function! s:PrepareParameters(opts, mode) abort
4550
if a:mode ==# 'visual'
4651
let start = getpos("'<")
4752
let end = getpos("'>")
@@ -63,13 +68,12 @@ function! s:StdioGet(mode, Callback) abort
6368
\ }
6469
\ }
6570
\}
66-
let opts.Parameters = s:codeActionParameters
71+
let a:opts.Parameters = s:codeActionParameters
6772
else
6873
if exists('s:codeActionParameters')
6974
unlet s:codeActionParameters
7075
endif
7176
endif
72-
call OmniSharp#stdio#Request('/v2/getcodeactions', opts)
7377
endfunction
7478

7579
function! s:StdioGetRH(Callback, response) abort
@@ -156,16 +160,35 @@ function! s:CBGetCodeActions(mode, actions) abort
156160
endfunction
157161

158162

163+
function! OmniSharp#actions#codeactions#Repeat(mode) abort
164+
if !g:OmniSharp_server_stdio
165+
echomsg 'This functionality is only available with the stdio server'
166+
return
167+
endif
168+
if !exists('s:lastCodeActionIdentifier')
169+
echomsg 'There is no last code action to repeat'
170+
return
171+
endif
172+
call s:PrepareParameters({}, a:mode)
173+
let RH = function('OmniSharp#buffer#PerformChanges', [{}])
174+
call s:RunCodeAction(s:lastCodeActionIdentifier, 1, RH)
175+
endfunction
176+
159177
function! OmniSharp#actions#codeactions#Run(action, ...) abort
160178
let RH = function('OmniSharp#buffer#PerformChanges', [a:0 ? a:1 : {}])
179+
let s:lastCodeActionIdentifier = a:action.Identifier
180+
call s:RunCodeAction(a:action.Identifier, 0, RH)
181+
endfunction
182+
183+
function! s:RunCodeAction(identifier, repeating, ResponseHandler) abort
161184
let opts = {
162-
\ 'ResponseHandler': RH,
185+
\ 'ResponseHandler': a:ResponseHandler,
163186
\ 'Parameters': {
164-
\ 'Identifier': a:action.Identifier,
187+
\ 'Identifier': a:identifier,
165188
\ 'WantsTextChanges': 1,
166189
\ 'WantsAllCodeActionOperations': 1
167190
\ },
168-
\ 'UsePreviousPosition': 1
191+
\ 'UsePreviousPosition': !a:repeating
169192
\}
170193
if exists('s:codeActionParameters')
171194
call extend(opts.Parameters, s:codeActionParameters, 'force')

autoload/OmniSharp/stdio.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ function! s:HandleServerEvent(job, res) abort
9797
endfunction
9898

9999
function! OmniSharp#stdio#Request(command, opts) abort
100-
if has_key(a:opts, 'UsePreviousPosition')
100+
if get(a:opts, 'UsePreviousPosition', 0)
101101
let [bufnr, lnum, cnum] = s:lastPosition
102102
elseif has_key(a:opts, 'BufNum') && a:opts.BufNum != bufnr('%')
103103
let bufnr = a:opts.BufNum

ftplugin/cs/OmniSharp.vim

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ command! -buffer -bar OmniSharpPreviewDefinition call OmniSharp#actions#definiti
4545
command! -buffer -bar OmniSharpPreviewImplementation call OmniSharp#actions#implementations#Preview()
4646
command! -buffer -bar OmniSharpRename call OmniSharp#actions#rename#Prompt()
4747
command! -buffer -nargs=1 OmniSharpRenameTo call OmniSharp#actions#rename#To(<q-args>)
48+
command! -buffer -bar OmniSharpRepeatCodeAction call OmniSharp#actions#codeactions#Repeat('normal')
4849
command! -buffer -bar OmniSharpRunTest call OmniSharp#actions#test#Run()
4950
command! -buffer -bar -nargs=* -complete=file OmniSharpRunTestsInFile call OmniSharp#actions#test#RunInFile(<f-args>)
5051
command! -buffer -bar OmniSharpSignatureHelp call OmniSharp#actions#signature#SignatureHelp()
@@ -60,6 +61,8 @@ nnoremap <buffer> <Plug>(omnisharp_find_usages) :OmniSharpFindUsages<CR>
6061
nnoremap <buffer> <Plug>(omnisharp_fix_usings) :OmniSharpFixUsings<CR>
6162
nnoremap <buffer> <Plug>(omnisharp_code_actions) :OmniSharpGetCodeActions<CR>
6263
xnoremap <buffer> <Plug>(omnisharp_code_actions) :call OmniSharp#actions#codeactions#Get('visual')<CR>
64+
nnoremap <buffer> <Plug>(omnisharp_code_action_repeat) :OmniSharpRepeatCodeAction<CR>
65+
xnoremap <buffer> <Plug>(omnisharp_code_action_repeat) :call OmniSharp#actions#codeactions#Repeat('visual')<CR>
6366
nnoremap <buffer> <Plug>(omnisharp_global_code_check) :OmniSharpGlobalCodeCheck<CR>
6467
nnoremap <buffer> <Plug>(omnisharp_go_to_definition) :OmniSharpGotoDefinition<CR>
6568
nnoremap <buffer> <Plug>(omnisharp_highlight) :OmniSharpHighlight<CR>
@@ -117,6 +120,7 @@ let b:undo_ftplugin .= '
117120
\| delcommand OmniSharpRenameTo
118121
\| delcommand OmniSharpRestartAllServers
119122
\| delcommand OmniSharpRestartServer
123+
\| delcommand OmniSharpRepeatCodeAction
120124
\| delcommand OmniSharpRunTest
121125
\| delcommand OmniSharpRunTestsInFile
122126
\| delcommand OmniSharpSignatureHelp

0 commit comments

Comments
 (0)