From 00bb9a4e9213378e492cc5de10f1de2782d00f6f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Feb 2025 11:37:58 +0100 Subject: [PATCH] Fix LSP rename in Go (#25073) Some language servers report version 0 even if the buffer hasn't been opened yet. We detect this case and treat it as if the version was `None`. Closes #23706 Release Notes: - Fixed a bug that prevented renames for some languages. --- crates/project/src/lsp_store.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 17a1306df6..28e88c504a 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -1986,13 +1986,21 @@ impl LocalLspStore { if let Some(version) = version { let buffer_id = buffer.read(cx).remote_id(); - let snapshots = self + let snapshots = if let Some(snapshots) = self .buffer_snapshots .get_mut(&buffer_id) .and_then(|m| m.get_mut(&server_id)) - .ok_or_else(|| { - anyhow!("no snapshots found for buffer {buffer_id} and server {server_id}") - })?; + { + snapshots + } else if version == 0 { + // Some language servers report version 0 even if the buffer hasn't been opened yet. + // We detect this case and treat it as if the version was `None`. + return Ok(buffer.read(cx).text_snapshot()); + } else { + return Err(anyhow!( + "no snapshots found for buffer {buffer_id} and server {server_id}" + )); + }; let found_snapshot = snapshots .binary_search_by_key(&version, |e| e.version)