From 45223520d67b4905c121abef713d0ac88bb08c1b Mon Sep 17 00:00:00 2001 From: "gcp-cherry-pick-bot[bot]" <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2025 11:38:30 +0100 Subject: [PATCH] Fix LSP rename in Go (cherry-pick #25073) (#25075) Cherry-picked 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. Co-authored-by: Antonio Scandurra --- 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 b831b0e6810e7087cae4e37f9c0d7c5806390587..f0addf3e947a69e3d49ca82efc4c25c133450d57 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -1896,13 +1896,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)