diff --git a/crates/llm-ls/src/document.rs b/crates/llm-ls/src/document.rs index bd06f28..7ac6af4 100644 --- a/crates/llm-ls/src/document.rs +++ b/crates/llm-ls/src/document.rs @@ -176,7 +176,7 @@ impl Document { let rope = Rope::from_str(text); let text_len = rope.len_chars(); let end_idx = idx + text_len; - self.text.insert(idx, text); + self.text.try_insert(idx, text)?; ( end_idx, Point { @@ -189,7 +189,7 @@ impl Document { + (range.end.character as usize); let slice_size = removal_idx - start_idx; self.text.try_remove(start_idx..removal_idx)?; - self.text.insert(start_idx, text); + self.text.try_insert(start_idx, text)?; let rope = Rope::from_str(text); let text_len = rope.len_chars(); let character_difference = text_len as isize - slice_size as isize; diff --git a/crates/llm-ls/src/main.rs b/crates/llm-ls/src/main.rs index 6e21b55..d0cd9e8 100644 --- a/crates/llm-ls/src/main.rs +++ b/crates/llm-ls/src/main.rs @@ -429,12 +429,22 @@ impl LlmService { ) -> LspResult { let request_id = Uuid::new_v4(); let span = info_span!("completion_request", %request_id); + async move { let document_map = self.document_map.read().await; - let document = document_map - .get(params.text_document_position.text_document.uri.as_str()) - .ok_or_else(|| internal_error("failed to find document"))?; + let document = + match document_map.get(params.text_document_position.text_document.uri.as_str()) { + Some(doc) => doc, + None => { + debug!("failed to find document"); + return Ok(GetCompletionsResult { + request_id, + completions: vec![], + }); + } + }; + info!( document_url = %params.text_document_position.text_document.uri, cursor_line = ?params.text_document_position.position.line, @@ -545,6 +555,9 @@ impl LanguageServer for LlmService { async fn did_open(&self, params: DidOpenTextDocumentParams) { let uri = params.text_document.uri.to_string(); + if uri == "file:///" { + return; + } match Document::open( ¶ms.text_document.language_id, ¶ms.text_document.text, @@ -567,6 +580,9 @@ impl LanguageServer for LlmService { async fn did_change(&self, params: DidChangeTextDocumentParams) { let uri = params.text_document.uri.to_string(); + if uri == "file:///" { + return; + } if params.content_changes.is_empty() { return; } @@ -593,7 +609,7 @@ impl LanguageServer for LlmService { } } } else { - warn!("textDocument/didChange {uri}: document not found"); + debug!("textDocument/didChange {uri}: document not found"); } }