diff options
Diffstat (limited to 'settings/rust-analyzer.vim')
-rw-r--r-- | settings/rust-analyzer.vim | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/settings/rust-analyzer.vim b/settings/rust-analyzer.vim index 993add9..223b4d9 100644 --- a/settings/rust-analyzer.vim +++ b/settings/rust-analyzer.vim @@ -1,4 +1,4 @@ -augroup vimlsp_settings_rust-analyzer +augroup vimlsp_settings_rust_analyzer au! LspRegisterServer { \ 'name': 'rust-analyzer', @@ -11,4 +11,31 @@ augroup vimlsp_settings_rust-analyzer \ 'workspace_config': lsp_settings#get('rust-analyzer', 'workspace_config', {}), \ 'semantic_highlight': lsp_settings#get('rust-analyzer', 'semantic_highlight', {}), \ } + autocmd User lsp_setup call s:register_command() augroup END + +function! s:rust_analyzer_apply_source_change(context) + let l:command = get(a:context, 'command', {}) + + let l:arguments = get(l:command, 'arguments', []) + let l:argument = get(l:arguments, 0, {}) + + let l:workspace_edit = get(l:argument, 'workspaceEdit', {}) + if !empty(l:workspace_edit) + call lsp#utils#workspace_edit#apply_workspace_edit(l:workspace_edit) + endif + + let l:cursor_position = get(l:argument, 'cursorPosition', {}) + if !empty(l:cursor_position) + call cursor(lsp#utils#position#lsp_to_vim('%', l:cursor_position)) + endif +endfunction + +function! s:register_command() + augroup vimlsp_settings_rust_analyzer + au! + augroup END + if exists('*lsp#register_command') + call lsp#register_command('rust-analyzer.applySourceChange', function('s:rust_analyzer_apply_source_change')) + endif +endfunction |