From c9531dc797c0743b6d9c077363b90eea065f02d1 Mon Sep 17 00:00:00 2001 From: kjeremy Date: Thu, 23 Jul 2020 17:40:43 -0400 Subject: Set the document version after changes are applied but before vfs --- crates/rust-analyzer/src/main_loop.rs | 9 ++++++--- 1 file 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 { })? .on::(|this, params| { if let Ok(path) = from_proto::vfs_path(¶ms.text_document.uri) { - *this.mem_docs.get_mut(&path).unwrap() = params.text_document.version; + let doc = this.mem_docs.get_mut(&path).unwrap(); let vfs = &mut this.vfs.write().0; let file_id = vfs.file_id(&path).unwrap(); let mut text = String::from_utf8(vfs.file_contents(file_id).to_vec()).unwrap(); apply_document_changes(&mut text, params.content_changes); - vfs.set_file_contents(path.clone(), Some(text.into_bytes())); - this.mem_docs.insert(path, params.text_document.version); + // The version passed in DidChangeTextDocument is the version after all edits are applied + // so we should apply it before the vfs is notified. + *doc = params.text_document.version; + + vfs.set_file_contents(path.clone(), Some(text.into_bytes())); } Ok(()) })? -- cgit v1.2.3