diff --git a/autoload/LanguageClient.vim b/autoload/LanguageClient.vim index 82a427611..c76b2a186 100644 --- a/autoload/LanguageClient.vim +++ b/autoload/LanguageClient.vim @@ -1056,7 +1056,7 @@ function! LanguageClient#textDocument_rangeFormatting_sync(...) abort return l:result isnot v:null endfunction -function! LanguageClient#textDocument_didOpen() abort +function! LanguageClient#textDocument_didOpen(...) abort return LanguageClient#Notify('textDocument/didOpen', { \ 'filename': LSP#filename(), \ 'text': LSP#text(), @@ -1113,7 +1113,7 @@ function! LanguageClient#startServer(...) abort \ 'cmdargs': [], \ } call extend(l:params, a:0 > 0 ? {'cmdargs': a:000} : {}) - return LanguageClient#Call('languageClient/startServer', l:params, v:null) + return LanguageClient#Call('languageClient/startServer', l:params, funcref('LanguageClient#textDocument_didOpen')) endfunction function! LanguageClient#registerServerCommands(cmds, ...) abort diff --git a/src/language_server_protocol.rs b/src/language_server_protocol.rs index 64aa041ed..faee09a59 100644 --- a/src/language_server_protocol.rs +++ b/src/language_server_protocol.rs @@ -2873,6 +2873,7 @@ impl LanguageClient { if let Err(err) = ret { warn!("Failed to start language server automatically. {}", err); } + self.text_document_did_open(params)?; } Ok(()) @@ -2927,6 +2928,7 @@ impl LanguageClient { if let Err(err) = ret { warn!("Failed to start language server automatically. {}", err); } + self.text_document_did_open(params)?; } } @@ -3788,15 +3790,13 @@ impl LanguageClient { .rpcclient .notify("setbufvar", json!([filename, VIM_IS_SERVER_RUNNING, 1]))?; - self.text_document_did_open(¶ms)?; - self.text_document_did_change(¶ms)?; - self.vim()? .rpcclient .notify("s:ExecuteAutocmd", "LanguageClientStarted")?; Ok(Value::Null) } + #[tracing::instrument(level = "info", skip(self))] fn on_server_crash(&self, language_id: &LanguageId) -> Result<()> { if language_id.is_none() { return Ok(()); @@ -3853,6 +3853,10 @@ impl LanguageClient { self.vim()?.echoerr("Server crashed, restarting client")?; std::thread::sleep(Duration::from_millis(300 * (restarts as u64).pow(2))); self.start_server(&json!({"languageId": language_id.clone().unwrap()}))?; + self.text_document_did_open(&json!({ + "languageId": language_id.clone().unwrap(), + "filename": filename, + }))?; Ok(()) } diff --git a/src/types.rs b/src/types.rs index b07b80842..00079a1df 100644 --- a/src/types.rs +++ b/src/types.rs @@ -135,6 +135,7 @@ pub struct State { #[serde(skip_serializing)] pub clients: HashMap>, + #[serde(skip_serializing)] pub restarts: HashMap, #[serde(skip_serializing)]