Skip to main content

LineMap

Struct LineMap 

Source
pub struct LineMap { /* private fields */ }
Expand description

A map that tracks line starts in a source file for efficient coordinate conversion.

LineMap provides methods to convert between byte offsets and (line, column) coordinates. It is optimized for cases where multiple conversions are needed for the same source.

Implementations§

Source§

impl LineMap

Source

pub fn from_source<S: Source + ?Sized>(source: &S) -> Self

Creates a new LineMap from a source.

This will scan the entire source to find line endings (\n).

§Examples
let source = SourceText::new("hello\nworld");
let line_map = LineMap::from_source(&source);
assert_eq!(line_map.line_count(), 2);
Source

pub fn line_count(&self) -> usize

Returns the total number of lines in the source.

Source

pub fn line_start(&self, line: u32) -> Option<usize>

Returns the byte offset of the start of the given line (0-indexed).

Source

pub fn line_end(&self, line: u32) -> Option<usize>

Returns the byte offset of the end of the given line (0-indexed).

The end of the line includes the line ending character(s) if present, except for the last line which ends at the end of the source.

Source

pub fn offset_to_line_col_utf16<S: Source + ?Sized>( &self, source: &S, offset: usize, ) -> (u32, u32)

Converts a byte offset to (line, column) coordinates using UTF-16 for the column.

This is useful for LSP integration where positions are typically specified in UTF-16.

§Examples
let source = SourceText::new("hello\nworld");
let line_map = LineMap::from_source(&source);
let (line, col) = line_map.offset_to_line_col_utf16(&source, 7);
assert_eq!(line, 1);
assert_eq!(col, 1);
Source

pub fn line_col_utf16_to_offset<S: Source + ?Sized>( &self, source: &S, line: u32, col_utf16: u32, ) -> usize

Converts (line, column) coordinates (in UTF-16) to a byte offset.

§Examples
let source = SourceText::new("hello\nworld");
let line_map = LineMap::from_source(&source);
let offset = line_map.line_col_utf16_to_offset(&source, 1, 1);
assert_eq!(offset, 7);

Trait Implementations§

Source§

impl Clone for LineMap

Source§

fn clone(&self) -> LineMap

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LineMap

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V