use apollo_parser::TextRange;
use ropey::Rope;
pub(crate) fn lsp_range_from_cst_textrange(
range: TextRange,
source_text: &Rope,
offset: Option<u32>,
) -> lsp::Range {
let start_offset = u32::from(range.start()) + offset.unwrap_or(0);
let length = u32::from(range.end()) + offset.unwrap_or(0) - start_offset;
let start_line = source_text.byte_to_line(start_offset as usize);
let character_at_line = source_text.line_to_byte(start_line);
let start_character = start_offset - character_at_line as u32;
let end_line = start_line;
let end_character = start_character + length;
lsp::Range {
start: lsp::Position {
line: start_line as u32,
character: start_character,
},
end: lsp::Position {
line: end_line as u32,
character: end_character,
},
}
}