Struct ra_ap_text_edit::TextRange [−][src]
pub struct TextRange { /* fields omitted */ }
Expand description
A range in text, represented as a pair of TextSize
.
It is a logic error for start
to be greater than end
.
Implementations
impl TextRange
[src]
impl TextRange
[src]pub fn new(start: TextSize, end: TextSize) -> TextRange
[src]
pub fn new(start: TextSize, end: TextSize) -> TextRange
[src]Creates a new TextRange
with the given start
and end
(start..end
).
Panics
Panics if end < start
.
Examples
let start = TextSize::from(5); let end = TextSize::from(10); let range = TextRange::new(start, end); assert_eq!(range.start(), start); assert_eq!(range.end(), end); assert_eq!(range.len(), end - start);
pub fn at(offset: TextSize, len: TextSize) -> TextRange
[src]
pub fn at(offset: TextSize, len: TextSize) -> TextRange
[src]Create a new TextRange
with the given offset
and len
(offset..offset + len
).
Examples
let text = "0123456789"; let offset = TextSize::from(2); let length = TextSize::from(5); let range = TextRange::at(offset, length); assert_eq!(range, TextRange::new(offset, offset + length)); assert_eq!(&text[range], "23456")
impl TextRange
[src]
impl TextRange
[src]Manipulation methods.
pub fn contains(self, offset: TextSize) -> bool
[src]
pub fn contains(self, offset: TextSize) -> bool
[src]Check if this range contains an offset.
The end index is considered excluded.
Examples
let (start, end): (TextSize, TextSize); let range = TextRange::new(start, end); assert!(range.contains(start)); assert!(!range.contains(end));
pub fn contains_inclusive(self, offset: TextSize) -> bool
[src]
pub fn contains_inclusive(self, offset: TextSize) -> bool
[src]Check if this range contains an offset.
The end index is considered included.
Examples
let (start, end): (TextSize, TextSize); let range = TextRange::new(start, end); assert!(range.contains_inclusive(start)); assert!(range.contains_inclusive(end));
pub fn contains_range(self, other: TextRange) -> bool
[src]
pub fn contains_range(self, other: TextRange) -> bool
[src]Check if this range completely contains another range.
Examples
let larger = TextRange::new(0.into(), 20.into()); let smaller = TextRange::new(5.into(), 15.into()); assert!(larger.contains_range(smaller)); assert!(!smaller.contains_range(larger)); // a range always contains itself assert!(larger.contains_range(larger)); assert!(smaller.contains_range(smaller));
pub fn intersect(self, other: TextRange) -> Option<TextRange>
[src]
pub fn intersect(self, other: TextRange) -> Option<TextRange>
[src]The range covered by both ranges, if it exists. If the ranges touch but do not overlap, the output range is empty.
Examples
assert_eq!( TextRange::intersect( TextRange::new(0.into(), 10.into()), TextRange::new(5.into(), 15.into()), ), Some(TextRange::new(5.into(), 10.into())), );
pub fn cover(self, other: TextRange) -> TextRange
[src]
pub fn cover(self, other: TextRange) -> TextRange
[src]Extends the range to cover other
as well.
Examples
assert_eq!( TextRange::cover( TextRange::new(0.into(), 5.into()), TextRange::new(15.into(), 20.into()), ), TextRange::new(0.into(), 20.into()), );
pub fn cover_offset(self, offset: TextSize) -> TextRange
[src]
pub fn cover_offset(self, offset: TextSize) -> TextRange
[src]Extends the range to cover other
offsets as well.
Examples
assert_eq!( TextRange::empty(0.into()).cover_offset(20.into()), TextRange::new(0.into(), 20.into()), )
pub fn checked_add(self, offset: TextSize) -> Option<TextRange>
[src]
pub fn checked_add(self, offset: TextSize) -> Option<TextRange>
[src]Add an offset to this range.
Note that this is not appropriate for changing where a TextRange
is
within some string; rather, it is for changing the reference anchor
that the TextRange
is measured against.
The unchecked version (Add::add
) will always panic on overflow,
in contrast to primitive integers, which check in debug mode only.
pub fn checked_sub(self, offset: TextSize) -> Option<TextRange>
[src]
pub fn checked_sub(self, offset: TextSize) -> Option<TextRange>
[src]Subtract an offset from this range.
Note that this is not appropriate for changing where a TextRange
is
within some string; rather, it is for changing the reference anchor
that the TextRange
is measured against.
The unchecked version (Sub::sub
) will always panic on overflow,
in contrast to primitive integers, which check in debug mode only.
pub fn ordering(self, other: TextRange) -> Ordering
[src]
pub fn ordering(self, other: TextRange) -> Ordering
[src]Relative order of the two ranges (overlapping ranges are considered equal).
This is useful when, for example, binary searching an array of disjoint ranges.
Examples
let a = TextRange::new(0.into(), 3.into()); let b = TextRange::new(4.into(), 5.into()); assert_eq!(a.ordering(b), Ordering::Less); let a = TextRange::new(0.into(), 3.into()); let b = TextRange::new(3.into(), 5.into()); assert_eq!(a.ordering(b), Ordering::Less); let a = TextRange::new(0.into(), 3.into()); let b = TextRange::new(2.into(), 5.into()); assert_eq!(a.ordering(b), Ordering::Equal); let a = TextRange::new(0.into(), 3.into()); let b = TextRange::new(2.into(), 2.into()); assert_eq!(a.ordering(b), Ordering::Equal); let a = TextRange::new(2.into(), 3.into()); let b = TextRange::new(2.into(), 2.into()); assert_eq!(a.ordering(b), Ordering::Greater);
Trait Implementations
impl<'_, T> Add<T> for &'_ TextRange where
TextRange: Add<T>,
<TextRange as Add<T>>::Output == TextRange,
[src]
impl<'_, T> Add<T> for &'_ TextRange where
TextRange: Add<T>,
<TextRange as Add<T>>::Output == TextRange,
[src]impl<A> AddAssign<A> for TextRange where
TextRange: Add<A>,
<TextRange as Add<A>>::Output == TextRange,
[src]
impl<A> AddAssign<A> for TextRange where
TextRange: Add<A>,
<TextRange as Add<A>>::Output == TextRange,
[src]pub fn add_assign(&mut self, rhs: A)
[src]
pub fn add_assign(&mut self, rhs: A)
[src]Performs the +=
operation. Read more
impl RangeBounds<TextSize> for TextRange
[src]
impl RangeBounds<TextSize> for TextRange
[src]pub fn start_bound(&self) -> Bound<&TextSize>
[src]
pub fn start_bound(&self) -> Bound<&TextSize>
[src]Start index bound. Read more
fn contains<U>(&self, item: &U) -> bool where
T: PartialOrd<U>,
U: PartialOrd<T> + ?Sized,
1.35.0[src]
fn contains<U>(&self, item: &U) -> bool where
T: PartialOrd<U>,
U: PartialOrd<T> + ?Sized,
1.35.0[src]Returns true
if item
is contained in the range. Read more
impl<'_, T> Sub<T> for &'_ TextRange where
TextRange: Sub<T>,
<TextRange as Sub<T>>::Output == TextRange,
[src]
impl<'_, T> Sub<T> for &'_ TextRange where
TextRange: Sub<T>,
<TextRange as Sub<T>>::Output == TextRange,
[src]impl<S> SubAssign<S> for TextRange where
TextRange: Sub<S>,
<TextRange as Sub<S>>::Output == TextRange,
[src]
impl<S> SubAssign<S> for TextRange where
TextRange: Sub<S>,
<TextRange as Sub<S>>::Output == TextRange,
[src]pub fn sub_assign(&mut self, rhs: S)
[src]
pub fn sub_assign(&mut self, rhs: S)
[src]Performs the -=
operation. Read more
impl Copy for TextRange
[src]
impl Eq for TextRange
[src]
impl StructuralEq for TextRange
[src]
impl StructuralPartialEq for TextRange
[src]
Auto Trait Implementations
impl RefUnwindSafe for TextRange
impl Send for TextRange
impl Sync for TextRange
impl Unpin for TextRange
impl UnwindSafe for TextRange
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more