(
&self,
path: &Path,
content: &str,
language_id: &str,
)
| 317 | } |
| 318 | |
| 319 | pub async fn open_document( |
| 320 | &self, |
| 321 | path: &Path, |
| 322 | content: &str, |
| 323 | language_id: &str, |
| 324 | ) -> Result<(), LspError> { |
| 325 | let uri = path_to_uri(path)?; |
| 326 | |
| 327 | let version = { |
| 328 | let mut versions = self.file_versions.write().await; |
| 329 | let v = versions.entry(path.to_path_buf()).or_insert(0); |
| 330 | *v |
| 331 | }; |
| 332 | |
| 333 | if version > 0 { |
| 334 | let next_version = version + 1; |
| 335 | self.file_versions |
| 336 | .write() |
| 337 | .await |
| 338 | .insert(path.to_path_buf(), next_version); |
| 339 | |
| 340 | let params = DidChangeTextDocumentParams { |
| 341 | text_document: VersionedTextDocumentIdentifier { |
| 342 | uri, |
| 343 | version: next_version as i32, |
| 344 | }, |
| 345 | content_changes: vec![TextDocumentContentChangeEvent { |
| 346 | range: None, |
| 347 | range_length: None, |
| 348 | text: content.to_string(), |
| 349 | }], |
| 350 | }; |
| 351 | |
| 352 | self.notify("textDocument/didChange", serde_json::to_value(params)?) |
| 353 | .await?; |
| 354 | } else { |
| 355 | self.file_versions |
| 356 | .write() |
| 357 | .await |
| 358 | .insert(path.to_path_buf(), 0); |
| 359 | self.diagnostics.write().await.remove(path); |
| 360 | |
| 361 | let params = DidOpenTextDocumentParams { |
| 362 | text_document: TextDocumentItem { |
| 363 | uri, |
| 364 | language_id: language_id.to_string(), |
| 365 | version: 0, |
| 366 | text: content.to_string(), |
| 367 | }, |
| 368 | }; |
| 369 | |
| 370 | self.notify("textDocument/didOpen", serde_json::to_value(params)?) |
| 371 | .await?; |
| 372 | } |
| 373 | |
| 374 | Ok(()) |
| 375 | } |
| 376 |
no test coverage detected