X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/5a4872f466ebd76ddd532bdf2798554421c53df4..fe3919e725e156d751069662d11e38f7b4791de1:/.vim/bundle/vim-lsp/autoload/lsp/ui/vim/execute_command.vim diff --git a/.vim/bundle/vim-lsp/autoload/lsp/ui/vim/execute_command.vim b/.vim/bundle/vim-lsp/autoload/lsp/ui/vim/execute_command.vim new file mode 100644 index 00000000..107b94c6 --- /dev/null +++ b/.vim/bundle/vim-lsp/autoload/lsp/ui/vim/execute_command.vim @@ -0,0 +1,64 @@ +let s:commands = {} + +" +" @param {name} = string +" @param {callback} = funcref +" +function! lsp#ui#vim#execute_command#_register(command_name, callback) abort + if has_key(s:commands, a:command_name) + throw printf('lsp#ui#vim#execute_command#_register_command: %s already registered.', a:command_name) + endif + + let s:commands[a:command_name] = a:callback +endfunction + +" +" TODO: This method does not handle any return value. +" +function! lsp#ui#vim#execute_command#_execute(params) abort + let l:command_name = a:params['command_name'] + let l:command_args = get(a:params, 'command_args', v:null) + let l:server_name = get(a:params, 'server_name', '') + let l:bufnr = get(a:params, 'bufnr', -1) + let l:sync = get(a:params, 'sync', v:false) + + " create command. + let l:command = { 'command': l:command_name } + if l:command_args isnot v:null + let l:command['arguments'] = l:command_args + endif + + " execute command on local. + if has_key(s:commands, l:command_name) + try + call s:commands[l:command_name]({ + \ 'bufnr': l:bufnr, + \ 'server_name': l:server_name, + \ 'command': l:command, + \ }) + catch /.*/ + call lsp#utils#error(printf('Execute command failed: %s', string(a:params))) + endtry + return + endif + + " execute command on server. + if !empty(l:server_name) + call lsp#send_request(l:server_name, { + \ 'method': 'workspace/executeCommand', + \ 'params': l:command, + \ 'sync': l:sync, + \ 'on_notification': function('s:handle_execute_command', [l:server_name, l:command]), + \ }) + endif +endfunction + +" +" handle workspace/executeCommand response +" +function! s:handle_execute_command(server_name, command, data) abort + if lsp#client#is_error(a:data['response']) + call lsp#utils#error('Execute command failed on ' . a:server_name . ': ' . string(a:command) . ' -> ' . string(a:data)) + endif +endfunction +