lsp: Fill in version for SnippetEdit from drive (#17360)

Piotr Osiewicz created

Related to #16680 

Release Notes:

- N/A

Change summary

crates/project/src/lsp_store.rs | 36 +++++++++++++++++++---------------
1 file changed, 20 insertions(+), 16 deletions(-)

Detailed changes

crates/project/src/lsp_store.rs 🔗

@@ -5715,11 +5715,10 @@ impl LspStore {
                                 }
                             }
                             if !snippet_edits.is_empty() {
-                                if let Some(buffer_version) = op.text_document.version {
-                                    let buffer_id = buffer_to_edit.read(cx).remote_id();
-                                    // Check if the edit that triggered that edit has been made by this participant.
-                                    let most_recent_edit = this
-                                        .buffer_snapshots
+                                let buffer_id = buffer_to_edit.read(cx).remote_id();
+                                let version = if let Some(buffer_version) = op.text_document.version
+                                {
+                                    this.buffer_snapshots
                                         .get(&buffer_id)
                                         .and_then(|server_to_snapshots| {
                                             let all_snapshots = server_to_snapshots
@@ -5731,17 +5730,22 @@ impl LspStore {
                                                 .ok()
                                                 .and_then(|index| all_snapshots.get(index))
                                         })
-                                        .and_then(|lsp_snapshot| {
-                                            let version = lsp_snapshot.snapshot.version();
-                                            version.iter().max_by_key(|timestamp| timestamp.value)
-                                        });
-                                    if let Some(most_recent_edit) = most_recent_edit {
-                                        cx.emit(LspStoreEvent::SnippetEdit {
-                                            buffer_id,
-                                            edits: snippet_edits,
-                                            most_recent_edit,
-                                        });
-                                    }
+                                        .map(|lsp_snapshot| lsp_snapshot.snapshot.version())
+                                } else {
+                                    Some(buffer_to_edit.read(cx).saved_version())
+                                };
+
+                                let most_recent_edit = version.and_then(|version| {
+                                    version.iter().max_by_key(|timestamp| timestamp.value)
+                                });
+                                // Check if the edit that triggered that edit has been made by this participant.
+
+                                if let Some(most_recent_edit) = most_recent_edit {
+                                    cx.emit(LspStoreEvent::SnippetEdit {
+                                        buffer_id,
+                                        edits: snippet_edits,
+                                        most_recent_edit,
+                                    });
                                 }
                             }