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 3Implementations§
Source§impl LineIndex
impl LineIndex
Sourcepub fn new(source: &str) -> Self
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.
Sourcepub fn line_number(&self, offset: u32) -> usize
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.
Sourcepub fn span_line_number(&self, span: Span) -> usize
pub fn span_line_number(&self, span: Span) -> usize
Get the 1-based line number for a span’s start position.
Sourcepub fn line_col(&self, offset: u32) -> (usize, usize)
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.
Sourcepub fn span_line_col(&self, span: Span) -> (usize, usize)
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.
Sourcepub fn line_count(&self) -> usize
pub fn line_count(&self) -> usize
Returns the number of lines in the source.