use mago_database::file::File as MagoFile;
use tower_lsp::lsp_types::Position;
use tower_lsp::lsp_types::Range;
#[must_use]
pub fn position_at_offset(file: &MagoFile, offset: u32) -> Position {
Position { line: file.line_number(offset), character: file.column_number(offset) }
}
#[must_use]
pub fn offset_at_position(file: &MagoFile, position: Position) -> u32 {
let line_start = file.get_line_start_offset(position.line).unwrap_or(file.size);
let column = position.character;
let line_end = file.get_line_end_offset(position.line).unwrap_or(file.size);
(line_start + column).min(line_end).min(file.size)
}
#[must_use]
pub fn range_at_offsets(file: &MagoFile, start: u32, end: u32) -> Range {
Range { start: position_at_offset(file, start), end: position_at_offset(file, end) }
}