Nicer syntax highlighting for hover (#441)

* Implement syntax highlighting for hover

* Fix signatureHelp
This commit is contained in:
Thomas Faingnaert
2019-09-08 20:26:22 +02:00
committed by Prabir Shrestha
parent 5fafaa3d72
commit d7e644c2a7
8 changed files with 91 additions and 10 deletions

View File

@@ -284,7 +284,7 @@ function! s:align_preview(options) abort
endif
endfunction
function! lsp#ui#vim#output#preview(data, options) abort
function! lsp#ui#vim#output#preview(server, data, options) abort
if s:winid && type(s:preview_data) == type(a:data)
\ && s:preview_data == a:data
\ && type(g:lsp_preview_doubletap) == 3
@@ -302,12 +302,22 @@ function! lsp#ui#vim#output#preview(data, options) abort
let s:preview_data = a:data
let l:lines = []
let l:ft = s:append(a:data, l:lines)
let l:syntax_lines = []
let l:ft = s:append(a:data, l:lines, l:syntax_lines)
if has_key(a:options, 'filetype')
let l:ft = a:options['filetype']
endif
let l:server_info = lsp#get_server_info(a:server)
try
let l:do_conceal = l:server_info['config']['hover_conceal']
catch
let l:do_conceal = g:lsp_hover_conceal
endtry
call setbufvar(winbufnr(s:winid), 'lsp_syntax_highlights', l:syntax_lines)
call setbufvar(winbufnr(s:winid), 'lsp_do_conceal', l:do_conceal)
call s:setcontent(l:lines, l:ft)
" Get size information while still having the buffer active
@@ -361,10 +371,10 @@ function! lsp#ui#vim#output#preview(data, options) abort
return ''
endfunction
function! s:append(data, lines) abort
function! s:append(data, lines, syntax_lines) abort
if type(a:data) == type([])
for l:entry in a:data
call s:append(entry, a:lines)
call s:append(entry, a:lines, a:syntax_lines)
endfor
return 'markdown'
@@ -373,9 +383,15 @@ function! s:append(data, lines) abort
return 'markdown'
elseif type(a:data) == type({}) && has_key(a:data, 'language')
call add(a:lines, '```'.a:data.language)
call extend(a:lines, split(a:data.value, '\n'))
call add(a:lines, '```')
let l:new_lines = split(a:data.value, '\n')
let l:i = 1
while l:i <= len(l:new_lines)
call add(a:syntax_lines, { 'line': len(a:lines) + l:i, 'language': a:data.language })
let l:i += 1
endwhile
call extend(a:lines, l:new_lines)
return 'markdown'
elseif type(a:data) == type({}) && has_key(a:data, 'kind')