use tree_sitter::{Point, Range}; pub fn editor_quote(s: impl AsRef) -> String { // TODO format!("'{}'", s.as_ref()) } pub fn range_from_byte_offsets(content: impl AsRef<[u8]>, start: usize, end: usize) -> Range { // Kakoune's line indices are 1-based let mut start_row = 1; let mut start_column = 1; let mut end_row = 1; let mut end_column = 1; for (i, byte) in content.as_ref().iter().enumerate() { if i < start { if *byte == b'\n' { start_row += 1; start_column = 1; } else { start_column += 1; } } if i < end { if *byte == b'\n' { end_row += 1; end_column = 1; } else { end_column += 1; } } } Range { start_byte: start, end_byte: end, start_point: Point { row: start_row, column: start_column, }, end_point: Point { row: end_row, column: end_column, }, } }