From 87457f9ae8d55a579e456f480e5813f89c105af5 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 18 Jul 2024 22:37:30 -0600 Subject: [PATCH] Fix off-by-one errors in syntax highlighting (#14780) In the case that a line ended with a 0-length run, we would get our highlights offset by one position. Release Notes: - Fixed syntax highlights being offset from syntax in diagnostics popovers. --- crates/gpui/src/text_system.rs | 4 ++-- crates/markdown/examples/markdown.rs | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/crates/gpui/src/text_system.rs b/crates/gpui/src/text_system.rs index d9afea43f3..b891192a70 100644 --- a/crates/gpui/src/text_system.rs +++ b/crates/gpui/src/text_system.rs @@ -376,7 +376,7 @@ impl WindowTextSystem { runs: &[TextRun], wrap_width: Option, ) -> Result> { - let mut runs = runs.iter().cloned().peekable(); + let mut runs = runs.iter().filter(|run| run.len > 0).cloned().peekable(); let mut font_runs = self.font_runs_pool.lock().pop().unwrap_or_default(); let mut lines = SmallVec::new(); @@ -444,7 +444,7 @@ impl WindowTextSystem { // Skip `\n` character. line_start = line_end + 1; if let Some(run) = runs.peek_mut() { - run.len = run.len.saturating_sub(1); + run.len -= 1; if run.len == 0 { runs.next(); } diff --git a/crates/markdown/examples/markdown.rs b/crates/markdown/examples/markdown.rs index 19314df313..5b008468ca 100644 --- a/crates/markdown/examples/markdown.rs +++ b/crates/markdown/examples/markdown.rs @@ -15,6 +15,15 @@ const MARKDOWN_EXAMPLE: &'static str = r#" ## Headings Headings are created by adding one or more `#` symbols before your heading text. The number of `#` you use will determine the size of the heading. +```rust +gpui::window::ViewContext +impl<'a, V> ViewContext<'a, V> +pub fn on_blur(&mut self, handle: &FocusHandle, listener: impl FnMut(&mut V, &mut iewContext) + 'static) -> Subscription +where + // Bounds from impl: + V: 'static, +``` + ## Emphasis Emphasis can be added with italics or bold. *This text will be italic*. _This will also be italic_ @@ -94,12 +103,13 @@ pub fn main() { cx.bind_keys([KeyBinding::new("cmd-c", markdown::Copy, None)]); let node_runtime = FakeNodeRuntime::new(); - let language_registry = Arc::new(LanguageRegistry::new( - Task::ready(()), - cx.background_executor().clone(), - )); - languages::init(language_registry.clone(), node_runtime, cx); theme::init(LoadThemes::JustBase, cx); + + let language_registry = + LanguageRegistry::new(Task::ready(()), cx.background_executor().clone()); + language_registry.set_theme(cx.theme().clone()); + let language_registry = Arc::new(language_registry); + languages::init(language_registry.clone(), node_runtime, cx); Assets.load_fonts(cx).unwrap(); cx.activate(true);