LineIndex

Struct LineIndex 

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

Precomputed line offset index for efficient byte offset to line number conversion.

Building the index is O(n) in source length, but subsequent lookups are O(log n). Use this when you need to perform multiple line number lookups on the same source.

§Example

use gruel_span::LineIndex;

let source = "line1\nline2\nline3";
let index = LineIndex::new(source);

assert_eq!(index.line_number(0), 1);  // Start of line 1
assert_eq!(index.line_number(6), 2);  // Start of line 2
assert_eq!(index.line_number(12), 3); // Start of line 3

Implementations§

Source§

impl LineIndex

Source

pub fn new(source: &str) -> Self

Build a line index from source text.

This scans the entire source once to find all newline positions. Time complexity: O(n) where n is the source length.

Source

pub fn line_number(&self, offset: u32) -> usize

Get the 1-based line number for a byte offset.

Time complexity: O(log n) where n is the number of lines.

§Panics

In debug builds, panics if offset exceeds the source length. In release builds, out-of-bounds offsets are clamped to the source length.

Source

pub fn span_line_number(&self, span: Span) -> usize

Get the 1-based line number for a span’s start position.

Source

pub fn line_col(&self, offset: u32) -> (usize, usize)

Get the 1-based line and column numbers for a byte offset.

Returns (line, column) where both are 1-indexed. The column is the number of bytes from the start of the line, plus 1.

Time complexity: O(log n) where n is the number of lines.

§Panics

In debug builds, panics if offset exceeds the source length. In release builds, out-of-bounds offsets are clamped to the source length.

Source

pub fn span_line_col(&self, span: Span) -> (usize, usize)

Get the 1-based line and column numbers for a span’s start position.

Returns (line, column) where both are 1-indexed.

Source

pub fn line_count(&self) -> usize

Returns the number of lines in the source.

Trait Implementations§

Source§

impl Clone for LineIndex

Source§

fn clone(&self) -> LineIndex

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 LineIndex

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.