aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/rust-analyzer/src/main_loop.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index ac95e428e..e95d4157c 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -420,14 +420,17 @@ impl GlobalState {
420 })? 420 })?
421 .on::<lsp_types::notification::DidChangeTextDocument>(|this, params| { 421 .on::<lsp_types::notification::DidChangeTextDocument>(|this, params| {
422 if let Ok(path) = from_proto::vfs_path(&params.text_document.uri) { 422 if let Ok(path) = from_proto::vfs_path(&params.text_document.uri) {
423 *this.mem_docs.get_mut(&path).unwrap() = params.text_document.version; 423 let doc = this.mem_docs.get_mut(&path).unwrap();
424 let vfs = &mut this.vfs.write().0; 424 let vfs = &mut this.vfs.write().0;
425 let file_id = vfs.file_id(&path).unwrap(); 425 let file_id = vfs.file_id(&path).unwrap();
426 let mut text = String::from_utf8(vfs.file_contents(file_id).to_vec()).unwrap(); 426 let mut text = String::from_utf8(vfs.file_contents(file_id).to_vec()).unwrap();
427 apply_document_changes(&mut text, params.content_changes); 427 apply_document_changes(&mut text, params.content_changes);
428 vfs.set_file_contents(path.clone(), Some(text.into_bytes()));
429 428
430 this.mem_docs.insert(path, params.text_document.version); 429 // The version passed in DidChangeTextDocument is the version after all edits are applied
430 // so we should apply it before the vfs is notified.
431 *doc = params.text_document.version;
432
433 vfs.set_file_contents(path.clone(), Some(text.into_bytes()));
431 } 434 }
432 Ok(()) 435 Ok(())
433 })? 436 })?