pub struct MarkerList { /* private fields */ }Expand description
Marker list implementation using IntervalTree for O(log n) operations
This provides a backward-compatible API for the old Vec-based implementation, but uses IntervalTree internally for better performance with many markers.
Point markers (single positions) are represented as zero-length intervals.
Implementations§
Source§impl MarkerList
impl MarkerList
Sourcepub fn create(&mut self, position: usize, left_affinity: bool) -> MarkerId
pub fn create(&mut self, position: usize, left_affinity: bool) -> MarkerId
Create a new marker at the given position
§Arguments
position- Byte offset in the bufferleft_affinity- If true, marker stays before text inserted at this position
§Returns
The ID of the newly created marker
Note: Point markers are represented as zero-length intervals in the tree. The IntervalTree handles position adjustments using interval semantics, which differs slightly from explicit affinity for zero-length markers at exact edit positions. In practice, this doesn’t affect the LSP diagnostics use case.
Sourcepub fn set_position(&mut self, id: MarkerId, new_position: usize) -> bool
pub fn set_position(&mut self, id: MarkerId, new_position: usize) -> bool
Move a marker to a new byte position, preserving its ID and affinity.
Implemented as delete + reinsert in the interval tree to maintain BST ordering invariants. The MarkerId is preserved so external references (VirtualTextManager, OverlayManager, MarginManager) remain valid. Returns false if the marker doesn’t exist. Cost: O(log n)
Sourcepub fn get_position(&self, id: MarkerId) -> Option<usize>
pub fn get_position(&self, id: MarkerId) -> Option<usize>
Get the current byte position of a marker
For point markers (zero-length intervals), returns the start position. Cost: O(log n) with the IntervalTree implementation.
Sourcepub fn query_range(
&self,
start: usize,
end: usize,
) -> Vec<(MarkerId, usize, usize)>
pub fn query_range( &self, start: usize, end: usize, ) -> Vec<(MarkerId, usize, usize)>
Query all markers that overlap with a byte range
This is an efficient way to find all markers in a viewport/visible region. Returns a Vec of (MarkerId, start_position, end_position) tuples.
Cost: O(log n + k) where k is the number of overlapping markers
§Example
// Get all markers in the visible viewport
let visible_markers = marker_list.query_range(viewport_start, viewport_end);Sourcepub fn adjust_for_insert(&mut self, position: usize, length: usize)
pub fn adjust_for_insert(&mut self, position: usize, length: usize)
Adjust all markers for an insertion
§Arguments
position- Byte offset where text was insertedlength- Number of bytes inserted
Delegates to IntervalTree’s adjust_for_edit with positive delta. Cost: O(log n)
Sourcepub fn adjust_for_delete(&mut self, position: usize, length: usize)
pub fn adjust_for_delete(&mut self, position: usize, length: usize)
Adjust all markers for a deletion
§Arguments
position- Byte offset where deletion startslength- Number of bytes deleted
Delegates to IntervalTree’s adjust_for_edit with negative delta. Markers within the deleted range are automatically handled by the tree. Cost: O(log n)
Sourcepub fn buffer_size(&self) -> usize
pub fn buffer_size(&self) -> usize
Get the total size of the buffer (not directly tracked by IntervalTree)
Note: This method is kept for API compatibility but is no longer used internally. The buffer size is managed by the Buffer struct, not by markers.
Sourcepub fn marker_count(&self) -> usize
pub fn marker_count(&self) -> usize
Get the number of markers
Sourcepub fn create_line_anchor(
&mut self,
start: usize,
end: usize,
estimated_line: usize,
confidence: AnchorConfidence,
) -> MarkerId
pub fn create_line_anchor( &mut self, start: usize, end: usize, estimated_line: usize, confidence: AnchorConfidence, ) -> MarkerId
Create a line anchor at a specific byte range
This creates a marker that represents a line with an estimated line number. The byte positions are exact, but the line number may be estimated.
Sourcepub fn get_line_anchor_info(
&self,
id: MarkerId,
) -> Option<(usize, AnchorConfidence)>
pub fn get_line_anchor_info( &self, id: MarkerId, ) -> Option<(usize, AnchorConfidence)>
Get the line number and confidence for a line anchor
Sourcepub fn update_line_anchor(
&mut self,
id: MarkerId,
estimated_line: usize,
confidence: AnchorConfidence,
) -> bool
pub fn update_line_anchor( &mut self, id: MarkerId, estimated_line: usize, confidence: AnchorConfidence, ) -> bool
Update a line anchor’s line number and confidence
Sourcepub fn query_line_anchors(
&self,
start: usize,
end: usize,
) -> Vec<(MarkerId, usize, usize, usize)>
pub fn query_line_anchors( &self, start: usize, end: usize, ) -> Vec<(MarkerId, usize, usize, usize)>
Query all line anchors in a byte range
Trait Implementations§
Source§impl Debug for MarkerList
impl Debug for MarkerList
Auto Trait Implementations§
impl Freeze for MarkerList
impl !RefUnwindSafe for MarkerList
impl !Send for MarkerList
impl !Sync for MarkerList
impl Unpin for MarkerList
impl UnsafeUnpin for MarkerList
impl !UnwindSafe for MarkerList
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more