From 98d514f5bf2c9a53519f462e084791551dc8f69b Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 22 Jan 2024 15:21:10 -0700 Subject: [PATCH 1/2] Fix off-by-one highlighting in hover tooltip rust analyzer has a tendency to return markdown of the form: ```rust // <-- note the leading space blah blah blah ``` This is clearly defectuous, so we used to .trim() the output. Unfortunately we trim after applying syntax highlighting, so that causes the output to look goofy. Fix this by updating the highlighting when we trim. --- crates/editor/src/hover_popover.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/crates/editor/src/hover_popover.rs b/crates/editor/src/hover_popover.rs index f311f20ae6..a4bc1c5cde 100644 --- a/crates/editor/src/hover_popover.rs +++ b/crates/editor/src/hover_popover.rs @@ -394,6 +394,27 @@ async fn parse_blocks( } } + let leading_space = text.chars().take_while(|c| c.is_whitespace()).count(); + if leading_space > 0 { + highlights = highlights + .into_iter() + .map(|(range, style)| { + ( + range.start.saturating_sub(leading_space) + ..range.end.saturating_sub(leading_space), + style, + ) + }) + .collect(); + region_ranges = region_ranges + .into_iter() + .map(|range| { + range.start.saturating_sub(leading_space) + ..range.end.saturating_sub(leading_space), + }) + .collect(); + } + ParsedMarkdown { text: text.trim().to_string(), highlights, From fd8d2d41b02168196d7369f0f4161c9358fb97c6 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 22 Jan 2024 15:53:12 -0700 Subject: [PATCH 2/2] One off --- crates/editor/src/hover_popover.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/editor/src/hover_popover.rs b/crates/editor/src/hover_popover.rs index a4bc1c5cde..668d00f1aa 100644 --- a/crates/editor/src/hover_popover.rs +++ b/crates/editor/src/hover_popover.rs @@ -409,8 +409,7 @@ async fn parse_blocks( region_ranges = region_ranges .into_iter() .map(|range| { - range.start.saturating_sub(leading_space) - ..range.end.saturating_sub(leading_space), + range.start.saturating_sub(leading_space)..range.end.saturating_sub(leading_space) }) .collect(); }