Skip to content

Commit 322dad2

Browse files
authored
Merge branch 'master' into fix-preview
2 parents 39a0840 + 80ec75e commit 322dad2

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

autoload/lsp.vim

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ function! lsp#get_server_info(server_name) abort
8585
return s:servers[a:server_name]['server_info']
8686
endfunction
8787

88+
function! lsp#get_server_root_uri(server_name) abort
89+
return get(s:servers[a:server_name]['server_info'], '_root_uri_resolved', '')
90+
endfunction
91+
8892
function! lsp#get_server_capabilities(server_name) abort
8993
let l:server = s:servers[a:server_name]
9094
return has_key(l:server, 'init_result') ? l:server['init_result']['result']['capabilities'] : {}
@@ -209,6 +213,12 @@ function! s:on_text_document_did_open() abort
209213
if getbufvar(l:buf, '&buftype') ==# 'terminal' | return | endif
210214
if getcmdwintype() !=# '' | return | endif
211215
call lsp#log('s:on_text_document_did_open()', l:buf, &filetype, getcwd(), lsp#utils#get_buffer_uri(l:buf))
216+
217+
" Some language server notify diagnostics to the buffer that has not been loaded yet.
218+
" This diagnostics was stored `autoload/lsp/ui/vim/diagnostics.vim` but not highlighted.
219+
" So we should refresh highlights when buffer opened.
220+
call lsp#ui#vim#diagnostics#force_refresh(l:buf)
221+
212222
for l:server_name in lsp#get_whitelisted_servers(l:buf)
213223
call s:ensure_flush(l:buf, l:server_name, function('s:fire_lsp_buffer_enabled', [l:server_name, l:buf]))
214224
endfor
@@ -508,18 +518,13 @@ function! s:ensure_init(buf, server_name, cb) abort
508518
" server has already started, but not initialized
509519

510520
let l:server_info = l:server['server_info']
511-
if has_key(l:server_info, 'root_uri')
512-
let l:root_uri = l:server_info['root_uri'](l:server_info)
513-
else
514-
let l:root_uri = lsp#utils#get_default_root_uri()
515-
endif
516-
521+
let l:root_uri = has_key(l:server_info, 'root_uri') ? l:server_info['root_uri'](l:server_info) : ''
517522
if empty(l:root_uri)
518523
let l:msg = s:new_rpc_error('ignore initialization lsp server due to empty root_uri', { 'server_name': a:server_name, 'lsp_id': l:server['lsp_id'] })
519524
call lsp#log(l:msg)
520-
call a:cb(l:msg)
521-
return
525+
let l:root_uri = lsp#utils#get_default_root_uri()
522526
endif
527+
let l:server['server_info']['_root_uri_resolved'] = l:root_uri
523528

524529
if has_key(l:server_info, 'capabilities')
525530
let l:capabilities = l:server_info['capabilities']

autoload/lsp/ui/vim/diagnostics.vim

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,22 @@ function! lsp#ui#vim#diagnostics#handle_text_document_publish_diagnostics(server
2020
call lsp#ui#vim#signs#set(a:server_name, a:data)
2121
endfunction
2222

23+
function! lsp#ui#vim#diagnostics#force_refresh(bufnr) abort
24+
let l:data = lsp#ui#vim#diagnostics#get_document_diagnostics(a:bufnr)
25+
if !empty(l:data)
26+
for [l:server_name, l:response] in items(l:data)
27+
call lsp#ui#vim#virtual#set(l:server_name, l:response)
28+
call lsp#ui#vim#highlights#set(l:server_name, l:response)
29+
call lsp#ui#vim#diagnostics#textprop#set(l:server_name, l:response)
30+
call lsp#ui#vim#signs#set(l:server_name, l:response)
31+
endfor
32+
endif
33+
endfunction
34+
35+
function! lsp#ui#vim#diagnostics#get_document_diagnostics(bufnr) abort
36+
return get(s:diagnostics, lsp#utils#get_buffer_uri(a:bufnr), {})
37+
endfunction
38+
2339
function! lsp#ui#vim#diagnostics#document_diagnostics() abort
2440
if !g:lsp_diagnostics_enabled
2541
call lsp#utils#error('Diagnostics manually disabled -- g:lsp_diagnostics_enabled = 0')

0 commit comments

Comments
 (0)