Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-core/src/selection.rs')
| -rw-r--r-- | helix-core/src/selection.rs | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/helix-core/src/selection.rs b/helix-core/src/selection.rs index 5bde08e3..76de6362 100644 --- a/helix-core/src/selection.rs +++ b/helix-core/src/selection.rs @@ -9,13 +9,13 @@ use crate::{ }, line_ending::get_line_ending, movement::Direction, - tree_sitter::Node, - Assoc, ChangeSet, RopeSlice, + Assoc, ChangeSet, RopeGraphemes, RopeSlice, }; use helix_stdx::range::is_subset; use helix_stdx::rope::{self, RopeSliceExt}; use smallvec::{smallvec, SmallVec}; use std::{borrow::Cow, iter, slice}; +use tree_sitter::Node; /// A single selection range. /// @@ -76,8 +76,8 @@ impl Range { } pub fn from_node(node: Node, text: RopeSlice, direction: Direction) -> Self { - let from = text.byte_to_char(node.start_byte() as usize); - let to = text.byte_to_char(node.end_byte() as usize); + let from = text.byte_to_char(node.start_byte()); + let to = text.byte_to_char(node.end_byte()); Range::new(from, to).with_direction(direction) } @@ -379,7 +379,7 @@ impl Range { /// Returns true if this Range covers a single grapheme in the given text pub fn is_single_grapheme(&self, doc: RopeSlice) -> bool { - let mut graphemes = doc.slice(self.from()..self.to()).graphemes(); + let mut graphemes = RopeGraphemes::new(doc.slice(self.from()..self.to())); let first = graphemes.next(); let second = graphemes.next(); first.is_some() && second.is_none() @@ -619,6 +619,7 @@ impl Selection { self } + // TODO: consume an iterator or a vec to reduce allocations? #[must_use] pub fn new(ranges: SmallVec<[Range; 1]>, primary_index: usize) -> Self { assert!(!ranges.is_empty()); @@ -720,12 +721,6 @@ impl IntoIterator for Selection { } } -impl FromIterator<Range> for Selection { - fn from_iter<T: IntoIterator<Item = Range>>(ranges: T) -> Self { - Self::new(ranges.into_iter().collect(), 0) - } -} - impl From<Range> for Selection { fn from(range: Range) -> Self { Self { |