Files
vim-lsp-mirror/autoload/lsp/internal/show_message.vim
Linda_pp 800c878209 Support show message notification by handling window/showMessage response (#1120)
* support window/showMessage

* describe g:lsp_show_message_log_level in documentation

* add tests for window/showMessage support

Co-authored-by: mattn <mattn.jp@gmail.com>
2021-03-28 21:58:20 +09:00

75 lines
2.0 KiB
VimL

let s:ErrorType = 1
let s:WarningType = 2
let s:InfoType = 3
let s:LogType = 4
function! lsp#internal#show_message#_enable() abort
if g:lsp_show_message_log_level ==# 'none' | return | endif
let s:Dispose = lsp#callbag#pipe(
\ lsp#stream(),
\ lsp#callbag#filter({x->
\ g:lsp_show_message_log_level !=# 'none' &&
\ has_key(x, 'response') && has_key(x['response'], 'method')
\ && x['response']['method'] ==# 'window/showMessage'
\ }),
\ lsp#callbag#tap({x->s:handle_show_message(x['server'], x['response']['params'])}),
\ lsp#callbag#subscribe({ 'error': function('s:on_error') }),
\ )
endfunction
function! lsp#internal#show_message#_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 error', a:e)
if exists('s:Dispose')
call s:Dispose()
unlet s:Dispose
endif
endfunction
function! s:handle_show_message(server, params) abort
let l:level = s:name_to_level(g:lsp_show_message_log_level)
let l:type = a:params['type']
if l:level < l:type
return
endif
let l:message = a:params['message']
try
if l:type == s:ErrorType
echohl ErrorMsg
elseif l:type == s:WarningType
echohl WarningMsg
endif
echom printf('%s: %s: %s', a:server, s:type_to_name(l:type), l:message)
finally
echohl None
endtry
endfunction
function! s:name_to_level(name) abort
if a:name ==# 'none'
return 0
elseif a:name ==# 'error'
return s:ErrorType
elseif a:name ==# 'warn' || a:name ==# 'warning'
return s:WarningType
elseif a:name ==# 'info'
return s:InfoType
elseif a:name ==# 'log'
return s:LogType
else
return 0
endif
endfunction
function! s:type_to_name(type) abort
return get(['unknown', 'error', 'warning', 'info', 'log'], a:type, 'unknown')
endfunction