From 37c6cd43e0f47ca22bf5e61b29e606d684633b9d Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 29 Oct 2025 14:52:03 +0100 Subject: [PATCH] project: Fix inlay hints duplicatig on chunk start (#41461) Release Notes: - N/A *or* Added/Fixed/Improved ... --- crates/editor/src/inlays/inlay_hints.rs | 4 ++-- crates/project/src/lsp_store.rs | 6 +++--- crates/project/src/lsp_store/inlay_hint_cache.rs | 6 +++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/crates/editor/src/inlays/inlay_hints.rs b/crates/editor/src/inlays/inlay_hints.rs index 2cbea33932..d0d92cbce6 100644 --- a/crates/editor/src/inlays/inlay_hints.rs +++ b/crates/editor/src/inlays/inlay_hints.rs @@ -2695,7 +2695,7 @@ let c = 3;"# ), ( "main.rs", - lsp::Range::new(lsp::Position::new(50, 0), lsp::Position::new(100, 11)) + lsp::Range::new(lsp::Position::new(50, 0), lsp::Position::new(100, 0)) ), ], lsp_request_ranges @@ -2754,7 +2754,7 @@ let c = 3;"# ), ( "main.rs", - lsp::Range::new(lsp::Position::new(50, 0), lsp::Position::new(100, 11)) + lsp::Range::new(lsp::Position::new(50, 0), lsp::Position::new(100, 0)) ), ], lsp_request_ranges diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 5b0aee69b6..3263395f40 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -6608,9 +6608,9 @@ impl LspStore { return HashMap::default(); } - let last_chunk_number = applicable_chunks.len() - 1; + let last_chunk_number = existing_inlay_hints.buffer_chunks_len() - 1; - for (i, row_chunk) in applicable_chunks.into_iter().enumerate() { + for row_chunk in applicable_chunks { match ( existing_inlay_hints .cached_hints(&row_chunk) @@ -6623,7 +6623,7 @@ impl LspStore { .cloned(), ) { (None, None) => { - let end = if last_chunk_number == i { + let end = if last_chunk_number == row_chunk.id { Point::new(row_chunk.end, buffer_snapshot.line_len(row_chunk.end)) } else { Point::new(row_chunk.end, 0) diff --git a/crates/project/src/lsp_store/inlay_hint_cache.rs b/crates/project/src/lsp_store/inlay_hint_cache.rs index 0d527b83d2..7d3ec27e5a 100644 --- a/crates/project/src/lsp_store/inlay_hint_cache.rs +++ b/crates/project/src/lsp_store/inlay_hint_cache.rs @@ -67,7 +67,7 @@ struct HintForId { /// #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct BufferChunk { - id: usize, + pub id: usize, pub start: BufferRow, pub end: BufferRow, } @@ -218,4 +218,8 @@ impl BufferInlayHints { debug_assert_eq!(*hint_id, id, "Invalid pointer {hint_for_id:?}"); Some(hint) } + + pub fn buffer_chunks_len(&self) -> usize { + self.buffer_chunks.len() + } }