mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
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.
This commit is contained in:
parent
be45f32753
commit
87457f9ae8
@ -376,7 +376,7 @@ impl WindowTextSystem {
|
|||||||
runs: &[TextRun],
|
runs: &[TextRun],
|
||||||
wrap_width: Option<Pixels>,
|
wrap_width: Option<Pixels>,
|
||||||
) -> Result<SmallVec<[WrappedLine; 1]>> {
|
) -> Result<SmallVec<[WrappedLine; 1]>> {
|
||||||
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 font_runs = self.font_runs_pool.lock().pop().unwrap_or_default();
|
||||||
|
|
||||||
let mut lines = SmallVec::new();
|
let mut lines = SmallVec::new();
|
||||||
@ -444,7 +444,7 @@ impl WindowTextSystem {
|
|||||||
// Skip `\n` character.
|
// Skip `\n` character.
|
||||||
line_start = line_end + 1;
|
line_start = line_end + 1;
|
||||||
if let Some(run) = runs.peek_mut() {
|
if let Some(run) = runs.peek_mut() {
|
||||||
run.len = run.len.saturating_sub(1);
|
run.len -= 1;
|
||||||
if run.len == 0 {
|
if run.len == 0 {
|
||||||
runs.next();
|
runs.next();
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,15 @@ const MARKDOWN_EXAMPLE: &'static str = r#"
|
|||||||
## Headings
|
## 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.
|
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<V>) + 'static) -> Subscription
|
||||||
|
where
|
||||||
|
// Bounds from impl:
|
||||||
|
V: 'static,
|
||||||
|
```
|
||||||
|
|
||||||
## Emphasis
|
## Emphasis
|
||||||
Emphasis can be added with italics or bold. *This text will be italic*. _This will also be italic_
|
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)]);
|
cx.bind_keys([KeyBinding::new("cmd-c", markdown::Copy, None)]);
|
||||||
|
|
||||||
let node_runtime = FakeNodeRuntime::new();
|
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);
|
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();
|
Assets.load_fonts(cx).unwrap();
|
||||||
|
|
||||||
cx.activate(true);
|
cx.activate(true);
|
||||||
|
Loading…
Reference in New Issue
Block a user