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
impl LineMap
Sourcepub fn from_source<S: Source + ?Sized>(source: &S) -> Self
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);Sourcepub fn line_count(&self) -> usize
pub fn line_count(&self) -> usize
Returns the total number of lines in the source.
Sourcepub fn line_start(&self, line: u32) -> Option<usize>
pub fn line_start(&self, line: u32) -> Option<usize>
Returns the byte offset of the start of the given line (0-indexed).
Sourcepub fn line_end(&self, line: u32) -> Option<usize>
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.
Sourcepub fn offset_to_line_col_utf16<S: Source + ?Sized>(
&self,
source: &S,
offset: usize,
) -> (u32, u32)
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);Sourcepub fn line_col_utf16_to_offset<S: Source + ?Sized>(
&self,
source: &S,
line: u32,
col_utf16: u32,
) -> usize
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);