diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-01-03 18:13:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-03 18:13:21 +0100 |
commit | c1ffd3d2cb94b94aa427316b834dc3df03eea0ce (patch) | |
tree | 488bb866bcfeadae6f59d8d9c4f24fd4a228063a | |
parent | 7a5b6a3261b9e5393e01176f25b56f4d69b3abda (diff) |
fix(lsp): don't error if completionItem/resolve request fails (#17250)
-rw-r--r-- | cli/lsp/language_server.rs | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 3e08f5ad4..f44f8e071 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -1959,28 +1959,31 @@ impl Inner { if let Some(data) = &data.tsc { let specifier = &data.specifier; let req = tsc::RequestMethod::GetCompletionDetails(data.into()); - let maybe_completion_info: Option<tsc::CompletionEntryDetails> = - self.ts_server.request(self.snapshot(), req).await.map_err( - |err| { - error!("Unable to get completion info from TypeScript: {}", err); - LspError::internal_error() - }, - )?; - if let Some(completion_info) = maybe_completion_info { - completion_info - .as_completion_item(¶ms, data, specifier, self) - .map_err(|err| { + let result: Result<Option<tsc::CompletionEntryDetails>, _> = + self.ts_server.request(self.snapshot(), req).await; + match result { + Ok(maybe_completion_info) => { + if let Some(completion_info) = maybe_completion_info { + completion_info + .as_completion_item(¶ms, data, specifier, self) + .map_err(|err| { + error!( + "Failed to serialize virtual_text_document response: {}", + err + ); + LspError::internal_error() + })? + } else { error!( - "Failed to serialize virtual_text_document response: {}", - err + "Received an undefined response from tsc for completion details." ); - LspError::internal_error() - })? - } else { - error!( - "Received an undefined response from tsc for completion details." - ); - params + params + } + } + Err(err) => { + error!("Unable to get completion info from TypeScript: {}", err); + return Ok(params); + } } } else if let Some(url) = data.documentation { CompletionItem { |