From fc811d14b1c12a8fc5ae06483fe2f59d6110a237 Mon Sep 17 00:00:00 2001 From: Kay Simmons Date: Fri, 17 Feb 2023 22:00:39 -0800 Subject: [PATCH] Fix failing test --- crates/editor/src/editor.rs | 19 ++---------- crates/editor/src/multi_buffer.rs | 4 +-- crates/language/src/buffer.rs | 4 +-- crates/util/src/util.rs | 51 ++++++++++++++++++++++++++++--- 4 files changed, 52 insertions(+), 26 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 2cf0c9a36f..14566b9591 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -77,14 +77,14 @@ use std::{ cmp::{self, Ordering, Reverse}, mem, num::NonZeroU32, - ops::{Deref, DerefMut, Range, RangeInclusive}, + ops::{Deref, DerefMut, Range}, path::Path, sync::Arc, time::{Duration, Instant}, }; pub use sum_tree::Bias; use theme::{DiagnosticStyle, Theme}; -use util::{post_inc, ResultExt, TryFutureExt}; +use util::{post_inc, ResultExt, TryFutureExt, RangeExt}; use workspace::{ItemNavHistory, ViewId, Workspace, WorkspaceId}; use crate::git::diff_hunk_to_display; @@ -6959,21 +6959,6 @@ pub fn split_words<'a>(text: &'a str) -> impl std::iter::Iterator { - fn sorted(&self) -> Range; - fn to_inclusive(&self) -> RangeInclusive; -} - -impl RangeExt for Range { - fn sorted(&self) -> Self { - cmp::min(&self.start, &self.end).clone()..cmp::max(&self.start, &self.end).clone() - } - - fn to_inclusive(&self) -> RangeInclusive { - self.start.clone()..=self.end.clone() - } -} - trait RangeToAnchorExt { fn to_anchors(self, snapshot: &MultiBufferSnapshot) -> Range; } diff --git a/crates/editor/src/multi_buffer.rs b/crates/editor/src/multi_buffer.rs index ad661b84ee..faf6787d00 100644 --- a/crates/editor/src/multi_buffer.rs +++ b/crates/editor/src/multi_buffer.rs @@ -2961,14 +2961,14 @@ impl MultiBufferSnapshot { let range = range.start.to_offset(self)..range.end.to_offset(self); let mut cursor = self.excerpts.cursor::(); - cursor.seek(&dbg!(range.start), Bias::Right, &()); + cursor.seek(&range.start, Bias::Right, &()); let start_excerpt = cursor.item(); if range.start == range.end { return start_excerpt.map(|excerpt| (excerpt, *cursor.start())); } - cursor.seek(&dbg!(range.end), Bias::Right, &()); + cursor.seek(&range.end, Bias::Right, &()); let end_excerpt = cursor.item(); start_excerpt diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 857c0a063f..00a754a776 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -41,7 +41,7 @@ pub use text::{Buffer as TextBuffer, BufferSnapshot as TextBufferSnapshot, Opera use theme::SyntaxTheme; #[cfg(any(test, feature = "test-support"))] use util::RandomCharIter; -use util::TryFutureExt as _; +use util::{RangeExt, TryFutureExt as _}; #[cfg(any(test, feature = "test-support"))] pub use {tree_sitter_rust, tree_sitter_typescript}; @@ -2382,7 +2382,7 @@ impl BufferSnapshot { let Some((open, close)) = open.zip(close) else { continue }; let bracket_range = open.start..=close.end; - if !bracket_range.contains(&range.start) && !bracket_range.contains(&range.end) { + if !bracket_range.overlaps(&range) { continue; } diff --git a/crates/util/src/util.rs b/crates/util/src/util.rs index ea8fdee2a8..37e1f29ce2 100644 --- a/crates/util/src/util.rs +++ b/crates/util/src/util.rs @@ -3,16 +3,17 @@ pub mod paths; #[cfg(any(test, feature = "test-support"))] pub mod test; -pub use backtrace::Backtrace; -use futures::Future; -use rand::{seq::SliceRandom, Rng}; use std::{ - cmp::Ordering, - ops::AddAssign, + cmp::{self, Ordering}, + ops::{AddAssign, Range, RangeInclusive}, pin::Pin, task::{Context, Poll}, }; +pub use backtrace::Backtrace; +use futures::Future; +use rand::{seq::SliceRandom, Rng}; + #[derive(Debug, Default)] pub struct StaffMode(pub bool); @@ -245,6 +246,46 @@ macro_rules! async_iife { }; } +pub trait RangeExt { + fn sorted(&self) -> Self; + fn to_inclusive(&self) -> RangeInclusive; + fn overlaps(&self, other: &Range) -> bool; +} + +impl RangeExt for Range { + fn sorted(&self) -> Self { + cmp::min(&self.start, &self.end).clone()..cmp::max(&self.start, &self.end).clone() + } + + fn to_inclusive(&self) -> RangeInclusive { + self.start.clone()..=self.end.clone() + } + + fn overlaps(&self, other: &Range) -> bool { + self.contains(&other.start) + || self.contains(&other.end) + || other.contains(&self.start) + || other.contains(&self.end) + } +} + +impl RangeExt for RangeInclusive { + fn sorted(&self) -> Self { + cmp::min(self.start(), self.end()).clone()..=cmp::max(self.start(), self.end()).clone() + } + + fn to_inclusive(&self) -> RangeInclusive { + self.clone() + } + + fn overlaps(&self, other: &Range) -> bool { + self.contains(&other.start) + || self.contains(&other.end) + || other.contains(&self.start()) + || other.contains(&self.end()) + } +} + #[cfg(test)] mod tests { use super::*;