X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/5a4872f466ebd76ddd532bdf2798554421c53df4..fe3919e725e156d751069662d11e38f7b4791de1:/.vim/bundle/vim-lsp/autoload/lsp/internal/show_message_request.vim diff --git a/.vim/bundle/vim-lsp/autoload/lsp/internal/show_message_request.vim b/.vim/bundle/vim-lsp/autoload/lsp/internal/show_message_request.vim new file mode 100644 index 00000000..2ed6b672 --- /dev/null +++ b/.vim/bundle/vim-lsp/autoload/lsp/internal/show_message_request.vim @@ -0,0 +1,58 @@ +function! lsp#internal#show_message_request#_enable() abort + if !g:lsp_show_message_request_enabled | return | endif + let s:Dispose = lsp#callbag#pipe( + \ lsp#stream(), + \ lsp#callbag#filter({x-> + \ g:lsp_show_message_request_enabled && + \ has_key(x, 'request') && !has_key(x, 'response') && + \ has_key(x['request'], 'method') && x['request']['method'] ==# 'window/showMessageRequest' + \ }), + \ lsp#callbag#map({x->s:show_message_request(x['server'], x['request'])}), + \ lsp#callbag#map({x->s:send_message_response(x['server'], x['request'], x['action'])}), + \ lsp#callbag#flatten(), + \ lsp#callbag#materialize(), + \ lsp#callbag#subscribe({ 'error': function('s:on_error') }), + \ ) +endfunction + +function! lsp#internal#show_message_request#_disable() abort + if exists('s:Dispose') + call s:Dispose() + unlet s:Dispose + endif +endfunction + +function! s:on_error(e) abort + call lsp#log('lsp#internal#show_message_request error', a:e) + if exists('s:Dispose') + call s:Dispose() + unlet s:Dispose + endif +endfunction + +function! s:show_message_request(server_name, request) abort + let l:params = a:request['params'] + + let l:selected_action = v:null + + if has_key(l:params, 'actions') && !empty(l:params['actions']) + let l:options = map(copy(l:params['actions']), {i, action -> + \ printf('%d - [%s] %s', i + 1, a:server_name, action['title']) + \ }) + let l:index = inputlist([l:params['message']] + l:options) + if l:index > 0 && l:index <= len(l:index) + let l:selected_action = l:params['actions'][l:index - 1] + endif + else + echom l:params['message'] + endif + + return { 'server': a:server_name, 'request': a:request, 'action': l:selected_action } +endfunction + +function! s:send_message_response(server_name, request, action) abort + return lsp#request(a:server_name, { + \ 'id': a:request['id'], + \ 'result': a:action + \}) +endfunction