From ce8741977b775c5a85e2bfeb032887083690147f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 28 Oct 2021 19:02:26 +0200 Subject: [PATCH] Clip points coming from language server This avoids panicking in Zed if the points they give us are invalid. Co-Authored-By: Max Brunsfeld --- crates/buffer/src/lib.rs | 6 +++++- crates/language/src/lib.rs | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/buffer/src/lib.rs b/crates/buffer/src/lib.rs index 0ea890003774a33644e61b59904f07bcadb21634..2fbd050bc8e47e1a093e3cb9e89d1283532cac4a 100644 --- a/crates/buffer/src/lib.rs +++ b/crates/buffer/src/lib.rs @@ -570,7 +570,7 @@ impl Buffer { } pub fn clip_point(&self, point: Point, bias: Bias) -> Point { - self.visible_text.clip_point(point, bias) + self.content().clip_point(point, bias) } pub fn clip_offset(&self, offset: usize, bias: Bias) -> usize { @@ -1899,6 +1899,10 @@ impl<'a> Content<'a> { FullOffset(summary.visible + summary.deleted + overshoot) } + pub fn clip_point(&self, point: Point, bias: Bias) -> Point { + self.visible_text.clip_point(point, bias) + } + fn point_for_offset(&self, offset: usize) -> Result { if offset <= self.len() { Ok(self.text_summary_for_range(0..offset).lines) diff --git a/crates/language/src/lib.rs b/crates/language/src/lib.rs index 351d6840b327a3df77bce95a363530dec4ab29d9..57540982d82cd811f184733d4b4dc4073807774a 100644 --- a/crates/language/src/lib.rs +++ b/crates/language/src/lib.rs @@ -711,7 +711,9 @@ impl Buffer { end = last_edit_new_end + (end - last_edit_old_end); } - Some((start..end, (severity, diagnostic.message))) + let range = + content.clip_point(start, Bias::Left)..content.clip_point(end, Bias::Right); + Some((range, (severity, diagnostic.message))) }), ) };